use serde_json::{json, Value};
use crate::transport::core::{TransportError, TransportTrait};
pub async fn abandon_transaction(
transport: &dyn TransportTrait,
txid: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(txid)];
let raw = transport.send_request("abandontransaction", ¶ms).await?;
Ok(raw)
}
pub async fn abort_rescan(transport: &dyn TransportTrait) -> Result<Value, TransportError> {
let params = Vec::<Value>::new();
let raw = transport.send_request("abortrescan", ¶ms).await?;
Ok(raw)
}
pub async fn backup_wallet(
transport: &dyn TransportTrait,
destination: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(destination)];
let raw = transport.send_request("backupwallet", ¶ms).await?;
Ok(raw)
}
pub async fn bump_fee(
transport: &dyn TransportTrait,
txid: serde_json::Value,
options: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(txid), json!(options)];
let raw = transport.send_request("bumpfee", ¶ms).await?;
Ok(raw)
}
#[allow(clippy::too_many_arguments)]
pub async fn create_wallet(
transport: &dyn TransportTrait,
wallet_name: serde_json::Value,
disable_private_keys: serde_json::Value,
blank: serde_json::Value,
passphrase: serde_json::Value,
avoid_reuse: serde_json::Value,
descriptors: serde_json::Value,
load_on_startup: serde_json::Value,
external_signer: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![
json!(wallet_name),
json!(disable_private_keys),
json!(blank),
json!(passphrase),
json!(avoid_reuse),
json!(descriptors),
json!(load_on_startup),
json!(external_signer),
];
let raw = transport.send_request("createwallet", ¶ms).await?;
Ok(raw)
}
pub async fn create_wallet_descriptor(
transport: &dyn TransportTrait,
r#type: serde_json::Value,
options: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(r#type), json!(options)];
let raw = transport.send_request("createwalletdescriptor", ¶ms).await?;
Ok(raw)
}
pub async fn encrypt_wallet(
transport: &dyn TransportTrait,
passphrase: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(passphrase)];
let raw = transport.send_request("encryptwallet", ¶ms).await?;
Ok(raw)
}
pub async fn get_addresses_by_label(
transport: &dyn TransportTrait,
label: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(label)];
let raw = transport.send_request("getaddressesbylabel", ¶ms).await?;
Ok(raw)
}
pub async fn get_address_info(
transport: &dyn TransportTrait,
address: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(address)];
let raw = transport.send_request("getaddressinfo", ¶ms).await?;
Ok(raw)
}
pub async fn get_balance(
transport: &dyn TransportTrait,
dummy: serde_json::Value,
min_conf: serde_json::Value,
include_watchonly: serde_json::Value,
avoid_reuse: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(dummy), json!(min_conf), json!(include_watchonly), json!(avoid_reuse)];
let raw = transport.send_request("getbalance", ¶ms).await?;
Ok(raw)
}
pub async fn get_balances(transport: &dyn TransportTrait) -> Result<Value, TransportError> {
let params = Vec::<Value>::new();
let raw = transport.send_request("getbalances", ¶ms).await?;
Ok(raw)
}
pub async fn get_hd_keys(
transport: &dyn TransportTrait,
options: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(options)];
let raw = transport.send_request("gethdkeys", ¶ms).await?;
Ok(raw)
}
pub async fn get_new_address(
transport: &dyn TransportTrait,
label: serde_json::Value,
address_type: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(label), json!(address_type)];
let raw = transport.send_request("getnewaddress", ¶ms).await?;
Ok(raw)
}
pub async fn get_raw_change_address(
transport: &dyn TransportTrait,
address_type: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(address_type)];
let raw = transport.send_request("getrawchangeaddress", ¶ms).await?;
Ok(raw)
}
pub async fn get_received_by_address(
transport: &dyn TransportTrait,
address: serde_json::Value,
min_conf: serde_json::Value,
include_immature_coinbase: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(address), json!(min_conf), json!(include_immature_coinbase)];
let raw = transport.send_request("getreceivedbyaddress", ¶ms).await?;
Ok(raw)
}
pub async fn get_received_by_label(
transport: &dyn TransportTrait,
label: serde_json::Value,
min_conf: serde_json::Value,
include_immature_coinbase: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(label), json!(min_conf), json!(include_immature_coinbase)];
let raw = transport.send_request("getreceivedbylabel", ¶ms).await?;
Ok(raw)
}
pub async fn get_transaction(
transport: &dyn TransportTrait,
txid: serde_json::Value,
include_watchonly: serde_json::Value,
verbose: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(txid), json!(include_watchonly), json!(verbose)];
let raw = transport.send_request("gettransaction", ¶ms).await?;
Ok(raw)
}
pub async fn get_wallet_info(transport: &dyn TransportTrait) -> Result<Value, TransportError> {
let params = Vec::<Value>::new();
let raw = transport.send_request("getwalletinfo", ¶ms).await?;
Ok(raw)
}
pub async fn import_descriptors(
transport: &dyn TransportTrait,
requests: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(requests)];
let raw = transport.send_request("importdescriptors", ¶ms).await?;
Ok(raw)
}
pub async fn import_pruned_funds(
transport: &dyn TransportTrait,
rawtransaction: serde_json::Value,
txoutproof: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(rawtransaction), json!(txoutproof)];
let raw = transport.send_request("importprunedfunds", ¶ms).await?;
Ok(raw)
}
pub async fn keypool_refill(
transport: &dyn TransportTrait,
newsize: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(newsize)];
let raw = transport.send_request("keypoolrefill", ¶ms).await?;
Ok(raw)
}
pub async fn list_address_groupings(
transport: &dyn TransportTrait,
) -> Result<Value, TransportError> {
let params = Vec::<Value>::new();
let raw = transport.send_request("listaddressgroupings", ¶ms).await?;
Ok(raw)
}
pub async fn list_descriptors(
transport: &dyn TransportTrait,
private: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(private)];
let raw = transport.send_request("listdescriptors", ¶ms).await?;
Ok(raw)
}
pub async fn list_labels(
transport: &dyn TransportTrait,
purpose: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(purpose)];
let raw = transport.send_request("listlabels", ¶ms).await?;
Ok(raw)
}
pub async fn list_lock_unspent(transport: &dyn TransportTrait) -> Result<Value, TransportError> {
let params = Vec::<Value>::new();
let raw = transport.send_request("listlockunspent", ¶ms).await?;
Ok(raw)
}
pub async fn list_received_by_address(
transport: &dyn TransportTrait,
min_conf: serde_json::Value,
include_empty: serde_json::Value,
include_watchonly: serde_json::Value,
address_filter: serde_json::Value,
include_immature_coinbase: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![
json!(min_conf),
json!(include_empty),
json!(include_watchonly),
json!(address_filter),
json!(include_immature_coinbase),
];
let raw = transport.send_request("listreceivedbyaddress", ¶ms).await?;
Ok(raw)
}
pub async fn list_received_by_label(
transport: &dyn TransportTrait,
min_conf: serde_json::Value,
include_empty: serde_json::Value,
include_watchonly: serde_json::Value,
include_immature_coinbase: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![
json!(min_conf),
json!(include_empty),
json!(include_watchonly),
json!(include_immature_coinbase),
];
let raw = transport.send_request("listreceivedbylabel", ¶ms).await?;
Ok(raw)
}
pub async fn list_since_block(
transport: &dyn TransportTrait,
block_hash: serde_json::Value,
target_confirmations: serde_json::Value,
include_watchonly: serde_json::Value,
include_removed: serde_json::Value,
include_change: serde_json::Value,
label: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![
json!(block_hash),
json!(target_confirmations),
json!(include_watchonly),
json!(include_removed),
json!(include_change),
json!(label),
];
let raw = transport.send_request("listsinceblock", ¶ms).await?;
Ok(raw)
}
pub async fn list_transactions(
transport: &dyn TransportTrait,
label: serde_json::Value,
count: serde_json::Value,
skip: serde_json::Value,
include_watchonly: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(label), json!(count), json!(skip), json!(include_watchonly)];
let raw = transport.send_request("listtransactions", ¶ms).await?;
Ok(raw)
}
pub async fn list_unspent(
transport: &dyn TransportTrait,
min_conf: serde_json::Value,
max_conf: serde_json::Value,
addresses: serde_json::Value,
include_unsafe: serde_json::Value,
query_options: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![
json!(min_conf),
json!(max_conf),
json!(addresses),
json!(include_unsafe),
json!(query_options),
];
let raw = transport.send_request("listunspent", ¶ms).await?;
Ok(raw)
}
pub async fn list_wallet_dir(transport: &dyn TransportTrait) -> Result<Value, TransportError> {
let params = Vec::<Value>::new();
let raw = transport.send_request("listwalletdir", ¶ms).await?;
Ok(raw)
}
pub async fn list_wallets(transport: &dyn TransportTrait) -> Result<Value, TransportError> {
let params = Vec::<Value>::new();
let raw = transport.send_request("listwallets", ¶ms).await?;
Ok(raw)
}
pub async fn load_wallet(
transport: &dyn TransportTrait,
filename: serde_json::Value,
load_on_startup: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(filename), json!(load_on_startup)];
let raw = transport.send_request("loadwallet", ¶ms).await?;
Ok(raw)
}
pub async fn lock_unspent(
transport: &dyn TransportTrait,
unlock: serde_json::Value,
transactions: serde_json::Value,
persistent: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(unlock), json!(transactions), json!(persistent)];
let raw = transport.send_request("lockunspent", ¶ms).await?;
Ok(raw)
}
pub async fn migrate_wallet(
transport: &dyn TransportTrait,
wallet_name: serde_json::Value,
passphrase: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(wallet_name), json!(passphrase)];
let raw = transport.send_request("migratewallet", ¶ms).await?;
Ok(raw)
}
pub async fn psbt_bump_fee(
transport: &dyn TransportTrait,
txid: serde_json::Value,
options: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(txid), json!(options)];
let raw = transport.send_request("psbtbumpfee", ¶ms).await?;
Ok(raw)
}
pub async fn remove_pruned_funds(
transport: &dyn TransportTrait,
txid: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(txid)];
let raw = transport.send_request("removeprunedfunds", ¶ms).await?;
Ok(raw)
}
pub async fn rescan_blockchain(
transport: &dyn TransportTrait,
start_height: serde_json::Value,
stop_height: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(start_height), json!(stop_height)];
let raw = transport.send_request("rescanblockchain", ¶ms).await?;
Ok(raw)
}
pub async fn restore_wallet(
transport: &dyn TransportTrait,
wallet_name: serde_json::Value,
backup_file: serde_json::Value,
load_on_startup: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(wallet_name), json!(backup_file), json!(load_on_startup)];
let raw = transport.send_request("restorewallet", ¶ms).await?;
Ok(raw)
}
pub async fn send(
transport: &dyn TransportTrait,
outputs: serde_json::Value,
conf_target: serde_json::Value,
estimate_mode: serde_json::Value,
fee_rate: serde_json::Value,
options: serde_json::Value,
version: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![
json!(outputs),
json!(conf_target),
json!(estimate_mode),
json!(fee_rate),
json!(options),
json!(version),
];
let raw = transport.send_request("send", ¶ms).await?;
Ok(raw)
}
pub async fn send_all(
transport: &dyn TransportTrait,
recipients: serde_json::Value,
conf_target: serde_json::Value,
estimate_mode: serde_json::Value,
fee_rate: serde_json::Value,
options: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![
json!(recipients),
json!(conf_target),
json!(estimate_mode),
json!(fee_rate),
json!(options),
];
let raw = transport.send_request("sendall", ¶ms).await?;
Ok(raw)
}
#[allow(clippy::too_many_arguments)]
pub async fn send_many(
transport: &dyn TransportTrait,
dummy: serde_json::Value,
amounts: serde_json::Value,
min_conf: serde_json::Value,
comment: serde_json::Value,
subtractfeefrom: serde_json::Value,
replaceable: serde_json::Value,
conf_target: serde_json::Value,
estimate_mode: serde_json::Value,
fee_rate: serde_json::Value,
verbose: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![
json!(dummy),
json!(amounts),
json!(min_conf),
json!(comment),
json!(subtractfeefrom),
json!(replaceable),
json!(conf_target),
json!(estimate_mode),
json!(fee_rate),
json!(verbose),
];
let raw = transport.send_request("sendmany", ¶ms).await?;
Ok(raw)
}
#[allow(clippy::too_many_arguments)]
pub async fn send_to_address(
transport: &dyn TransportTrait,
address: serde_json::Value,
amount: serde_json::Value,
comment: serde_json::Value,
comment_to: serde_json::Value,
subtract_fee_from_amount: serde_json::Value,
replaceable: serde_json::Value,
conf_target: serde_json::Value,
estimate_mode: serde_json::Value,
avoid_reuse: serde_json::Value,
fee_rate: serde_json::Value,
verbose: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![
json!(address),
json!(amount),
json!(comment),
json!(comment_to),
json!(subtract_fee_from_amount),
json!(replaceable),
json!(conf_target),
json!(estimate_mode),
json!(avoid_reuse),
json!(fee_rate),
json!(verbose),
];
let raw = transport.send_request("sendtoaddress", ¶ms).await?;
Ok(raw)
}
pub async fn set_label(
transport: &dyn TransportTrait,
address: serde_json::Value,
label: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(address), json!(label)];
let raw = transport.send_request("setlabel", ¶ms).await?;
Ok(raw)
}
pub async fn set_wallet_flag(
transport: &dyn TransportTrait,
flag: serde_json::Value,
value: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(flag), json!(value)];
let raw = transport.send_request("setwalletflag", ¶ms).await?;
Ok(raw)
}
pub async fn sign_message(
transport: &dyn TransportTrait,
address: serde_json::Value,
message: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(address), json!(message)];
let raw = transport.send_request("signmessage", ¶ms).await?;
Ok(raw)
}
pub async fn sign_raw_transaction_with_wallet(
transport: &dyn TransportTrait,
hex_string: serde_json::Value,
prev_txs: serde_json::Value,
sighash_type: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(hex_string), json!(prev_txs), json!(sighash_type)];
let raw = transport.send_request("signrawtransactionwithwallet", ¶ms).await?;
Ok(raw)
}
pub async fn simulate_raw_transaction(
transport: &dyn TransportTrait,
rawtxs: serde_json::Value,
options: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(rawtxs), json!(options)];
let raw = transport.send_request("simulaterawtransaction", ¶ms).await?;
Ok(raw)
}
pub async fn unload_wallet(
transport: &dyn TransportTrait,
wallet_name: serde_json::Value,
load_on_startup: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(wallet_name), json!(load_on_startup)];
let raw = transport.send_request("unloadwallet", ¶ms).await?;
Ok(raw)
}
pub async fn wallet_create_funded_psbt(
transport: &dyn TransportTrait,
inputs: serde_json::Value,
outputs: serde_json::Value,
lock_time: serde_json::Value,
options: serde_json::Value,
bip32_derivs: serde_json::Value,
version: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![
json!(inputs),
json!(outputs),
json!(lock_time),
json!(options),
json!(bip32_derivs),
json!(version),
];
let raw = transport.send_request("walletcreatefundedpsbt", ¶ms).await?;
Ok(raw)
}
pub async fn wallet_display_address(
transport: &dyn TransportTrait,
address: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(address)];
let raw = transport.send_request("walletdisplayaddress", ¶ms).await?;
Ok(raw)
}
pub async fn wallet_lock(transport: &dyn TransportTrait) -> Result<Value, TransportError> {
let params = Vec::<Value>::new();
let raw = transport.send_request("walletlock", ¶ms).await?;
Ok(raw)
}
pub async fn wallet_passphrase(
transport: &dyn TransportTrait,
passphrase: serde_json::Value,
timeout: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(passphrase), json!(timeout)];
let raw = transport.send_request("walletpassphrase", ¶ms).await?;
Ok(raw)
}
pub async fn wallet_passphrase_change(
transport: &dyn TransportTrait,
old_passphrase: serde_json::Value,
new_passphrase: serde_json::Value,
) -> Result<Value, TransportError> {
let params = vec![json!(old_passphrase), json!(new_passphrase)];
let raw = transport.send_request("walletpassphrasechange", ¶ms).await?;
Ok(raw)
}
pub async fn wallet_process_psbt(
transport: &dyn TransportTrait,
psbt: serde_json::Value,
sign: serde_json::Value,
sighash_type: serde_json::Value,
bip32_derivs: serde_json::Value,
finalize: serde_json::Value,
) -> Result<Value, TransportError> {
let params =
vec![json!(psbt), json!(sign), json!(sighash_type), json!(bip32_derivs), json!(finalize)];
let raw = transport.send_request("walletprocesspsbt", ¶ms).await?;
Ok(raw)
}