use crate::client::Contact;
use crate::jsonrpc::error::JsonRpcError;
use crate::types::OptionalTXInfo;
use deep_space::address::Address;
pub async fn maybe_get_optional_tx_info(
our_address: Address,
chain_id: Option<String>,
account_number: Option<u64>,
sequence: Option<u64>,
client: &Contact,
) -> Result<OptionalTXInfo, JsonRpcError> {
let (account_number, sequence) = if account_number.is_none() || sequence.is_none() {
let info = client.get_account_info(our_address).await?;
if info.result.value.is_none() {
return Err(JsonRpcError::NoToken);
}
(
info.result.value.clone().unwrap().account_number,
info.result.value.unwrap().sequence,
)
} else {
(account_number.unwrap(), sequence.unwrap())
};
let chain_id = if let Some(chain_id) = chain_id {
chain_id
} else {
let block = client.get_latest_block().await?;
if let Some(block) = block.block {
block.header.chain_id
} else {
return Err(JsonRpcError::ChainNotRunning);
}
};
Ok(OptionalTXInfo {
account_number,
sequence,
chain_id,
})
}