use crate::rpc::rawtx::RawTxRpc;
use anyhow::Result;
use serde_json::{json, Value};
pub async fn get_transaction(rawtx: &RawTxRpc, txid: &str) -> Result<Value> {
let params = json!([txid, false]); let details = rawtx.get_transaction_details(¶ms).await?;
Ok(details)
}
pub async fn get_transaction_confirmations(rawtx: &RawTxRpc, txid: &str) -> Result<Value> {
let params = json!([txid, false]);
let details = rawtx.get_transaction_details(¶ms).await?;
let confirmations = details
.get("confirmations")
.and_then(|c| c.as_u64())
.unwrap_or(0);
Ok(json!({
"txid": txid,
"confirmations": confirmations,
"blockhash": details.get("blockhash"),
"blocktime": details.get("blocktime")
}))
}
pub async fn get_transaction_output(
rawtx: &RawTxRpc,
txid: &str,
n: u32,
include_mempool: bool,
) -> Result<Value> {
let params = json!([txid, n, include_mempool]);
let result = rawtx.gettxout(¶ms).await?;
Ok(result)
}
pub async fn submit_transaction(rawtx: &RawTxRpc, hex: &str) -> Result<Value> {
let params = json!([hex]);
let result = rawtx.sendrawtransaction(¶ms).await?;
Ok(result)
}
pub async fn test_transaction(rawtx: &RawTxRpc, hex: &str) -> Result<Value> {
let params = json!([hex]);
let result = rawtx.testmempoolaccept(¶ms).await?;
Ok(result)
}
pub async fn decode_transaction(rawtx: &RawTxRpc, hex: &str) -> Result<Value> {
let params = json!([hex]);
let result = rawtx.decoderawtransaction(¶ms).await?;
Ok(result)
}
pub async fn create_transaction(
rawtx: &RawTxRpc,
inputs: Value,
outputs: Value,
locktime: Option<u64>,
replaceable: Option<bool>,
version: Option<u32>,
) -> Result<Value> {
let mut params = json!([inputs, outputs]);
if let Some(lt) = locktime {
params.as_array_mut().unwrap().push(json!(lt));
}
if let Some(rbf) = replaceable {
params.as_array_mut().unwrap().push(json!(rbf));
}
if let Some(v) = version {
params.as_array_mut().unwrap().push(json!(v));
}
let result = rawtx.createrawtransaction(¶ms).await?;
Ok(result)
}