pub mod export;
pub mod import;
pub mod transfer;
use crate::{errors::Result, jsonrpc::client::x as client_x, key, txs, wallet};
impl<T> wallet::Wallet<T>
where
T: key::secp256k1::ReadOnly + key::secp256k1::SignOnly + Clone,
{
#[must_use]
pub fn x(&self) -> X<T> {
X {
inner: self.clone(),
}
}
}
#[derive(Clone, Debug)]
pub struct X<T>
where
T: key::secp256k1::ReadOnly + key::secp256k1::SignOnly + Clone,
{
pub inner: crate::wallet::Wallet<T>,
}
impl<T> X<T>
where
T: key::secp256k1::ReadOnly + key::secp256k1::SignOnly + Clone,
{
pub async fn balance_with_endpoint(&self, http_rpc: &str) -> Result<u64> {
let resp = client_x::get_balance(http_rpc, &self.inner.x_address).await?;
let cur_balance = resp
.result
.expect("unexpected None GetBalanceResult")
.balance;
Ok(cur_balance)
}
pub async fn balances(&self) -> Result<Vec<u64>> {
let mut balances = Vec::new();
for http_rpc in self.inner.base_http_urls.iter() {
let balance = self.balance_with_endpoint(http_rpc).await?;
balances.push(balance);
}
Ok(balances)
}
pub async fn balance(&self) -> Result<u64> {
self.balance_with_endpoint(&self.inner.pick_base_http_url().1)
.await
}
pub async fn utxos(&self) -> Result<Vec<txs::utxo::Utxo>> {
let resp =
client_x::get_utxos(&self.inner.pick_base_http_url().1, &self.inner.p_address).await?;
let utxos = resp
.result
.expect("unexpected None GetUtxosResult")
.utxos
.expect("unexpected None Utxos");
Ok(utxos)
}
#[must_use]
pub fn transfer(&self) -> transfer::Tx<T> {
transfer::Tx::new(self)
}
#[must_use]
pub fn export(&self) -> export::Tx<T> {
export::Tx::new(self)
}
#[must_use]
pub fn import(&self) -> import::Tx<T> {
import::Tx::new(self)
}
}