1use std::future::Future;
4
5use async_trait::async_trait;
6use serde::de::DeserializeOwned;
7
8use crate::transport::core::TransportExt;
9use crate::transport::{TransportError, TransportTrait};
10use crate::types::*;
11
12#[doc = r#"A versioned client trait for Bitcoin Core v30.2"#]
13#[async_trait]
14pub trait BitcoinClient: Send + Sync + TransportTrait + TransportExt + RpcDispatchExt {
15 type Error;
16
17 async fn abandon_transaction(
23 &self,
24 txid: bitcoin::Txid,
25 ) -> Result<AbandonTransactionResponse, Self::Error>;
26
27 async fn abort_rescan(&self) -> Result<AbortRescanResponse, Self::Error>;
30
31 async fn add_connection(
33 &self,
34 address: bitcoin::Address,
35 connection_type: String,
36 v2transport: bool,
37 ) -> Result<AddConnectionResponse, Self::Error>;
38
39 async fn add_node(
45 &self,
46 node: String,
47 command: String,
48 v2transport: Option<bool>,
49 ) -> Result<AddNodeResponse, Self::Error>;
50
51 async fn add_peer_address(
53 &self,
54 address: bitcoin::Address,
55 port: i64,
56 tried: Option<bool>,
57 ) -> Result<AddPeerAddressResponse, Self::Error>;
58
59 async fn analyze_psbt(&self, psbt: String) -> Result<AnalyzePsbtResponse, Self::Error>;
61
62 async fn backup_wallet(&self, destination: String)
64 -> Result<BackupWalletResponse, Self::Error>;
65
66 async fn bump_fee(
79 &self,
80 txid: bitcoin::Txid,
81 options: Option<serde_json::Value>,
82 ) -> Result<BumpFeeResponse, Self::Error>;
83
84 async fn clear_banned(&self) -> Result<ClearBannedResponse, Self::Error>;
86
87 async fn combine_psbt(
90 &self,
91 txs: Vec<serde_json::Value>,
92 ) -> Result<CombinePsbtResponse, Self::Error>;
93
94 async fn combine_raw_transaction(
98 &self,
99 txs: Vec<serde_json::Value>,
100 ) -> Result<CombineRawTransactionResponse, Self::Error>;
101
102 async fn convert_to_psbt(
105 &self,
106 hexstring: String,
107 permitsigdata: Option<bool>,
108 iswitness: Option<bool>,
109 ) -> Result<ConvertToPsbtResponse, Self::Error>;
110
111 async fn create_multisig(
114 &self,
115 nrequired: i64,
116 keys: Vec<serde_json::Value>,
117 address_type: Option<String>,
118 ) -> Result<CreateMultisigResponse, Self::Error>;
119
120 async fn create_psbt(
125 &self,
126 inputs: Vec<serde_json::Value>,
127 outputs: Vec<serde_json::Value>,
128 locktime: Option<i64>,
129 replaceable: Option<bool>,
130 version: Option<i64>,
131 ) -> Result<CreatePsbtResponse, Self::Error>;
132
133 async fn create_raw_transaction(
139 &self,
140 inputs: Vec<serde_json::Value>,
141 outputs: Vec<serde_json::Value>,
142 locktime: Option<i64>,
143 replaceable: Option<bool>,
144 version: Option<i64>,
145 ) -> Result<CreateRawTransactionResponse, Self::Error>;
146
147 async fn create_wallet(
149 &self,
150 wallet_name: String,
151 disable_private_keys: Option<bool>,
152 blank: Option<bool>,
153 passphrase: Option<String>,
154 avoid_reuse: Option<bool>,
155 descriptors: Option<bool>,
156 load_on_startup: Option<bool>,
157 external_signer: Option<bool>,
158 ) -> Result<CreateWalletResponse, Self::Error>;
159
160 async fn create_wallet_descriptor(
163 &self,
164 r#type: String,
165 options: Option<serde_json::Value>,
166 ) -> Result<CreateWalletDescriptorResponse, Self::Error>;
167
168 async fn decode_psbt(&self, psbt: String) -> Result<DecodePsbtResponse, Self::Error>;
170
171 async fn decode_raw_transaction(
173 &self,
174 hexstring: String,
175 iswitness: Option<bool>,
176 ) -> Result<DecodeRawTransactionResponse, Self::Error>;
177
178 async fn decode_script(&self, hexstring: String) -> Result<DecodeScriptResponse, Self::Error>;
180
181 async fn derive_addresses(
192 &self,
193 descriptor: String,
194 range: Option<serde_json::Value>,
195 ) -> Result<DeriveAddressesResponse, Self::Error>;
196
197 async fn descriptor_process_psbt(
200 &self,
201 psbt: String,
202 descriptors: Vec<serde_json::Value>,
203 sighashtype: Option<String>,
204 bip32derivs: Option<bool>,
205 finalize: Option<bool>,
206 ) -> Result<DescriptorProcessPsbtResponse, Self::Error>;
207
208 async fn disconnect_node(
212 &self,
213 address: Option<bitcoin::Address>,
214 nodeid: Option<i64>,
215 ) -> Result<DisconnectNodeResponse, Self::Error>;
216
217 async fn dump_txout_set(
221 &self,
222 path: String,
223 r#type: Option<String>,
224 options: Option<serde_json::Value>,
225 ) -> Result<DumpTxoutSetResponse, Self::Error>;
226
227 async fn echo(
231 &self,
232 arg0: Option<String>,
233 arg1: Option<String>,
234 arg2: Option<String>,
235 arg3: Option<String>,
236 arg4: Option<String>,
237 arg5: Option<String>,
238 arg6: Option<String>,
239 arg7: Option<String>,
240 arg8: Option<String>,
241 arg9: Option<String>,
242 ) -> Result<EchoResponse, Self::Error>;
243
244 async fn echoipc(&self, arg: String) -> Result<EchoipcResponse, Self::Error>;
247
248 async fn echojson(
252 &self,
253 arg0: Option<String>,
254 arg1: Option<String>,
255 arg2: Option<String>,
256 arg3: Option<String>,
257 arg4: Option<String>,
258 arg5: Option<String>,
259 arg6: Option<String>,
260 arg7: Option<String>,
261 arg8: Option<String>,
262 arg9: Option<String>,
263 ) -> Result<EchojsonResponse, Self::Error>;
264
265 async fn encrypt_wallet(
275 &self,
276 passphrase: String,
277 ) -> Result<EncryptWalletResponse, Self::Error>;
278
279 async fn enumerate_signers(&self) -> Result<EnumerateSignersResponse, Self::Error>;
281
282 async fn estimate_raw_fee(
290 &self,
291 conf_target: i64,
292 threshold: Option<i64>,
293 ) -> Result<EstimateRawFeeResponse, Self::Error>;
294
295 async fn estimate_smart_fee(
300 &self,
301 conf_target: i64,
302 estimate_mode: Option<String>,
303 ) -> Result<EstimateSmartFeeResponse, Self::Error>;
304
305 async fn finalize_psbt(
310 &self,
311 psbt: String,
312 extract: Option<bool>,
313 ) -> Result<FinalizePsbtResponse, Self::Error>;
314
315 async fn fund_raw_transaction(
330 &self,
331 hexstring: String,
332 options: Option<serde_json::Value>,
333 iswitness: Option<bool>,
334 ) -> Result<FundRawTransactionResponse, Self::Error>;
335
336 async fn generate(&self) -> Result<(), Self::Error>;
338
339 async fn generate_block(
341 &self,
342 output: String,
343 transactions: Vec<serde_json::Value>,
344 submit: Option<bool>,
345 ) -> Result<GenerateBlockResponse, Self::Error>;
346
347 async fn generate_to_address(
349 &self,
350 nblocks: i64,
351 address: bitcoin::Address,
352 maxtries: Option<i64>,
353 ) -> Result<GenerateToAddressResponse, Self::Error>;
354
355 async fn generate_to_descriptor(
357 &self,
358 num_blocks: i64,
359 descriptor: String,
360 maxtries: Option<i64>,
361 ) -> Result<GenerateToDescriptorResponse, Self::Error>;
362
363 async fn get_added_node_info(
366 &self,
367 node: Option<String>,
368 ) -> Result<GetAddedNodeInfoResponse, Self::Error>;
369
370 async fn get_addresses_by_label(
372 &self,
373 label: String,
374 ) -> Result<GetAddressesByLabelResponse, Self::Error>;
375
376 async fn get_address_info(
379 &self,
380 address: bitcoin::Address,
381 ) -> Result<GetAddressInfoResponse, Self::Error>;
382
383 async fn get_addrman_info(&self) -> Result<GetAddrmanInfoResponse, Self::Error>;
385
386 async fn get_balance(
390 &self,
391 dummy: Option<String>,
392 minconf: Option<i64>,
393 include_watchonly: Option<bool>,
394 avoid_reuse: Option<bool>,
395 ) -> Result<GetBalanceResponse, Self::Error>;
396
397 async fn get_balances(&self) -> Result<GetBalancesResponse, Self::Error>;
399
400 async fn get_best_block_hash(&self) -> Result<GetBestBlockHashResponse, Self::Error>;
402
403 async fn get_block(
408 &self,
409 blockhash: bitcoin::BlockHash,
410 verbosity: Option<i64>,
411 ) -> Result<GetBlockResponse, Self::Error>;
412
413 async fn get_blockchain_info(&self) -> Result<GetBlockchainInfoResponse, Self::Error>;
415
416 async fn get_block_count(&self) -> Result<GetBlockCountResponse, Self::Error>;
419
420 async fn get_block_filter(
422 &self,
423 blockhash: bitcoin::BlockHash,
424 filtertype: Option<String>,
425 ) -> Result<GetBlockFilterResponse, Self::Error>;
426
427 async fn get_block_from_peer(
436 &self,
437 blockhash: bitcoin::BlockHash,
438 peer_id: i64,
439 ) -> Result<GetBlockFromPeerResponse, Self::Error>;
440
441 async fn get_block_hash(&self, height: i64) -> Result<GetBlockHashResponse, Self::Error>;
443
444 async fn get_block_header(
447 &self,
448 blockhash: bitcoin::BlockHash,
449 verbose: Option<bool>,
450 ) -> Result<GetBlockHeaderResponse, Self::Error>;
451
452 async fn get_block_stats(
455 &self,
456 hash_or_height: i64,
457 stats: Option<Vec<serde_json::Value>>,
458 ) -> Result<GetBlockStatsResponse, Self::Error>;
459
460 async fn get_block_template(
468 &self,
469 template_request: serde_json::Value,
470 ) -> Result<GetBlockTemplateResponse, Self::Error>;
471
472 async fn get_chain_states(&self) -> Result<GetChainStatesResponse, Self::Error>;
474
475 async fn get_chain_tips(&self) -> Result<GetChainTipsResponse, Self::Error>;
477
478 async fn get_chain_tx_stats(
480 &self,
481 nblocks: Option<i64>,
482 blockhash: Option<bitcoin::BlockHash>,
483 ) -> Result<GetChainTxStatsResponse, Self::Error>;
484
485 async fn get_connection_count(&self) -> Result<GetConnectionCountResponse, Self::Error>;
487
488 async fn get_deployment_info(
490 &self,
491 blockhash: Option<bitcoin::BlockHash>,
492 ) -> Result<GetDeploymentInfoResponse, Self::Error>;
493
494 async fn get_descriptor_activity(
497 &self,
498 blockhashes: Vec<serde_json::Value>,
499 scanobjects: Vec<serde_json::Value>,
500 include_mempool: Option<bool>,
501 ) -> Result<GetDescriptorActivityResponse, Self::Error>;
502
503 async fn get_descriptor_info(
505 &self,
506 descriptor: String,
507 ) -> Result<GetDescriptorInfoResponse, Self::Error>;
508
509 async fn get_difficulty(&self) -> Result<GetDifficultyResponse, Self::Error>;
511
512 async fn get_hd_keys(
514 &self,
515 options: Option<serde_json::Value>,
516 ) -> Result<GetHdKeysResponse, Self::Error>;
517
518 async fn get_index_info(
520 &self,
521 index_name: Option<String>,
522 ) -> Result<GetIndexInfoResponse, Self::Error>;
523
524 async fn get_memory_info(
526 &self,
527 mode: Option<String>,
528 ) -> Result<GetMemoryInfoResponse, Self::Error>;
529
530 async fn get_mempool_ancestors(
532 &self,
533 txid: bitcoin::Txid,
534 verbose: Option<bool>,
535 ) -> Result<GetMempoolAncestorsResponse, Self::Error>;
536
537 async fn get_mempool_cluster(
539 &self,
540 txid: bitcoin::Txid,
541 ) -> Result<GetMempoolClusterResponse, Self::Error>;
542
543 async fn get_mempool_descendants(
545 &self,
546 txid: bitcoin::Txid,
547 verbose: Option<bool>,
548 ) -> Result<GetMempoolDescendantsResponse, Self::Error>;
549
550 async fn get_mempool_entry(
552 &self,
553 txid: bitcoin::Txid,
554 ) -> Result<GetMempoolEntryResponse, Self::Error>;
555
556 async fn get_mempool_fee_rate_diagram(
558 &self,
559 ) -> Result<GetMempoolFeeRateDiagramResponse, Self::Error>;
560
561 async fn get_mempool_info(&self) -> Result<GetMempoolInfoResponse, Self::Error>;
563
564 async fn get_mining_info(&self) -> Result<GetMiningInfoResponse, Self::Error>;
566
567 async fn get_net_totals(&self) -> Result<GetNetTotalsResponse, Self::Error>;
570
571 async fn get_network_hashps(
575 &self,
576 nblocks: Option<i64>,
577 height: Option<i64>,
578 ) -> Result<GetNetworkHashpsResponse, Self::Error>;
579
580 async fn get_network_info(&self) -> Result<GetNetworkInfoResponse, Self::Error>;
582
583 async fn get_new_address(
587 &self,
588 label: Option<String>,
589 address_type: Option<String>,
590 ) -> Result<GetNewAddressResponse, Self::Error>;
591
592 async fn get_node_addresses(
596 &self,
597 count: Option<i64>,
598 network: Option<String>,
599 ) -> Result<GetNodeAddressesResponse, Self::Error>;
600
601 async fn get_orphan_txs(
604 &self,
605 verbosity: Option<i64>,
606 ) -> Result<GetOrphanTxsResponse, Self::Error>;
607
608 async fn get_peer_info(&self) -> Result<GetPeerInfoResponse, Self::Error>;
610
611 async fn get_prioritised_transactions(
613 &self,
614 ) -> Result<GetPrioritisedTransactionsResponse, Self::Error>;
615
616 async fn get_raw_addrman(&self) -> Result<GetRawAddrmanResponse, Self::Error>;
619
620 async fn get_raw_change_address(
623 &self,
624 address_type: Option<String>,
625 ) -> Result<GetRawChangeAddressResponse, Self::Error>;
626
627 async fn get_raw_mempool(
630 &self,
631 verbose: Option<bool>,
632 mempool_sequence: Option<bool>,
633 ) -> Result<GetRawMempoolResponse, Self::Error>;
634
635 async fn get_raw_transaction(
644 &self,
645 txid: bitcoin::Txid,
646 verbosity: Option<i64>,
647 blockhash: Option<bitcoin::BlockHash>,
648 ) -> Result<GetRawTransactionResponse, Self::Error>;
649
650 async fn get_received_by_address(
652 &self,
653 address: bitcoin::Address,
654 minconf: Option<i64>,
655 include_immature_coinbase: Option<bool>,
656 ) -> Result<GetReceivedByAddressResponse, Self::Error>;
657
658 async fn get_received_by_label(
660 &self,
661 label: String,
662 minconf: Option<i64>,
663 include_immature_coinbase: Option<bool>,
664 ) -> Result<GetReceivedByLabelResponse, Self::Error>;
665
666 async fn get_rpc_info(&self) -> Result<GetRpcInfoResponse, Self::Error>;
668
669 async fn get_transaction(
671 &self,
672 txid: bitcoin::Txid,
673 include_watchonly: Option<bool>,
674 verbose: Option<bool>,
675 ) -> Result<GetTransactionResponse, Self::Error>;
676
677 async fn get_txout(
679 &self,
680 txid: bitcoin::Txid,
681 n: i64,
682 include_mempool: Option<bool>,
683 ) -> Result<GetTxoutResponse, Self::Error>;
684
685 async fn get_txout_proof(
691 &self,
692 txids: Vec<serde_json::Value>,
693 blockhash: Option<bitcoin::BlockHash>,
694 ) -> Result<GetTxoutProofResponse, Self::Error>;
695
696 async fn get_txout_set_info(
699 &self,
700 hash_type: Option<String>,
701 hash_or_height: Option<i64>,
702 use_index: Option<bool>,
703 ) -> Result<GetTxoutSetInfoResponse, Self::Error>;
704
705 async fn get_tx_spending_prevout(
707 &self,
708 outputs: Vec<serde_json::Value>,
709 ) -> Result<GetTxSpendingPrevoutResponse, Self::Error>;
710
711 async fn get_wallet_info(&self) -> Result<GetWalletInfoResponse, Self::Error>;
713
714 async fn help(&self, command: Option<String>) -> Result<HelpResponse, Self::Error>;
716
717 async fn import_descriptors(
723 &self,
724 requests: Vec<serde_json::Value>,
725 ) -> Result<ImportDescriptorsResponse, Self::Error>;
726
727 async fn import_mempool(
730 &self,
731 filepath: String,
732 options: Option<serde_json::Value>,
733 ) -> Result<ImportMempoolResponse, Self::Error>;
734
735 async fn import_pruned_funds(
737 &self,
738 rawtransaction: String,
739 txoutproof: String,
740 ) -> Result<ImportPrunedFundsResponse, Self::Error>;
741
742 async fn invalidate_block(
744 &self,
745 blockhash: bitcoin::BlockHash,
746 ) -> Result<InvalidateBlockResponse, Self::Error>;
747
748 async fn join_psbts(
751 &self,
752 txs: Vec<serde_json::Value>,
753 ) -> Result<JoinPsbtsResponse, Self::Error>;
754
755 async fn keypool_refill(
759 &self,
760 newsize: Option<i64>,
761 ) -> Result<KeypoolRefillResponse, Self::Error>;
762
763 async fn list_address_groupings(&self) -> Result<ListAddressGroupingsResponse, Self::Error>;
767
768 async fn list_banned(&self) -> Result<ListBannedResponse, Self::Error>;
770
771 async fn list_descriptors(
773 &self,
774 private: Option<bool>,
775 ) -> Result<ListDescriptorsResponse, Self::Error>;
776
777 async fn list_labels(&self, purpose: Option<String>)
779 -> Result<ListLabelsResponse, Self::Error>;
780
781 async fn list_lock_unspent(&self) -> Result<ListLockUnspentResponse, Self::Error>;
784
785 async fn list_received_by_address(
787 &self,
788 minconf: Option<i64>,
789 include_empty: Option<bool>,
790 include_watchonly: Option<bool>,
791 address_filter: Option<String>,
792 include_immature_coinbase: Option<bool>,
793 ) -> Result<ListReceivedByAddressResponse, Self::Error>;
794
795 async fn list_received_by_label(
797 &self,
798 minconf: Option<i64>,
799 include_empty: Option<bool>,
800 include_watchonly: Option<bool>,
801 include_immature_coinbase: Option<bool>,
802 ) -> Result<ListReceivedByLabelResponse, Self::Error>;
803
804 async fn list_since_block(
808 &self,
809 blockhash: Option<bitcoin::BlockHash>,
810 target_confirmations: Option<i64>,
811 include_watchonly: Option<bool>,
812 include_removed: Option<bool>,
813 include_change: Option<bool>,
814 label: Option<String>,
815 ) -> Result<ListSinceBlockResponse, Self::Error>;
816
817 async fn list_transactions(
824 &self,
825 label: Option<String>,
826 count: Option<i64>,
827 skip: Option<i64>,
828 include_watchonly: Option<bool>,
829 ) -> Result<ListTransactionsResponse, Self::Error>;
830
831 async fn list_unspent(
835 &self,
836 minconf: Option<i64>,
837 maxconf: Option<i64>,
838 addresses: Option<Vec<serde_json::Value>>,
839 include_unsafe: Option<bool>,
840 query_options: Option<serde_json::Value>,
841 ) -> Result<ListUnspentResponse, Self::Error>;
842
843 async fn list_wallet_dir(&self) -> Result<ListWalletDirResponse, Self::Error>;
845
846 async fn list_wallets(&self) -> Result<ListWalletsResponse, Self::Error>;
849
850 async fn load_txout_set(&self, path: String) -> Result<LoadTxoutSetResponse, Self::Error>;
855
856 async fn load_wallet(
860 &self,
861 filename: String,
862 load_on_startup: Option<bool>,
863 ) -> Result<LoadWalletResponse, Self::Error>;
864
865 async fn lock_unspent(
875 &self,
876 unlock: bool,
877 transactions: Option<Vec<serde_json::Value>>,
878 persistent: Option<bool>,
879 ) -> Result<LockUnspentResponse, Self::Error>;
880
881 async fn logging(
890 &self,
891 include: Option<Vec<serde_json::Value>>,
892 exclude: Option<Vec<serde_json::Value>>,
893 ) -> Result<LoggingResponse, Self::Error>;
894
895 async fn migrate_wallet(
903 &self,
904 wallet_name: Option<String>,
905 passphrase: Option<String>,
906 ) -> Result<MigrateWalletResponse, Self::Error>;
907
908 async fn mock_scheduler(&self, delta_time: i64) -> Result<MockSchedulerResponse, Self::Error>;
910
911 async fn ping(&self) -> Result<PingResponse, Self::Error>;
915
916 async fn precious_block(
920 &self,
921 blockhash: bitcoin::BlockHash,
922 ) -> Result<PreciousBlockResponse, Self::Error>;
923
924 async fn prioritise_transaction(
926 &self,
927 txid: bitcoin::Txid,
928 dummy: Option<i64>,
929 fee_delta: i64,
930 ) -> Result<PrioritiseTransactionResponse, Self::Error>;
931
932 async fn prune_blockchain(&self, height: i64) -> Result<PruneBlockchainResponse, Self::Error>;
935
936 async fn psbt_bump_fee(
950 &self,
951 txid: bitcoin::Txid,
952 options: Option<serde_json::Value>,
953 ) -> Result<PsbtBumpFeeResponse, Self::Error>;
954
955 async fn reconsider_block(
958 &self,
959 blockhash: bitcoin::BlockHash,
960 ) -> Result<ReconsiderBlockResponse, Self::Error>;
961
962 async fn remove_pruned_funds(
964 &self,
965 txid: bitcoin::Txid,
966 ) -> Result<RemovePrunedFundsResponse, Self::Error>;
967
968 async fn rescan_blockchain(
973 &self,
974 start_height: Option<i64>,
975 stop_height: Option<i64>,
976 ) -> Result<RescanBlockchainResponse, Self::Error>;
977
978 async fn restore_wallet(
982 &self,
983 wallet_name: String,
984 backup_file: String,
985 load_on_startup: Option<bool>,
986 ) -> Result<RestoreWalletResponse, Self::Error>;
987
988 async fn save_mempool(&self) -> Result<SaveMempoolResponse, Self::Error>;
990
991 async fn scan_blocks(
994 &self,
995 action: String,
996 scanobjects: Option<Vec<serde_json::Value>>,
997 start_height: Option<i64>,
998 stop_height: Option<i64>,
999 filtertype: Option<String>,
1000 options: Option<serde_json::Value>,
1001 ) -> Result<ScanBlocksResponse, Self::Error>;
1002
1003 async fn scan_txout_set(
1020 &self,
1021 action: String,
1022 scanobjects: Option<Vec<serde_json::Value>>,
1023 ) -> Result<ScanTxoutSetResponse, Self::Error>;
1024
1025 async fn schema(&self) -> Result<SchemaResponse, Self::Error>;
1027
1028 async fn send(
1031 &self,
1032 outputs: Vec<serde_json::Value>,
1033 conf_target: Option<i64>,
1034 estimate_mode: Option<String>,
1035 fee_rate: Option<serde_json::Value>,
1036 options: Option<serde_json::Value>,
1037 version: Option<i64>,
1038 ) -> Result<SendResponse, Self::Error>;
1039
1040 async fn send_all(
1045 &self,
1046 recipients: Vec<serde_json::Value>,
1047 conf_target: Option<i64>,
1048 estimate_mode: Option<String>,
1049 fee_rate: Option<serde_json::Value>,
1050 options: Option<serde_json::Value>,
1051 ) -> Result<SendAllResponse, Self::Error>;
1052
1053 async fn send_many(
1056 &self,
1057 dummy: Option<String>,
1058 amounts: serde_json::Value,
1059 minconf: Option<i64>,
1060 comment: Option<String>,
1061 subtractfeefrom: Option<Vec<serde_json::Value>>,
1062 replaceable: Option<bool>,
1063 conf_target: Option<i64>,
1064 estimate_mode: Option<String>,
1065 fee_rate: Option<serde_json::Value>,
1066 verbose: Option<bool>,
1067 ) -> Result<SendManyResponse, Self::Error>;
1068
1069 async fn send_msg_to_peer(
1073 &self,
1074 peer_id: i64,
1075 msg_type: String,
1076 msg: String,
1077 ) -> Result<SendMsgToPeerResponse, Self::Error>;
1078
1079 async fn send_raw_transaction(
1092 &self,
1093 hexstring: String,
1094 maxfeerate: Option<serde_json::Value>,
1095 maxburnamount: Option<serde_json::Value>,
1096 ) -> Result<SendRawTransactionResponse, Self::Error>;
1097
1098 async fn send_to_address(
1101 &self,
1102 address: bitcoin::Address,
1103 amount: serde_json::Value,
1104 comment: Option<String>,
1105 comment_to: Option<String>,
1106 subtractfeefromamount: Option<bool>,
1107 replaceable: Option<bool>,
1108 conf_target: Option<i64>,
1109 estimate_mode: Option<String>,
1110 avoid_reuse: Option<bool>,
1111 fee_rate: Option<serde_json::Value>,
1112 verbose: Option<bool>,
1113 ) -> Result<SendToAddressResponse, Self::Error>;
1114
1115 async fn set_ban(
1117 &self,
1118 subnet: String,
1119 command: String,
1120 bantime: Option<i64>,
1121 absolute: Option<bool>,
1122 ) -> Result<SetBanResponse, Self::Error>;
1123
1124 async fn set_label(
1126 &self,
1127 address: bitcoin::Address,
1128 label: String,
1129 ) -> Result<SetLabelResponse, Self::Error>;
1130
1131 async fn set_mock_time(&self, timestamp: i64) -> Result<SetMockTimeResponse, Self::Error>;
1133
1134 async fn set_network_active(
1136 &self,
1137 state: bool,
1138 ) -> Result<SetNetworkActiveResponse, Self::Error>;
1139
1140 async fn set_tx_fee(&self, amount: serde_json::Value) -> Result<SetTxFeeResponse, Self::Error>;
1143
1144 async fn set_wallet_flag(
1146 &self,
1147 flag: String,
1148 value: Option<bool>,
1149 ) -> Result<SetWalletFlagResponse, Self::Error>;
1150
1151 async fn sign_message(
1154 &self,
1155 address: bitcoin::Address,
1156 message: String,
1157 ) -> Result<SignMessageResponse, Self::Error>;
1158
1159 async fn sign_message_with_priv_key(
1161 &self,
1162 privkey: String,
1163 message: String,
1164 ) -> Result<SignMessageWithPrivKeyResponse, Self::Error>;
1165
1166 async fn sign_raw_transaction_with_key(
1172 &self,
1173 hexstring: String,
1174 privkeys: Vec<serde_json::Value>,
1175 prevtxs: Option<Vec<serde_json::Value>>,
1176 sighashtype: Option<String>,
1177 ) -> Result<SignRawTransactionWithKeyResponse, Self::Error>;
1178
1179 async fn sign_raw_transaction_with_wallet(
1184 &self,
1185 hexstring: String,
1186 prevtxs: Option<Vec<serde_json::Value>>,
1187 sighashtype: Option<String>,
1188 ) -> Result<SignRawTransactionWithWalletResponse, Self::Error>;
1189
1190 async fn simulate_raw_transaction(
1192 &self,
1193 rawtxs: Option<Vec<serde_json::Value>>,
1194 options: Option<serde_json::Value>,
1195 ) -> Result<SimulateRawTransactionResponse, Self::Error>;
1196
1197 async fn stop(&self, wait: Option<i64>) -> Result<StopResponse, Self::Error>;
1199
1200 async fn submit_block(
1203 &self,
1204 hexdata: String,
1205 dummy: Option<String>,
1206 ) -> Result<SubmitBlockResponse, Self::Error>;
1207
1208 async fn submit_header(&self, hexdata: String) -> Result<SubmitHeaderResponse, Self::Error>;
1211
1212 async fn submit_package(
1217 &self,
1218 package: Vec<serde_json::Value>,
1219 maxfeerate: Option<serde_json::Value>,
1220 maxburnamount: Option<serde_json::Value>,
1221 ) -> Result<SubmitPackageResponse, Self::Error>;
1222
1223 async fn sync_with_validation_interface_queue(
1225 &self,
1226 ) -> Result<SyncWithValidationInterfaceQueueResponse, Self::Error>;
1227
1228 async fn test_mempool_accept(
1235 &self,
1236 rawtxs: Vec<serde_json::Value>,
1237 maxfeerate: Option<serde_json::Value>,
1238 ) -> Result<TestMempoolAcceptResponse, Self::Error>;
1239
1240 async fn unload_wallet(
1243 &self,
1244 wallet_name: Option<String>,
1245 load_on_startup: Option<bool>,
1246 ) -> Result<UnloadWalletResponse, Self::Error>;
1247
1248 async fn uptime(&self) -> Result<UptimeResponse, Self::Error>;
1250
1251 async fn utxo_update_psbt(
1253 &self,
1254 psbt: String,
1255 descriptors: Option<Vec<serde_json::Value>>,
1256 ) -> Result<UtxoUpdatePsbtResponse, Self::Error>;
1257
1258 async fn validate_address(
1260 &self,
1261 address: bitcoin::Address,
1262 ) -> Result<ValidateAddressResponse, Self::Error>;
1263
1264 async fn verify_chain(
1266 &self,
1267 checklevel: Option<i64>,
1268 nblocks: Option<i64>,
1269 ) -> Result<VerifyChainResponse, Self::Error>;
1270
1271 async fn verify_message(
1273 &self,
1274 address: bitcoin::Address,
1275 signature: String,
1276 message: String,
1277 ) -> Result<VerifyMessageResponse, Self::Error>;
1278
1279 async fn verify_txout_proof(
1282 &self,
1283 proof: String,
1284 ) -> Result<VerifyTxoutProofResponse, Self::Error>;
1285
1286 async fn wait_for_block(
1290 &self,
1291 blockhash: bitcoin::BlockHash,
1292 timeout: Option<i64>,
1293 ) -> Result<WaitForBlockResponse, Self::Error>;
1294
1295 async fn wait_for_block_height(
1300 &self,
1301 height: i64,
1302 timeout: Option<i64>,
1303 ) -> Result<WaitForBlockHeightResponse, Self::Error>;
1304
1305 async fn wait_for_new_block(
1309 &self,
1310 timeout: Option<i64>,
1311 current_tip: Option<String>,
1312 ) -> Result<WaitForNewBlockResponse, Self::Error>;
1313
1314 async fn wallet_create_funded_psbt(
1319 &self,
1320 inputs: Option<Vec<serde_json::Value>>,
1321 outputs: Vec<serde_json::Value>,
1322 locktime: Option<i64>,
1323 options: Option<serde_json::Value>,
1324 bip32derivs: Option<bool>,
1325 version: Option<i64>,
1326 ) -> Result<WalletCreateFundedPsbtResponse, Self::Error>;
1327
1328 async fn wallet_display_address(
1330 &self,
1331 address: bitcoin::Address,
1332 ) -> Result<WalletDisplayAddressResponse, Self::Error>;
1333
1334 async fn wallet_lock(&self) -> Result<WalletLockResponse, Self::Error>;
1338
1339 async fn wallet_passphrase(
1345 &self,
1346 passphrase: String,
1347 timeout: i64,
1348 ) -> Result<WalletPassphraseResponse, Self::Error>;
1349
1350 async fn wallet_passphrase_change(
1352 &self,
1353 oldpassphrase: String,
1354 newpassphrase: String,
1355 ) -> Result<WalletPassphraseChangeResponse, Self::Error>;
1356
1357 async fn wallet_process_psbt(
1361 &self,
1362 psbt: String,
1363 sign: Option<bool>,
1364 sighashtype: Option<String>,
1365 bip32derivs: Option<bool>,
1366 finalize: Option<bool>,
1367 ) -> Result<WalletProcessPsbtResponse, Self::Error>;
1368}
1369
1370pub trait RpcDispatchExt: TransportTrait + TransportExt {
1372 fn dispatch_json<R: DeserializeOwned>(
1374 &self,
1375 method: &str,
1376 params: &[serde_json::Value],
1377 ) -> impl Future<Output = Result<R, TransportError>> + Send {
1378 async move { self.call(method, params).await }
1379 }
1380}
1381
1382impl<T: TransportTrait + TransportExt + ?Sized> RpcDispatchExt for T {}
1383
1384pub trait WalletTransportExt: TransportTrait + TransportExt {
1386 fn wallet_call<T: serde::Serialize + std::marker::Sync, R: serde::de::DeserializeOwned>(
1387 &self,
1388 method: &str,
1389 params: &[T],
1390 ) -> impl std::future::Future<Output = Result<R, crate::transport::TransportError>> + Send {
1391 async {
1392 let value_params: Vec<serde_json::Value> =
1394 params.iter().map(|p| serde_json::to_value(p).unwrap()).collect();
1395 self.call(method, &value_params).await
1396 }
1397 }
1398}
1399
1400impl<T: TransportTrait + TransportExt + ?Sized> WalletTransportExt for T {}
1401
1402#[async_trait]
1404impl<T: TransportTrait + TransportExt + Send + Sync> BitcoinClient for T {
1405 type Error = TransportError;
1406
1407 async fn abandon_transaction(
1413 &self,
1414 txid: bitcoin::Txid,
1415 ) -> Result<AbandonTransactionResponse, Self::Error> {
1416 let mut rpc_params = vec![];
1417 rpc_params.push(serde_json::json!(txid));
1418 self.call::<AbandonTransactionResponse>("abandontransaction", &rpc_params).await
1419 }
1420
1421 async fn abort_rescan(&self) -> Result<AbortRescanResponse, Self::Error> {
1424 self.call::<AbortRescanResponse>("abortrescan", &[]).await
1425 }
1426
1427 async fn add_connection(
1429 &self,
1430 address: bitcoin::Address,
1431 connection_type: String,
1432 v2transport: bool,
1433 ) -> Result<AddConnectionResponse, Self::Error> {
1434 let mut rpc_params = vec![];
1435 rpc_params.push(serde_json::json!(address));
1436 rpc_params.push(serde_json::json!(connection_type));
1437 rpc_params.push(serde_json::json!(v2transport));
1438 self.call::<AddConnectionResponse>("addconnection", &rpc_params).await
1439 }
1440
1441 async fn add_node(
1447 &self,
1448 node: String,
1449 command: String,
1450 v2transport: Option<bool>,
1451 ) -> Result<AddNodeResponse, Self::Error> {
1452 let mut rpc_params = vec![];
1453 rpc_params.push(serde_json::json!(node));
1454 rpc_params.push(serde_json::json!(command));
1455 if let Some(val) = v2transport {
1456 rpc_params.push(serde_json::json!(val));
1457 }
1458 self.call::<AddNodeResponse>("addnode", &rpc_params).await
1459 }
1460
1461 async fn add_peer_address(
1463 &self,
1464 address: bitcoin::Address,
1465 port: i64,
1466 tried: Option<bool>,
1467 ) -> Result<AddPeerAddressResponse, Self::Error> {
1468 let mut rpc_params = vec![];
1469 rpc_params.push(serde_json::json!(address));
1470 rpc_params.push(serde_json::json!(port));
1471 if let Some(val) = tried {
1472 rpc_params.push(serde_json::json!(val));
1473 }
1474 self.call::<AddPeerAddressResponse>("addpeeraddress", &rpc_params).await
1475 }
1476
1477 async fn analyze_psbt(&self, psbt: String) -> Result<AnalyzePsbtResponse, Self::Error> {
1479 let mut rpc_params = vec![];
1480 rpc_params.push(serde_json::json!(psbt));
1481 self.call::<AnalyzePsbtResponse>("analyzepsbt", &rpc_params).await
1482 }
1483
1484 async fn backup_wallet(
1486 &self,
1487 destination: String,
1488 ) -> Result<BackupWalletResponse, Self::Error> {
1489 let mut rpc_params = vec![];
1490 rpc_params.push(serde_json::json!(destination));
1491 self.call::<BackupWalletResponse>("backupwallet", &rpc_params).await
1492 }
1493
1494 async fn bump_fee(
1507 &self,
1508 txid: bitcoin::Txid,
1509 options: Option<serde_json::Value>,
1510 ) -> Result<BumpFeeResponse, Self::Error> {
1511 let mut rpc_params = vec![];
1512 rpc_params.push(serde_json::json!(txid));
1513 if let Some(val) = options {
1514 rpc_params.push(serde_json::json!(val));
1515 }
1516 self.call::<BumpFeeResponse>("bumpfee", &rpc_params).await
1517 }
1518
1519 async fn clear_banned(&self) -> Result<ClearBannedResponse, Self::Error> {
1521 self.call::<ClearBannedResponse>("clearbanned", &[]).await
1522 }
1523
1524 async fn combine_psbt(
1527 &self,
1528 txs: Vec<serde_json::Value>,
1529 ) -> Result<CombinePsbtResponse, Self::Error> {
1530 let mut rpc_params = vec![];
1531 rpc_params.push(serde_json::json!(txs));
1532 self.call::<CombinePsbtResponse>("combinepsbt", &rpc_params).await
1533 }
1534
1535 async fn combine_raw_transaction(
1539 &self,
1540 txs: Vec<serde_json::Value>,
1541 ) -> Result<CombineRawTransactionResponse, Self::Error> {
1542 let mut rpc_params = vec![];
1543 rpc_params.push(serde_json::json!(txs));
1544 self.call::<CombineRawTransactionResponse>("combinerawtransaction", &rpc_params).await
1545 }
1546
1547 async fn convert_to_psbt(
1550 &self,
1551 hexstring: String,
1552 permitsigdata: Option<bool>,
1553 iswitness: Option<bool>,
1554 ) -> Result<ConvertToPsbtResponse, Self::Error> {
1555 let mut rpc_params = vec![];
1556 rpc_params.push(serde_json::json!(hexstring));
1557 if let Some(val) = permitsigdata {
1558 rpc_params.push(serde_json::json!(val));
1559 }
1560 if let Some(val) = iswitness {
1561 rpc_params.push(serde_json::json!(val));
1562 }
1563 self.call::<ConvertToPsbtResponse>("converttopsbt", &rpc_params).await
1564 }
1565
1566 async fn create_multisig(
1569 &self,
1570 nrequired: i64,
1571 keys: Vec<serde_json::Value>,
1572 address_type: Option<String>,
1573 ) -> Result<CreateMultisigResponse, Self::Error> {
1574 let mut rpc_params = vec![];
1575 rpc_params.push(serde_json::json!(nrequired));
1576 rpc_params.push(serde_json::json!(keys));
1577 if let Some(val) = address_type {
1578 rpc_params.push(serde_json::json!(val));
1579 }
1580 self.call::<CreateMultisigResponse>("createmultisig", &rpc_params).await
1581 }
1582
1583 async fn create_psbt(
1588 &self,
1589 inputs: Vec<serde_json::Value>,
1590 outputs: Vec<serde_json::Value>,
1591 locktime: Option<i64>,
1592 replaceable: Option<bool>,
1593 version: Option<i64>,
1594 ) -> Result<CreatePsbtResponse, Self::Error> {
1595 let mut rpc_params = vec![];
1596 rpc_params.push(serde_json::json!(inputs));
1597 rpc_params.push(serde_json::json!(outputs));
1598 if let Some(val) = locktime {
1599 rpc_params.push(serde_json::json!(val));
1600 }
1601 if let Some(val) = replaceable {
1602 rpc_params.push(serde_json::json!(val));
1603 }
1604 if let Some(val) = version {
1605 rpc_params.push(serde_json::json!(val));
1606 }
1607 self.call::<CreatePsbtResponse>("createpsbt", &rpc_params).await
1608 }
1609
1610 async fn create_raw_transaction(
1616 &self,
1617 inputs: Vec<serde_json::Value>,
1618 outputs: Vec<serde_json::Value>,
1619 locktime: Option<i64>,
1620 replaceable: Option<bool>,
1621 version: Option<i64>,
1622 ) -> Result<CreateRawTransactionResponse, Self::Error> {
1623 let mut rpc_params = vec![];
1624 rpc_params.push(serde_json::json!(inputs));
1625 rpc_params.push(serde_json::json!(outputs));
1626 if let Some(val) = locktime {
1627 rpc_params.push(serde_json::json!(val));
1628 }
1629 if let Some(val) = replaceable {
1630 rpc_params.push(serde_json::json!(val));
1631 }
1632 if let Some(val) = version {
1633 rpc_params.push(serde_json::json!(val));
1634 }
1635 self.call::<CreateRawTransactionResponse>("createrawtransaction", &rpc_params).await
1636 }
1637
1638 async fn create_wallet(
1640 &self,
1641 wallet_name: String,
1642 disable_private_keys: Option<bool>,
1643 blank: Option<bool>,
1644 passphrase: Option<String>,
1645 avoid_reuse: Option<bool>,
1646 descriptors: Option<bool>,
1647 load_on_startup: Option<bool>,
1648 external_signer: Option<bool>,
1649 ) -> Result<CreateWalletResponse, Self::Error> {
1650 let mut rpc_params = vec![];
1651 rpc_params.push(serde_json::json!(wallet_name));
1652 if let Some(val) = disable_private_keys {
1653 rpc_params.push(serde_json::json!(val));
1654 }
1655 if let Some(val) = blank {
1656 rpc_params.push(serde_json::json!(val));
1657 }
1658 if let Some(val) = passphrase {
1659 rpc_params.push(serde_json::json!(val));
1660 }
1661 if let Some(val) = avoid_reuse {
1662 rpc_params.push(serde_json::json!(val));
1663 }
1664 if let Some(val) = descriptors {
1665 rpc_params.push(serde_json::json!(val));
1666 }
1667 if let Some(val) = load_on_startup {
1668 rpc_params.push(serde_json::json!(val));
1669 }
1670 if let Some(val) = external_signer {
1671 rpc_params.push(serde_json::json!(val));
1672 }
1673 self.call::<CreateWalletResponse>("createwallet", &rpc_params).await
1674 }
1675
1676 async fn create_wallet_descriptor(
1679 &self,
1680 r#type: String,
1681 options: Option<serde_json::Value>,
1682 ) -> Result<CreateWalletDescriptorResponse, Self::Error> {
1683 let mut rpc_params = vec![];
1684 rpc_params.push(serde_json::json!(r#type));
1685 if let Some(val) = options {
1686 rpc_params.push(serde_json::json!(val));
1687 }
1688 self.call::<CreateWalletDescriptorResponse>("createwalletdescriptor", &rpc_params).await
1689 }
1690
1691 async fn decode_psbt(&self, psbt: String) -> Result<DecodePsbtResponse, Self::Error> {
1693 let mut rpc_params = vec![];
1694 rpc_params.push(serde_json::json!(psbt));
1695 self.call::<DecodePsbtResponse>("decodepsbt", &rpc_params).await
1696 }
1697
1698 async fn decode_raw_transaction(
1700 &self,
1701 hexstring: String,
1702 iswitness: Option<bool>,
1703 ) -> Result<DecodeRawTransactionResponse, Self::Error> {
1704 let mut rpc_params = vec![];
1705 rpc_params.push(serde_json::json!(hexstring));
1706 if let Some(val) = iswitness {
1707 rpc_params.push(serde_json::json!(val));
1708 }
1709 self.call::<DecodeRawTransactionResponse>("decoderawtransaction", &rpc_params).await
1710 }
1711
1712 async fn decode_script(&self, hexstring: String) -> Result<DecodeScriptResponse, Self::Error> {
1714 let mut rpc_params = vec![];
1715 rpc_params.push(serde_json::json!(hexstring));
1716 self.call::<DecodeScriptResponse>("decodescript", &rpc_params).await
1717 }
1718
1719 async fn derive_addresses(
1730 &self,
1731 descriptor: String,
1732 range: Option<serde_json::Value>,
1733 ) -> Result<DeriveAddressesResponse, Self::Error> {
1734 let mut rpc_params = vec![];
1735 rpc_params.push(serde_json::json!(descriptor));
1736 if let Some(val) = range {
1737 rpc_params.push(serde_json::json!(val));
1738 }
1739 self.call::<DeriveAddressesResponse>("deriveaddresses", &rpc_params).await
1740 }
1741
1742 async fn descriptor_process_psbt(
1745 &self,
1746 psbt: String,
1747 descriptors: Vec<serde_json::Value>,
1748 sighashtype: Option<String>,
1749 bip32derivs: Option<bool>,
1750 finalize: Option<bool>,
1751 ) -> Result<DescriptorProcessPsbtResponse, Self::Error> {
1752 let mut rpc_params = vec![];
1753 rpc_params.push(serde_json::json!(psbt));
1754 rpc_params.push(serde_json::json!(descriptors));
1755 if let Some(val) = sighashtype {
1756 rpc_params.push(serde_json::json!(val));
1757 }
1758 if let Some(val) = bip32derivs {
1759 rpc_params.push(serde_json::json!(val));
1760 }
1761 if let Some(val) = finalize {
1762 rpc_params.push(serde_json::json!(val));
1763 }
1764 self.call::<DescriptorProcessPsbtResponse>("descriptorprocesspsbt", &rpc_params).await
1765 }
1766
1767 async fn disconnect_node(
1771 &self,
1772 address: Option<bitcoin::Address>,
1773 nodeid: Option<i64>,
1774 ) -> Result<DisconnectNodeResponse, Self::Error> {
1775 let mut rpc_params = vec![];
1776 if let Some(val) = address {
1777 rpc_params.push(serde_json::json!(val));
1778 }
1779 if let Some(val) = nodeid {
1780 rpc_params.push(serde_json::json!(val));
1781 }
1782 self.call::<DisconnectNodeResponse>("disconnectnode", &rpc_params).await
1783 }
1784
1785 async fn dump_txout_set(
1789 &self,
1790 path: String,
1791 r#type: Option<String>,
1792 options: Option<serde_json::Value>,
1793 ) -> Result<DumpTxoutSetResponse, Self::Error> {
1794 let mut rpc_params = vec![];
1795 rpc_params.push(serde_json::json!(path));
1796 if let Some(val) = r#type {
1797 rpc_params.push(serde_json::json!(val));
1798 }
1799 if let Some(val) = options {
1800 rpc_params.push(serde_json::json!(val));
1801 }
1802 self.call::<DumpTxoutSetResponse>("dumptxoutset", &rpc_params).await
1803 }
1804
1805 async fn echo(
1809 &self,
1810 arg0: Option<String>,
1811 arg1: Option<String>,
1812 arg2: Option<String>,
1813 arg3: Option<String>,
1814 arg4: Option<String>,
1815 arg5: Option<String>,
1816 arg6: Option<String>,
1817 arg7: Option<String>,
1818 arg8: Option<String>,
1819 arg9: Option<String>,
1820 ) -> Result<EchoResponse, Self::Error> {
1821 let mut rpc_params = vec![];
1822 if let Some(val) = arg0 {
1823 rpc_params.push(serde_json::json!(val));
1824 }
1825 if let Some(val) = arg1 {
1826 rpc_params.push(serde_json::json!(val));
1827 }
1828 if let Some(val) = arg2 {
1829 rpc_params.push(serde_json::json!(val));
1830 }
1831 if let Some(val) = arg3 {
1832 rpc_params.push(serde_json::json!(val));
1833 }
1834 if let Some(val) = arg4 {
1835 rpc_params.push(serde_json::json!(val));
1836 }
1837 if let Some(val) = arg5 {
1838 rpc_params.push(serde_json::json!(val));
1839 }
1840 if let Some(val) = arg6 {
1841 rpc_params.push(serde_json::json!(val));
1842 }
1843 if let Some(val) = arg7 {
1844 rpc_params.push(serde_json::json!(val));
1845 }
1846 if let Some(val) = arg8 {
1847 rpc_params.push(serde_json::json!(val));
1848 }
1849 if let Some(val) = arg9 {
1850 rpc_params.push(serde_json::json!(val));
1851 }
1852 self.call::<EchoResponse>("echo", &rpc_params).await
1853 }
1854
1855 async fn echoipc(&self, arg: String) -> Result<EchoipcResponse, Self::Error> {
1858 let mut rpc_params = vec![];
1859 rpc_params.push(serde_json::json!(arg));
1860 self.call::<EchoipcResponse>("echoipc", &rpc_params).await
1861 }
1862
1863 async fn echojson(
1867 &self,
1868 arg0: Option<String>,
1869 arg1: Option<String>,
1870 arg2: Option<String>,
1871 arg3: Option<String>,
1872 arg4: Option<String>,
1873 arg5: Option<String>,
1874 arg6: Option<String>,
1875 arg7: Option<String>,
1876 arg8: Option<String>,
1877 arg9: Option<String>,
1878 ) -> Result<EchojsonResponse, Self::Error> {
1879 let mut rpc_params = vec![];
1880 if let Some(val) = arg0 {
1881 rpc_params.push(serde_json::json!(val));
1882 }
1883 if let Some(val) = arg1 {
1884 rpc_params.push(serde_json::json!(val));
1885 }
1886 if let Some(val) = arg2 {
1887 rpc_params.push(serde_json::json!(val));
1888 }
1889 if let Some(val) = arg3 {
1890 rpc_params.push(serde_json::json!(val));
1891 }
1892 if let Some(val) = arg4 {
1893 rpc_params.push(serde_json::json!(val));
1894 }
1895 if let Some(val) = arg5 {
1896 rpc_params.push(serde_json::json!(val));
1897 }
1898 if let Some(val) = arg6 {
1899 rpc_params.push(serde_json::json!(val));
1900 }
1901 if let Some(val) = arg7 {
1902 rpc_params.push(serde_json::json!(val));
1903 }
1904 if let Some(val) = arg8 {
1905 rpc_params.push(serde_json::json!(val));
1906 }
1907 if let Some(val) = arg9 {
1908 rpc_params.push(serde_json::json!(val));
1909 }
1910 self.call::<EchojsonResponse>("echojson", &rpc_params).await
1911 }
1912
1913 async fn encrypt_wallet(
1923 &self,
1924 passphrase: String,
1925 ) -> Result<EncryptWalletResponse, Self::Error> {
1926 let mut rpc_params = vec![];
1927 rpc_params.push(serde_json::json!(passphrase));
1928 self.call::<EncryptWalletResponse>("encryptwallet", &rpc_params).await
1929 }
1930
1931 async fn enumerate_signers(&self) -> Result<EnumerateSignersResponse, Self::Error> {
1933 self.call::<EnumerateSignersResponse>("enumeratesigners", &[]).await
1934 }
1935
1936 async fn estimate_raw_fee(
1944 &self,
1945 conf_target: i64,
1946 threshold: Option<i64>,
1947 ) -> Result<EstimateRawFeeResponse, Self::Error> {
1948 let mut rpc_params = vec![];
1949 rpc_params.push(serde_json::json!(conf_target));
1950 if let Some(val) = threshold {
1951 rpc_params.push(serde_json::json!(val));
1952 }
1953 self.call::<EstimateRawFeeResponse>("estimaterawfee", &rpc_params).await
1954 }
1955
1956 async fn estimate_smart_fee(
1961 &self,
1962 conf_target: i64,
1963 estimate_mode: Option<String>,
1964 ) -> Result<EstimateSmartFeeResponse, Self::Error> {
1965 let mut rpc_params = vec![];
1966 rpc_params.push(serde_json::json!(conf_target));
1967 if let Some(val) = estimate_mode {
1968 rpc_params.push(serde_json::json!(val));
1969 }
1970 self.call::<EstimateSmartFeeResponse>("estimatesmartfee", &rpc_params).await
1971 }
1972
1973 async fn finalize_psbt(
1978 &self,
1979 psbt: String,
1980 extract: Option<bool>,
1981 ) -> Result<FinalizePsbtResponse, Self::Error> {
1982 let mut rpc_params = vec![];
1983 rpc_params.push(serde_json::json!(psbt));
1984 if let Some(val) = extract {
1985 rpc_params.push(serde_json::json!(val));
1986 }
1987 self.call::<FinalizePsbtResponse>("finalizepsbt", &rpc_params).await
1988 }
1989
1990 async fn fund_raw_transaction(
2005 &self,
2006 hexstring: String,
2007 options: Option<serde_json::Value>,
2008 iswitness: Option<bool>,
2009 ) -> Result<FundRawTransactionResponse, Self::Error> {
2010 let mut rpc_params = vec![];
2011 rpc_params.push(serde_json::json!(hexstring));
2012 if let Some(val) = options {
2013 rpc_params.push(serde_json::json!(val));
2014 }
2015 if let Some(val) = iswitness {
2016 rpc_params.push(serde_json::json!(val));
2017 }
2018 self.call::<FundRawTransactionResponse>("fundrawtransaction", &rpc_params).await
2019 }
2020
2021 async fn generate(&self) -> Result<(), Self::Error> { self.call::<()>("generate", &[]).await }
2023
2024 async fn generate_block(
2026 &self,
2027 output: String,
2028 transactions: Vec<serde_json::Value>,
2029 submit: Option<bool>,
2030 ) -> Result<GenerateBlockResponse, Self::Error> {
2031 let mut rpc_params = vec![];
2032 rpc_params.push(serde_json::json!(output));
2033 rpc_params.push(serde_json::json!(transactions));
2034 if let Some(val) = submit {
2035 rpc_params.push(serde_json::json!(val));
2036 }
2037 self.call::<GenerateBlockResponse>("generateblock", &rpc_params).await
2038 }
2039
2040 async fn generate_to_address(
2042 &self,
2043 nblocks: i64,
2044 address: bitcoin::Address,
2045 maxtries: Option<i64>,
2046 ) -> Result<GenerateToAddressResponse, Self::Error> {
2047 let mut rpc_params = vec![];
2048 rpc_params.push(serde_json::json!(nblocks));
2049 rpc_params.push(serde_json::json!(address));
2050 if let Some(val) = maxtries {
2051 rpc_params.push(serde_json::json!(val));
2052 }
2053 self.call::<GenerateToAddressResponse>("generatetoaddress", &rpc_params).await
2054 }
2055
2056 async fn generate_to_descriptor(
2058 &self,
2059 num_blocks: i64,
2060 descriptor: String,
2061 maxtries: Option<i64>,
2062 ) -> Result<GenerateToDescriptorResponse, Self::Error> {
2063 let mut rpc_params = vec![];
2064 rpc_params.push(serde_json::json!(num_blocks));
2065 rpc_params.push(serde_json::json!(descriptor));
2066 if let Some(val) = maxtries {
2067 rpc_params.push(serde_json::json!(val));
2068 }
2069 self.call::<GenerateToDescriptorResponse>("generatetodescriptor", &rpc_params).await
2070 }
2071
2072 async fn get_added_node_info(
2075 &self,
2076 node: Option<String>,
2077 ) -> Result<GetAddedNodeInfoResponse, Self::Error> {
2078 let mut rpc_params = vec![];
2079 if let Some(val) = node {
2080 rpc_params.push(serde_json::json!(val));
2081 }
2082 self.call::<GetAddedNodeInfoResponse>("getaddednodeinfo", &rpc_params).await
2083 }
2084
2085 async fn get_addresses_by_label(
2087 &self,
2088 label: String,
2089 ) -> Result<GetAddressesByLabelResponse, Self::Error> {
2090 let mut rpc_params = vec![];
2091 rpc_params.push(serde_json::json!(label));
2092 self.call::<GetAddressesByLabelResponse>("getaddressesbylabel", &rpc_params).await
2093 }
2094
2095 async fn get_address_info(
2098 &self,
2099 address: bitcoin::Address,
2100 ) -> Result<GetAddressInfoResponse, Self::Error> {
2101 let mut rpc_params = vec![];
2102 rpc_params.push(serde_json::json!(address));
2103 self.call::<GetAddressInfoResponse>("getaddressinfo", &rpc_params).await
2104 }
2105
2106 async fn get_addrman_info(&self) -> Result<GetAddrmanInfoResponse, Self::Error> {
2108 self.call::<GetAddrmanInfoResponse>("getaddrmaninfo", &[]).await
2109 }
2110
2111 async fn get_balance(
2115 &self,
2116 dummy: Option<String>,
2117 minconf: Option<i64>,
2118 include_watchonly: Option<bool>,
2119 avoid_reuse: Option<bool>,
2120 ) -> Result<GetBalanceResponse, Self::Error> {
2121 let mut rpc_params = vec![];
2122 if let Some(val) = dummy {
2123 rpc_params.push(serde_json::json!(val));
2124 }
2125 if let Some(val) = minconf {
2126 rpc_params.push(serde_json::json!(val));
2127 }
2128 if let Some(val) = include_watchonly {
2129 rpc_params.push(serde_json::json!(val));
2130 }
2131 if let Some(val) = avoid_reuse {
2132 rpc_params.push(serde_json::json!(val));
2133 }
2134 self.call::<GetBalanceResponse>("getbalance", &rpc_params).await
2135 }
2136
2137 async fn get_balances(&self) -> Result<GetBalancesResponse, Self::Error> {
2139 self.call::<GetBalancesResponse>("getbalances", &[]).await
2140 }
2141
2142 async fn get_best_block_hash(&self) -> Result<GetBestBlockHashResponse, Self::Error> {
2144 self.call::<GetBestBlockHashResponse>("getbestblockhash", &[]).await
2145 }
2146
2147 async fn get_block(
2152 &self,
2153 blockhash: bitcoin::BlockHash,
2154 verbosity: Option<i64>,
2155 ) -> Result<GetBlockResponse, Self::Error> {
2156 let mut rpc_params = vec![];
2157 rpc_params.push(serde_json::json!(blockhash));
2158 if let Some(val) = verbosity {
2159 rpc_params.push(serde_json::json!(val));
2160 }
2161 self.call::<GetBlockResponse>("getblock", &rpc_params).await
2162 }
2163
2164 async fn get_blockchain_info(&self) -> Result<GetBlockchainInfoResponse, Self::Error> {
2166 self.call::<GetBlockchainInfoResponse>("getblockchaininfo", &[]).await
2167 }
2168
2169 async fn get_block_count(&self) -> Result<GetBlockCountResponse, Self::Error> {
2172 self.call::<GetBlockCountResponse>("getblockcount", &[]).await
2173 }
2174
2175 async fn get_block_filter(
2177 &self,
2178 blockhash: bitcoin::BlockHash,
2179 filtertype: Option<String>,
2180 ) -> Result<GetBlockFilterResponse, Self::Error> {
2181 let mut rpc_params = vec![];
2182 rpc_params.push(serde_json::json!(blockhash));
2183 if let Some(val) = filtertype {
2184 rpc_params.push(serde_json::json!(val));
2185 }
2186 self.call::<GetBlockFilterResponse>("getblockfilter", &rpc_params).await
2187 }
2188
2189 async fn get_block_from_peer(
2198 &self,
2199 blockhash: bitcoin::BlockHash,
2200 peer_id: i64,
2201 ) -> Result<GetBlockFromPeerResponse, Self::Error> {
2202 let mut rpc_params = vec![];
2203 rpc_params.push(serde_json::json!(blockhash));
2204 rpc_params.push(serde_json::json!(peer_id));
2205 self.call::<GetBlockFromPeerResponse>("getblockfrompeer", &rpc_params).await
2206 }
2207
2208 async fn get_block_hash(&self, height: i64) -> Result<GetBlockHashResponse, Self::Error> {
2210 let mut rpc_params = vec![];
2211 rpc_params.push(serde_json::json!(height));
2212 self.call::<GetBlockHashResponse>("getblockhash", &rpc_params).await
2213 }
2214
2215 async fn get_block_header(
2218 &self,
2219 blockhash: bitcoin::BlockHash,
2220 verbose: Option<bool>,
2221 ) -> Result<GetBlockHeaderResponse, Self::Error> {
2222 let mut rpc_params = vec![];
2223 rpc_params.push(serde_json::json!(blockhash));
2224 if let Some(val) = verbose {
2225 rpc_params.push(serde_json::json!(val));
2226 }
2227 self.call::<GetBlockHeaderResponse>("getblockheader", &rpc_params).await
2228 }
2229
2230 async fn get_block_stats(
2233 &self,
2234 hash_or_height: i64,
2235 stats: Option<Vec<serde_json::Value>>,
2236 ) -> Result<GetBlockStatsResponse, Self::Error> {
2237 let mut rpc_params = vec![];
2238 rpc_params.push(serde_json::json!(hash_or_height));
2239 if let Some(val) = stats {
2240 rpc_params.push(serde_json::json!(val));
2241 }
2242 self.call::<GetBlockStatsResponse>("getblockstats", &rpc_params).await
2243 }
2244
2245 async fn get_block_template(
2253 &self,
2254 template_request: serde_json::Value,
2255 ) -> Result<GetBlockTemplateResponse, Self::Error> {
2256 let mut rpc_params = vec![];
2257 rpc_params.push(serde_json::json!(template_request));
2258 self.call::<GetBlockTemplateResponse>("getblocktemplate", &rpc_params).await
2259 }
2260
2261 async fn get_chain_states(&self) -> Result<GetChainStatesResponse, Self::Error> {
2263 self.call::<GetChainStatesResponse>("getchainstates", &[]).await
2264 }
2265
2266 async fn get_chain_tips(&self) -> Result<GetChainTipsResponse, Self::Error> {
2268 self.call::<GetChainTipsResponse>("getchaintips", &[]).await
2269 }
2270
2271 async fn get_chain_tx_stats(
2273 &self,
2274 nblocks: Option<i64>,
2275 blockhash: Option<bitcoin::BlockHash>,
2276 ) -> Result<GetChainTxStatsResponse, Self::Error> {
2277 let mut rpc_params = vec![];
2278 if let Some(val) = nblocks {
2279 rpc_params.push(serde_json::json!(val));
2280 }
2281 if let Some(val) = blockhash {
2282 rpc_params.push(serde_json::json!(val));
2283 }
2284 self.call::<GetChainTxStatsResponse>("getchaintxstats", &rpc_params).await
2285 }
2286
2287 async fn get_connection_count(&self) -> Result<GetConnectionCountResponse, Self::Error> {
2289 self.call::<GetConnectionCountResponse>("getconnectioncount", &[]).await
2290 }
2291
2292 async fn get_deployment_info(
2294 &self,
2295 blockhash: Option<bitcoin::BlockHash>,
2296 ) -> Result<GetDeploymentInfoResponse, Self::Error> {
2297 let mut rpc_params = vec![];
2298 if let Some(val) = blockhash {
2299 rpc_params.push(serde_json::json!(val));
2300 }
2301 self.call::<GetDeploymentInfoResponse>("getdeploymentinfo", &rpc_params).await
2302 }
2303
2304 async fn get_descriptor_activity(
2307 &self,
2308 blockhashes: Vec<serde_json::Value>,
2309 scanobjects: Vec<serde_json::Value>,
2310 include_mempool: Option<bool>,
2311 ) -> Result<GetDescriptorActivityResponse, Self::Error> {
2312 let mut rpc_params = vec![];
2313 rpc_params.push(serde_json::json!(blockhashes));
2314 rpc_params.push(serde_json::json!(scanobjects));
2315 if let Some(val) = include_mempool {
2316 rpc_params.push(serde_json::json!(val));
2317 }
2318 self.call::<GetDescriptorActivityResponse>("getdescriptoractivity", &rpc_params).await
2319 }
2320
2321 async fn get_descriptor_info(
2323 &self,
2324 descriptor: String,
2325 ) -> Result<GetDescriptorInfoResponse, Self::Error> {
2326 let mut rpc_params = vec![];
2327 rpc_params.push(serde_json::json!(descriptor));
2328 self.call::<GetDescriptorInfoResponse>("getdescriptorinfo", &rpc_params).await
2329 }
2330
2331 async fn get_difficulty(&self) -> Result<GetDifficultyResponse, Self::Error> {
2333 self.call::<GetDifficultyResponse>("getdifficulty", &[]).await
2334 }
2335
2336 async fn get_hd_keys(
2338 &self,
2339 options: Option<serde_json::Value>,
2340 ) -> Result<GetHdKeysResponse, Self::Error> {
2341 let mut rpc_params = vec![];
2342 if let Some(val) = options {
2343 rpc_params.push(serde_json::json!(val));
2344 }
2345 self.call::<GetHdKeysResponse>("gethdkeys", &rpc_params).await
2346 }
2347
2348 async fn get_index_info(
2350 &self,
2351 index_name: Option<String>,
2352 ) -> Result<GetIndexInfoResponse, Self::Error> {
2353 let mut rpc_params = vec![];
2354 if let Some(val) = index_name {
2355 rpc_params.push(serde_json::json!(val));
2356 }
2357 self.call::<GetIndexInfoResponse>("getindexinfo", &rpc_params).await
2358 }
2359
2360 async fn get_memory_info(
2362 &self,
2363 mode: Option<String>,
2364 ) -> Result<GetMemoryInfoResponse, Self::Error> {
2365 let mut rpc_params = vec![];
2366 if let Some(val) = mode {
2367 rpc_params.push(serde_json::json!(val));
2368 }
2369 self.call::<GetMemoryInfoResponse>("getmemoryinfo", &rpc_params).await
2370 }
2371
2372 async fn get_mempool_ancestors(
2374 &self,
2375 txid: bitcoin::Txid,
2376 verbose: Option<bool>,
2377 ) -> Result<GetMempoolAncestorsResponse, Self::Error> {
2378 let mut rpc_params = vec![];
2379 rpc_params.push(serde_json::json!(txid));
2380 if let Some(val) = verbose {
2381 rpc_params.push(serde_json::json!(val));
2382 }
2383 self.call::<GetMempoolAncestorsResponse>("getmempoolancestors", &rpc_params).await
2384 }
2385
2386 async fn get_mempool_cluster(
2388 &self,
2389 txid: bitcoin::Txid,
2390 ) -> Result<GetMempoolClusterResponse, Self::Error> {
2391 let mut rpc_params = vec![];
2392 rpc_params.push(serde_json::json!(txid));
2393 self.call::<GetMempoolClusterResponse>("getmempoolcluster", &rpc_params).await
2394 }
2395
2396 async fn get_mempool_descendants(
2398 &self,
2399 txid: bitcoin::Txid,
2400 verbose: Option<bool>,
2401 ) -> Result<GetMempoolDescendantsResponse, Self::Error> {
2402 let mut rpc_params = vec![];
2403 rpc_params.push(serde_json::json!(txid));
2404 if let Some(val) = verbose {
2405 rpc_params.push(serde_json::json!(val));
2406 }
2407 self.call::<GetMempoolDescendantsResponse>("getmempooldescendants", &rpc_params).await
2408 }
2409
2410 async fn get_mempool_entry(
2412 &self,
2413 txid: bitcoin::Txid,
2414 ) -> Result<GetMempoolEntryResponse, Self::Error> {
2415 let mut rpc_params = vec![];
2416 rpc_params.push(serde_json::json!(txid));
2417 self.call::<GetMempoolEntryResponse>("getmempoolentry", &rpc_params).await
2418 }
2419
2420 async fn get_mempool_fee_rate_diagram(
2422 &self,
2423 ) -> Result<GetMempoolFeeRateDiagramResponse, Self::Error> {
2424 self.call::<GetMempoolFeeRateDiagramResponse>("getmempoolfeeratediagram", &[]).await
2425 }
2426
2427 async fn get_mempool_info(&self) -> Result<GetMempoolInfoResponse, Self::Error> {
2429 self.call::<GetMempoolInfoResponse>("getmempoolinfo", &[]).await
2430 }
2431
2432 async fn get_mining_info(&self) -> Result<GetMiningInfoResponse, Self::Error> {
2434 self.call::<GetMiningInfoResponse>("getmininginfo", &[]).await
2435 }
2436
2437 async fn get_net_totals(&self) -> Result<GetNetTotalsResponse, Self::Error> {
2440 self.call::<GetNetTotalsResponse>("getnettotals", &[]).await
2441 }
2442
2443 async fn get_network_hashps(
2447 &self,
2448 nblocks: Option<i64>,
2449 height: Option<i64>,
2450 ) -> Result<GetNetworkHashpsResponse, Self::Error> {
2451 let mut rpc_params = vec![];
2452 if let Some(val) = nblocks {
2453 rpc_params.push(serde_json::json!(val));
2454 }
2455 if let Some(val) = height {
2456 rpc_params.push(serde_json::json!(val));
2457 }
2458 self.call::<GetNetworkHashpsResponse>("getnetworkhashps", &rpc_params).await
2459 }
2460
2461 async fn get_network_info(&self) -> Result<GetNetworkInfoResponse, Self::Error> {
2463 self.call::<GetNetworkInfoResponse>("getnetworkinfo", &[]).await
2464 }
2465
2466 async fn get_new_address(
2470 &self,
2471 label: Option<String>,
2472 address_type: Option<String>,
2473 ) -> Result<GetNewAddressResponse, Self::Error> {
2474 let mut rpc_params = vec![];
2475 if let Some(val) = label {
2476 rpc_params.push(serde_json::json!(val));
2477 }
2478 if let Some(val) = address_type {
2479 rpc_params.push(serde_json::json!(val));
2480 }
2481 self.call::<GetNewAddressResponse>("getnewaddress", &rpc_params).await
2482 }
2483
2484 async fn get_node_addresses(
2488 &self,
2489 count: Option<i64>,
2490 network: Option<String>,
2491 ) -> Result<GetNodeAddressesResponse, Self::Error> {
2492 let mut rpc_params = vec![];
2493 if let Some(val) = count {
2494 rpc_params.push(serde_json::json!(val));
2495 }
2496 if let Some(val) = network {
2497 rpc_params.push(serde_json::json!(val));
2498 }
2499 self.call::<GetNodeAddressesResponse>("getnodeaddresses", &rpc_params).await
2500 }
2501
2502 async fn get_orphan_txs(
2505 &self,
2506 verbosity: Option<i64>,
2507 ) -> Result<GetOrphanTxsResponse, Self::Error> {
2508 let mut rpc_params = vec![];
2509 if let Some(val) = verbosity {
2510 rpc_params.push(serde_json::json!(val));
2511 }
2512 self.call::<GetOrphanTxsResponse>("getorphantxs", &rpc_params).await
2513 }
2514
2515 async fn get_peer_info(&self) -> Result<GetPeerInfoResponse, Self::Error> {
2517 self.call::<GetPeerInfoResponse>("getpeerinfo", &[]).await
2518 }
2519
2520 async fn get_prioritised_transactions(
2522 &self,
2523 ) -> Result<GetPrioritisedTransactionsResponse, Self::Error> {
2524 self.call::<GetPrioritisedTransactionsResponse>("getprioritisedtransactions", &[]).await
2525 }
2526
2527 async fn get_raw_addrman(&self) -> Result<GetRawAddrmanResponse, Self::Error> {
2530 self.call::<GetRawAddrmanResponse>("getrawaddrman", &[]).await
2531 }
2532
2533 async fn get_raw_change_address(
2536 &self,
2537 address_type: Option<String>,
2538 ) -> Result<GetRawChangeAddressResponse, Self::Error> {
2539 let mut rpc_params = vec![];
2540 if let Some(val) = address_type {
2541 rpc_params.push(serde_json::json!(val));
2542 }
2543 self.call::<GetRawChangeAddressResponse>("getrawchangeaddress", &rpc_params).await
2544 }
2545
2546 async fn get_raw_mempool(
2549 &self,
2550 verbose: Option<bool>,
2551 mempool_sequence: Option<bool>,
2552 ) -> Result<GetRawMempoolResponse, Self::Error> {
2553 let mut rpc_params = vec![];
2554 if let Some(val) = verbose {
2555 rpc_params.push(serde_json::json!(val));
2556 }
2557 if let Some(val) = mempool_sequence {
2558 rpc_params.push(serde_json::json!(val));
2559 }
2560 self.call::<GetRawMempoolResponse>("getrawmempool", &rpc_params).await
2561 }
2562
2563 async fn get_raw_transaction(
2572 &self,
2573 txid: bitcoin::Txid,
2574 verbosity: Option<i64>,
2575 blockhash: Option<bitcoin::BlockHash>,
2576 ) -> Result<GetRawTransactionResponse, Self::Error> {
2577 let mut rpc_params = vec![];
2578 rpc_params.push(serde_json::json!(txid));
2579 if let Some(val) = verbosity {
2580 rpc_params.push(serde_json::json!(val));
2581 }
2582 if let Some(val) = blockhash {
2583 rpc_params.push(serde_json::json!(val));
2584 }
2585 self.call::<GetRawTransactionResponse>("getrawtransaction", &rpc_params).await
2586 }
2587
2588 async fn get_received_by_address(
2590 &self,
2591 address: bitcoin::Address,
2592 minconf: Option<i64>,
2593 include_immature_coinbase: Option<bool>,
2594 ) -> Result<GetReceivedByAddressResponse, Self::Error> {
2595 let mut rpc_params = vec![];
2596 rpc_params.push(serde_json::json!(address));
2597 if let Some(val) = minconf {
2598 rpc_params.push(serde_json::json!(val));
2599 }
2600 if let Some(val) = include_immature_coinbase {
2601 rpc_params.push(serde_json::json!(val));
2602 }
2603 self.call::<GetReceivedByAddressResponse>("getreceivedbyaddress", &rpc_params).await
2604 }
2605
2606 async fn get_received_by_label(
2608 &self,
2609 label: String,
2610 minconf: Option<i64>,
2611 include_immature_coinbase: Option<bool>,
2612 ) -> Result<GetReceivedByLabelResponse, Self::Error> {
2613 let mut rpc_params = vec![];
2614 rpc_params.push(serde_json::json!(label));
2615 if let Some(val) = minconf {
2616 rpc_params.push(serde_json::json!(val));
2617 }
2618 if let Some(val) = include_immature_coinbase {
2619 rpc_params.push(serde_json::json!(val));
2620 }
2621 self.call::<GetReceivedByLabelResponse>("getreceivedbylabel", &rpc_params).await
2622 }
2623
2624 async fn get_rpc_info(&self) -> Result<GetRpcInfoResponse, Self::Error> {
2626 self.call::<GetRpcInfoResponse>("getrpcinfo", &[]).await
2627 }
2628
2629 async fn get_transaction(
2631 &self,
2632 txid: bitcoin::Txid,
2633 include_watchonly: Option<bool>,
2634 verbose: Option<bool>,
2635 ) -> Result<GetTransactionResponse, Self::Error> {
2636 let mut rpc_params = vec![];
2637 rpc_params.push(serde_json::json!(txid));
2638 if let Some(val) = include_watchonly {
2639 rpc_params.push(serde_json::json!(val));
2640 }
2641 if let Some(val) = verbose {
2642 rpc_params.push(serde_json::json!(val));
2643 }
2644 self.call::<GetTransactionResponse>("gettransaction", &rpc_params).await
2645 }
2646
2647 async fn get_txout(
2649 &self,
2650 txid: bitcoin::Txid,
2651 n: i64,
2652 include_mempool: Option<bool>,
2653 ) -> Result<GetTxoutResponse, Self::Error> {
2654 let mut rpc_params = vec![];
2655 rpc_params.push(serde_json::json!(txid));
2656 rpc_params.push(serde_json::json!(n));
2657 if let Some(val) = include_mempool {
2658 rpc_params.push(serde_json::json!(val));
2659 }
2660 self.call::<GetTxoutResponse>("gettxout", &rpc_params).await
2661 }
2662
2663 async fn get_txout_proof(
2669 &self,
2670 txids: Vec<serde_json::Value>,
2671 blockhash: Option<bitcoin::BlockHash>,
2672 ) -> Result<GetTxoutProofResponse, Self::Error> {
2673 let mut rpc_params = vec![];
2674 rpc_params.push(serde_json::json!(txids));
2675 if let Some(val) = blockhash {
2676 rpc_params.push(serde_json::json!(val));
2677 }
2678 self.call::<GetTxoutProofResponse>("gettxoutproof", &rpc_params).await
2679 }
2680
2681 async fn get_txout_set_info(
2684 &self,
2685 hash_type: Option<String>,
2686 hash_or_height: Option<i64>,
2687 use_index: Option<bool>,
2688 ) -> Result<GetTxoutSetInfoResponse, Self::Error> {
2689 let mut rpc_params = vec![];
2690 if let Some(val) = hash_type {
2691 rpc_params.push(serde_json::json!(val));
2692 }
2693 if let Some(val) = hash_or_height {
2694 rpc_params.push(serde_json::json!(val));
2695 }
2696 if let Some(val) = use_index {
2697 rpc_params.push(serde_json::json!(val));
2698 }
2699 self.call::<GetTxoutSetInfoResponse>("gettxoutsetinfo", &rpc_params).await
2700 }
2701
2702 async fn get_tx_spending_prevout(
2704 &self,
2705 outputs: Vec<serde_json::Value>,
2706 ) -> Result<GetTxSpendingPrevoutResponse, Self::Error> {
2707 let mut rpc_params = vec![];
2708 rpc_params.push(serde_json::json!(outputs));
2709 self.call::<GetTxSpendingPrevoutResponse>("gettxspendingprevout", &rpc_params).await
2710 }
2711
2712 async fn get_wallet_info(&self) -> Result<GetWalletInfoResponse, Self::Error> {
2714 self.call::<GetWalletInfoResponse>("getwalletinfo", &[]).await
2715 }
2716
2717 async fn help(&self, command: Option<String>) -> Result<HelpResponse, Self::Error> {
2719 let mut rpc_params = vec![];
2720 if let Some(val) = command {
2721 rpc_params.push(serde_json::json!(val));
2722 }
2723 self.call::<HelpResponse>("help", &rpc_params).await
2724 }
2725
2726 async fn import_descriptors(
2732 &self,
2733 requests: Vec<serde_json::Value>,
2734 ) -> Result<ImportDescriptorsResponse, Self::Error> {
2735 let mut rpc_params = vec![];
2736 rpc_params.push(serde_json::json!(requests));
2737 self.call::<ImportDescriptorsResponse>("importdescriptors", &rpc_params).await
2738 }
2739
2740 async fn import_mempool(
2743 &self,
2744 filepath: String,
2745 options: Option<serde_json::Value>,
2746 ) -> Result<ImportMempoolResponse, Self::Error> {
2747 let mut rpc_params = vec![];
2748 rpc_params.push(serde_json::json!(filepath));
2749 if let Some(val) = options {
2750 rpc_params.push(serde_json::json!(val));
2751 }
2752 self.call::<ImportMempoolResponse>("importmempool", &rpc_params).await
2753 }
2754
2755 async fn import_pruned_funds(
2757 &self,
2758 rawtransaction: String,
2759 txoutproof: String,
2760 ) -> Result<ImportPrunedFundsResponse, Self::Error> {
2761 let mut rpc_params = vec![];
2762 rpc_params.push(serde_json::json!(rawtransaction));
2763 rpc_params.push(serde_json::json!(txoutproof));
2764 self.call::<ImportPrunedFundsResponse>("importprunedfunds", &rpc_params).await
2765 }
2766
2767 async fn invalidate_block(
2769 &self,
2770 blockhash: bitcoin::BlockHash,
2771 ) -> Result<InvalidateBlockResponse, Self::Error> {
2772 let mut rpc_params = vec![];
2773 rpc_params.push(serde_json::json!(blockhash));
2774 self.call::<InvalidateBlockResponse>("invalidateblock", &rpc_params).await
2775 }
2776
2777 async fn join_psbts(
2780 &self,
2781 txs: Vec<serde_json::Value>,
2782 ) -> Result<JoinPsbtsResponse, Self::Error> {
2783 let mut rpc_params = vec![];
2784 rpc_params.push(serde_json::json!(txs));
2785 self.call::<JoinPsbtsResponse>("joinpsbts", &rpc_params).await
2786 }
2787
2788 async fn keypool_refill(
2792 &self,
2793 newsize: Option<i64>,
2794 ) -> Result<KeypoolRefillResponse, Self::Error> {
2795 let mut rpc_params = vec![];
2796 if let Some(val) = newsize {
2797 rpc_params.push(serde_json::json!(val));
2798 }
2799 self.call::<KeypoolRefillResponse>("keypoolrefill", &rpc_params).await
2800 }
2801
2802 async fn list_address_groupings(&self) -> Result<ListAddressGroupingsResponse, Self::Error> {
2806 self.call::<ListAddressGroupingsResponse>("listaddressgroupings", &[]).await
2807 }
2808
2809 async fn list_banned(&self) -> Result<ListBannedResponse, Self::Error> {
2811 self.call::<ListBannedResponse>("listbanned", &[]).await
2812 }
2813
2814 async fn list_descriptors(
2816 &self,
2817 private: Option<bool>,
2818 ) -> Result<ListDescriptorsResponse, Self::Error> {
2819 let mut rpc_params = vec![];
2820 if let Some(val) = private {
2821 rpc_params.push(serde_json::json!(val));
2822 }
2823 self.call::<ListDescriptorsResponse>("listdescriptors", &rpc_params).await
2824 }
2825
2826 async fn list_labels(
2828 &self,
2829 purpose: Option<String>,
2830 ) -> Result<ListLabelsResponse, Self::Error> {
2831 let mut rpc_params = vec![];
2832 if let Some(val) = purpose {
2833 rpc_params.push(serde_json::json!(val));
2834 }
2835 self.call::<ListLabelsResponse>("listlabels", &rpc_params).await
2836 }
2837
2838 async fn list_lock_unspent(&self) -> Result<ListLockUnspentResponse, Self::Error> {
2841 self.call::<ListLockUnspentResponse>("listlockunspent", &[]).await
2842 }
2843
2844 async fn list_received_by_address(
2846 &self,
2847 minconf: Option<i64>,
2848 include_empty: Option<bool>,
2849 include_watchonly: Option<bool>,
2850 address_filter: Option<String>,
2851 include_immature_coinbase: Option<bool>,
2852 ) -> Result<ListReceivedByAddressResponse, Self::Error> {
2853 let mut rpc_params = vec![];
2854 if let Some(val) = minconf {
2855 rpc_params.push(serde_json::json!(val));
2856 }
2857 if let Some(val) = include_empty {
2858 rpc_params.push(serde_json::json!(val));
2859 }
2860 if let Some(val) = include_watchonly {
2861 rpc_params.push(serde_json::json!(val));
2862 }
2863 if let Some(val) = address_filter {
2864 rpc_params.push(serde_json::json!(val));
2865 }
2866 if let Some(val) = include_immature_coinbase {
2867 rpc_params.push(serde_json::json!(val));
2868 }
2869 self.call::<ListReceivedByAddressResponse>("listreceivedbyaddress", &rpc_params).await
2870 }
2871
2872 async fn list_received_by_label(
2874 &self,
2875 minconf: Option<i64>,
2876 include_empty: Option<bool>,
2877 include_watchonly: Option<bool>,
2878 include_immature_coinbase: Option<bool>,
2879 ) -> Result<ListReceivedByLabelResponse, Self::Error> {
2880 let mut rpc_params = vec![];
2881 if let Some(val) = minconf {
2882 rpc_params.push(serde_json::json!(val));
2883 }
2884 if let Some(val) = include_empty {
2885 rpc_params.push(serde_json::json!(val));
2886 }
2887 if let Some(val) = include_watchonly {
2888 rpc_params.push(serde_json::json!(val));
2889 }
2890 if let Some(val) = include_immature_coinbase {
2891 rpc_params.push(serde_json::json!(val));
2892 }
2893 self.call::<ListReceivedByLabelResponse>("listreceivedbylabel", &rpc_params).await
2894 }
2895
2896 async fn list_since_block(
2900 &self,
2901 blockhash: Option<bitcoin::BlockHash>,
2902 target_confirmations: Option<i64>,
2903 include_watchonly: Option<bool>,
2904 include_removed: Option<bool>,
2905 include_change: Option<bool>,
2906 label: Option<String>,
2907 ) -> Result<ListSinceBlockResponse, Self::Error> {
2908 let mut rpc_params = vec![];
2909 if let Some(val) = blockhash {
2910 rpc_params.push(serde_json::json!(val));
2911 }
2912 if let Some(val) = target_confirmations {
2913 rpc_params.push(serde_json::json!(val));
2914 }
2915 if let Some(val) = include_watchonly {
2916 rpc_params.push(serde_json::json!(val));
2917 }
2918 if let Some(val) = include_removed {
2919 rpc_params.push(serde_json::json!(val));
2920 }
2921 if let Some(val) = include_change {
2922 rpc_params.push(serde_json::json!(val));
2923 }
2924 if let Some(val) = label {
2925 rpc_params.push(serde_json::json!(val));
2926 }
2927 self.call::<ListSinceBlockResponse>("listsinceblock", &rpc_params).await
2928 }
2929
2930 async fn list_transactions(
2937 &self,
2938 label: Option<String>,
2939 count: Option<i64>,
2940 skip: Option<i64>,
2941 include_watchonly: Option<bool>,
2942 ) -> Result<ListTransactionsResponse, Self::Error> {
2943 let mut rpc_params = vec![];
2944 if let Some(val) = label {
2945 rpc_params.push(serde_json::json!(val));
2946 }
2947 if let Some(val) = count {
2948 rpc_params.push(serde_json::json!(val));
2949 }
2950 if let Some(val) = skip {
2951 rpc_params.push(serde_json::json!(val));
2952 }
2953 if let Some(val) = include_watchonly {
2954 rpc_params.push(serde_json::json!(val));
2955 }
2956 self.call::<ListTransactionsResponse>("listtransactions", &rpc_params).await
2957 }
2958
2959 async fn list_unspent(
2963 &self,
2964 minconf: Option<i64>,
2965 maxconf: Option<i64>,
2966 addresses: Option<Vec<serde_json::Value>>,
2967 include_unsafe: Option<bool>,
2968 query_options: Option<serde_json::Value>,
2969 ) -> Result<ListUnspentResponse, Self::Error> {
2970 let mut rpc_params = vec![];
2971 if let Some(val) = minconf {
2972 rpc_params.push(serde_json::json!(val));
2973 }
2974 if let Some(val) = maxconf {
2975 rpc_params.push(serde_json::json!(val));
2976 }
2977 if let Some(val) = addresses {
2978 rpc_params.push(serde_json::json!(val));
2979 }
2980 if let Some(val) = include_unsafe {
2981 rpc_params.push(serde_json::json!(val));
2982 }
2983 if let Some(val) = query_options {
2984 rpc_params.push(serde_json::json!(val));
2985 }
2986 self.call::<ListUnspentResponse>("listunspent", &rpc_params).await
2987 }
2988
2989 async fn list_wallet_dir(&self) -> Result<ListWalletDirResponse, Self::Error> {
2991 self.call::<ListWalletDirResponse>("listwalletdir", &[]).await
2992 }
2993
2994 async fn list_wallets(&self) -> Result<ListWalletsResponse, Self::Error> {
2997 self.call::<ListWalletsResponse>("listwallets", &[]).await
2998 }
2999
3000 async fn load_txout_set(&self, path: String) -> Result<LoadTxoutSetResponse, Self::Error> {
3005 let mut rpc_params = vec![];
3006 rpc_params.push(serde_json::json!(path));
3007 self.call::<LoadTxoutSetResponse>("loadtxoutset", &rpc_params).await
3008 }
3009
3010 async fn load_wallet(
3014 &self,
3015 filename: String,
3016 load_on_startup: Option<bool>,
3017 ) -> Result<LoadWalletResponse, Self::Error> {
3018 let mut rpc_params = vec![];
3019 rpc_params.push(serde_json::json!(filename));
3020 if let Some(val) = load_on_startup {
3021 rpc_params.push(serde_json::json!(val));
3022 }
3023 self.call::<LoadWalletResponse>("loadwallet", &rpc_params).await
3024 }
3025
3026 async fn lock_unspent(
3036 &self,
3037 unlock: bool,
3038 transactions: Option<Vec<serde_json::Value>>,
3039 persistent: Option<bool>,
3040 ) -> Result<LockUnspentResponse, Self::Error> {
3041 let mut rpc_params = vec![];
3042 rpc_params.push(serde_json::json!(unlock));
3043 if let Some(val) = transactions {
3044 rpc_params.push(serde_json::json!(val));
3045 }
3046 if let Some(val) = persistent {
3047 rpc_params.push(serde_json::json!(val));
3048 }
3049 self.call::<LockUnspentResponse>("lockunspent", &rpc_params).await
3050 }
3051
3052 async fn logging(
3061 &self,
3062 include: Option<Vec<serde_json::Value>>,
3063 exclude: Option<Vec<serde_json::Value>>,
3064 ) -> Result<LoggingResponse, Self::Error> {
3065 let mut rpc_params = vec![];
3066 if let Some(val) = include {
3067 rpc_params.push(serde_json::json!(val));
3068 }
3069 if let Some(val) = exclude {
3070 rpc_params.push(serde_json::json!(val));
3071 }
3072 self.call::<LoggingResponse>("logging", &rpc_params).await
3073 }
3074
3075 async fn migrate_wallet(
3083 &self,
3084 wallet_name: Option<String>,
3085 passphrase: Option<String>,
3086 ) -> Result<MigrateWalletResponse, Self::Error> {
3087 let mut rpc_params = vec![];
3088 if let Some(val) = wallet_name {
3089 rpc_params.push(serde_json::json!(val));
3090 }
3091 if let Some(val) = passphrase {
3092 rpc_params.push(serde_json::json!(val));
3093 }
3094 self.call::<MigrateWalletResponse>("migratewallet", &rpc_params).await
3095 }
3096
3097 async fn mock_scheduler(&self, delta_time: i64) -> Result<MockSchedulerResponse, Self::Error> {
3099 let mut rpc_params = vec![];
3100 rpc_params.push(serde_json::json!(delta_time));
3101 self.call::<MockSchedulerResponse>("mockscheduler", &rpc_params).await
3102 }
3103
3104 async fn ping(&self) -> Result<PingResponse, Self::Error> {
3108 self.call::<PingResponse>("ping", &[]).await
3109 }
3110
3111 async fn precious_block(
3115 &self,
3116 blockhash: bitcoin::BlockHash,
3117 ) -> Result<PreciousBlockResponse, Self::Error> {
3118 let mut rpc_params = vec![];
3119 rpc_params.push(serde_json::json!(blockhash));
3120 self.call::<PreciousBlockResponse>("preciousblock", &rpc_params).await
3121 }
3122
3123 async fn prioritise_transaction(
3125 &self,
3126 txid: bitcoin::Txid,
3127 dummy: Option<i64>,
3128 fee_delta: i64,
3129 ) -> Result<PrioritiseTransactionResponse, Self::Error> {
3130 let mut rpc_params = vec![];
3131 rpc_params.push(serde_json::json!(txid));
3132 if let Some(val) = dummy {
3133 rpc_params.push(serde_json::json!(val));
3134 }
3135 rpc_params.push(serde_json::json!(fee_delta));
3136 self.call::<PrioritiseTransactionResponse>("prioritisetransaction", &rpc_params).await
3137 }
3138
3139 async fn prune_blockchain(&self, height: i64) -> Result<PruneBlockchainResponse, Self::Error> {
3142 let mut rpc_params = vec![];
3143 rpc_params.push(serde_json::json!(height));
3144 self.call::<PruneBlockchainResponse>("pruneblockchain", &rpc_params).await
3145 }
3146
3147 async fn psbt_bump_fee(
3161 &self,
3162 txid: bitcoin::Txid,
3163 options: Option<serde_json::Value>,
3164 ) -> Result<PsbtBumpFeeResponse, Self::Error> {
3165 let mut rpc_params = vec![];
3166 rpc_params.push(serde_json::json!(txid));
3167 if let Some(val) = options {
3168 rpc_params.push(serde_json::json!(val));
3169 }
3170 self.call::<PsbtBumpFeeResponse>("psbtbumpfee", &rpc_params).await
3171 }
3172
3173 async fn reconsider_block(
3176 &self,
3177 blockhash: bitcoin::BlockHash,
3178 ) -> Result<ReconsiderBlockResponse, Self::Error> {
3179 let mut rpc_params = vec![];
3180 rpc_params.push(serde_json::json!(blockhash));
3181 self.call::<ReconsiderBlockResponse>("reconsiderblock", &rpc_params).await
3182 }
3183
3184 async fn remove_pruned_funds(
3186 &self,
3187 txid: bitcoin::Txid,
3188 ) -> Result<RemovePrunedFundsResponse, Self::Error> {
3189 let mut rpc_params = vec![];
3190 rpc_params.push(serde_json::json!(txid));
3191 self.call::<RemovePrunedFundsResponse>("removeprunedfunds", &rpc_params).await
3192 }
3193
3194 async fn rescan_blockchain(
3199 &self,
3200 start_height: Option<i64>,
3201 stop_height: Option<i64>,
3202 ) -> Result<RescanBlockchainResponse, Self::Error> {
3203 let mut rpc_params = vec![];
3204 if let Some(val) = start_height {
3205 rpc_params.push(serde_json::json!(val));
3206 }
3207 if let Some(val) = stop_height {
3208 rpc_params.push(serde_json::json!(val));
3209 }
3210 self.call::<RescanBlockchainResponse>("rescanblockchain", &rpc_params).await
3211 }
3212
3213 async fn restore_wallet(
3217 &self,
3218 wallet_name: String,
3219 backup_file: String,
3220 load_on_startup: Option<bool>,
3221 ) -> Result<RestoreWalletResponse, Self::Error> {
3222 let mut rpc_params = vec![];
3223 rpc_params.push(serde_json::json!(wallet_name));
3224 rpc_params.push(serde_json::json!(backup_file));
3225 if let Some(val) = load_on_startup {
3226 rpc_params.push(serde_json::json!(val));
3227 }
3228 self.call::<RestoreWalletResponse>("restorewallet", &rpc_params).await
3229 }
3230
3231 async fn save_mempool(&self) -> Result<SaveMempoolResponse, Self::Error> {
3233 self.call::<SaveMempoolResponse>("savemempool", &[]).await
3234 }
3235
3236 async fn scan_blocks(
3239 &self,
3240 action: String,
3241 scanobjects: Option<Vec<serde_json::Value>>,
3242 start_height: Option<i64>,
3243 stop_height: Option<i64>,
3244 filtertype: Option<String>,
3245 options: Option<serde_json::Value>,
3246 ) -> Result<ScanBlocksResponse, Self::Error> {
3247 let mut rpc_params = vec![];
3248 rpc_params.push(serde_json::json!(action));
3249 if let Some(val) = scanobjects {
3250 rpc_params.push(serde_json::json!(val));
3251 }
3252 if let Some(val) = start_height {
3253 rpc_params.push(serde_json::json!(val));
3254 }
3255 if let Some(val) = stop_height {
3256 rpc_params.push(serde_json::json!(val));
3257 }
3258 if let Some(val) = filtertype {
3259 rpc_params.push(serde_json::json!(val));
3260 }
3261 if let Some(val) = options {
3262 rpc_params.push(serde_json::json!(val));
3263 }
3264 self.call::<ScanBlocksResponse>("scanblocks", &rpc_params).await
3265 }
3266
3267 async fn scan_txout_set(
3284 &self,
3285 action: String,
3286 scanobjects: Option<Vec<serde_json::Value>>,
3287 ) -> Result<ScanTxoutSetResponse, Self::Error> {
3288 let mut rpc_params = vec![];
3289 rpc_params.push(serde_json::json!(action));
3290 if let Some(val) = scanobjects {
3291 rpc_params.push(serde_json::json!(val));
3292 }
3293 self.call::<ScanTxoutSetResponse>("scantxoutset", &rpc_params).await
3294 }
3295
3296 async fn schema(&self) -> Result<SchemaResponse, Self::Error> {
3298 self.call::<SchemaResponse>("schema", &[]).await
3299 }
3300
3301 async fn send(
3304 &self,
3305 outputs: Vec<serde_json::Value>,
3306 conf_target: Option<i64>,
3307 estimate_mode: Option<String>,
3308 fee_rate: Option<serde_json::Value>,
3309 options: Option<serde_json::Value>,
3310 version: Option<i64>,
3311 ) -> Result<SendResponse, Self::Error> {
3312 let mut rpc_params = vec![];
3313 rpc_params.push(serde_json::json!(outputs));
3314 if let Some(val) = conf_target {
3315 rpc_params.push(serde_json::json!(val));
3316 }
3317 if let Some(val) = estimate_mode {
3318 rpc_params.push(serde_json::json!(val));
3319 }
3320 if let Some(val) = fee_rate {
3321 rpc_params.push(serde_json::json!(val));
3322 }
3323 if let Some(val) = options {
3324 rpc_params.push(serde_json::json!(val));
3325 }
3326 if let Some(val) = version {
3327 rpc_params.push(serde_json::json!(val));
3328 }
3329 self.call::<SendResponse>("send", &rpc_params).await
3330 }
3331
3332 async fn send_all(
3337 &self,
3338 recipients: Vec<serde_json::Value>,
3339 conf_target: Option<i64>,
3340 estimate_mode: Option<String>,
3341 fee_rate: Option<serde_json::Value>,
3342 options: Option<serde_json::Value>,
3343 ) -> Result<SendAllResponse, Self::Error> {
3344 let mut rpc_params = vec![];
3345 rpc_params.push(serde_json::json!(recipients));
3346 if let Some(val) = conf_target {
3347 rpc_params.push(serde_json::json!(val));
3348 }
3349 if let Some(val) = estimate_mode {
3350 rpc_params.push(serde_json::json!(val));
3351 }
3352 if let Some(val) = fee_rate {
3353 rpc_params.push(serde_json::json!(val));
3354 }
3355 if let Some(val) = options {
3356 rpc_params.push(serde_json::json!(val));
3357 }
3358 self.call::<SendAllResponse>("sendall", &rpc_params).await
3359 }
3360
3361 async fn send_many(
3364 &self,
3365 dummy: Option<String>,
3366 amounts: serde_json::Value,
3367 minconf: Option<i64>,
3368 comment: Option<String>,
3369 subtractfeefrom: Option<Vec<serde_json::Value>>,
3370 replaceable: Option<bool>,
3371 conf_target: Option<i64>,
3372 estimate_mode: Option<String>,
3373 fee_rate: Option<serde_json::Value>,
3374 verbose: Option<bool>,
3375 ) -> Result<SendManyResponse, Self::Error> {
3376 let mut rpc_params = vec![];
3377 if let Some(val) = dummy {
3378 rpc_params.push(serde_json::json!(val));
3379 }
3380 rpc_params.push(serde_json::json!(amounts));
3381 if let Some(val) = minconf {
3382 rpc_params.push(serde_json::json!(val));
3383 }
3384 if let Some(val) = comment {
3385 rpc_params.push(serde_json::json!(val));
3386 }
3387 if let Some(val) = subtractfeefrom {
3388 rpc_params.push(serde_json::json!(val));
3389 }
3390 if let Some(val) = replaceable {
3391 rpc_params.push(serde_json::json!(val));
3392 }
3393 if let Some(val) = conf_target {
3394 rpc_params.push(serde_json::json!(val));
3395 }
3396 if let Some(val) = estimate_mode {
3397 rpc_params.push(serde_json::json!(val));
3398 }
3399 if let Some(val) = fee_rate {
3400 rpc_params.push(serde_json::json!(val));
3401 }
3402 if let Some(val) = verbose {
3403 rpc_params.push(serde_json::json!(val));
3404 }
3405 self.call::<SendManyResponse>("sendmany", &rpc_params).await
3406 }
3407
3408 async fn send_msg_to_peer(
3412 &self,
3413 peer_id: i64,
3414 msg_type: String,
3415 msg: String,
3416 ) -> Result<SendMsgToPeerResponse, Self::Error> {
3417 let mut rpc_params = vec![];
3418 rpc_params.push(serde_json::json!(peer_id));
3419 rpc_params.push(serde_json::json!(msg_type));
3420 rpc_params.push(serde_json::json!(msg));
3421 self.call::<SendMsgToPeerResponse>("sendmsgtopeer", &rpc_params).await
3422 }
3423
3424 async fn send_raw_transaction(
3437 &self,
3438 hexstring: String,
3439 maxfeerate: Option<serde_json::Value>,
3440 maxburnamount: Option<serde_json::Value>,
3441 ) -> Result<SendRawTransactionResponse, Self::Error> {
3442 let mut rpc_params = vec![];
3443 rpc_params.push(serde_json::json!(hexstring));
3444 if let Some(val) = maxfeerate {
3445 rpc_params.push(serde_json::json!(val));
3446 }
3447 if let Some(val) = maxburnamount {
3448 rpc_params.push(serde_json::json!(val));
3449 }
3450 self.call::<SendRawTransactionResponse>("sendrawtransaction", &rpc_params).await
3451 }
3452
3453 async fn send_to_address(
3456 &self,
3457 address: bitcoin::Address,
3458 amount: serde_json::Value,
3459 comment: Option<String>,
3460 comment_to: Option<String>,
3461 subtractfeefromamount: Option<bool>,
3462 replaceable: Option<bool>,
3463 conf_target: Option<i64>,
3464 estimate_mode: Option<String>,
3465 avoid_reuse: Option<bool>,
3466 fee_rate: Option<serde_json::Value>,
3467 verbose: Option<bool>,
3468 ) -> Result<SendToAddressResponse, Self::Error> {
3469 let mut rpc_params = vec![];
3470 rpc_params.push(serde_json::json!(address));
3471 rpc_params.push(serde_json::json!(amount));
3472 if let Some(val) = comment {
3473 rpc_params.push(serde_json::json!(val));
3474 }
3475 if let Some(val) = comment_to {
3476 rpc_params.push(serde_json::json!(val));
3477 }
3478 if let Some(val) = subtractfeefromamount {
3479 rpc_params.push(serde_json::json!(val));
3480 }
3481 if let Some(val) = replaceable {
3482 rpc_params.push(serde_json::json!(val));
3483 }
3484 if let Some(val) = conf_target {
3485 rpc_params.push(serde_json::json!(val));
3486 }
3487 if let Some(val) = estimate_mode {
3488 rpc_params.push(serde_json::json!(val));
3489 }
3490 if let Some(val) = avoid_reuse {
3491 rpc_params.push(serde_json::json!(val));
3492 }
3493 if let Some(val) = fee_rate {
3494 rpc_params.push(serde_json::json!(val));
3495 }
3496 if let Some(val) = verbose {
3497 rpc_params.push(serde_json::json!(val));
3498 }
3499 self.call::<SendToAddressResponse>("sendtoaddress", &rpc_params).await
3500 }
3501
3502 async fn set_ban(
3504 &self,
3505 subnet: String,
3506 command: String,
3507 bantime: Option<i64>,
3508 absolute: Option<bool>,
3509 ) -> Result<SetBanResponse, Self::Error> {
3510 let mut rpc_params = vec![];
3511 rpc_params.push(serde_json::json!(subnet));
3512 rpc_params.push(serde_json::json!(command));
3513 if let Some(val) = bantime {
3514 rpc_params.push(serde_json::json!(val));
3515 }
3516 if let Some(val) = absolute {
3517 rpc_params.push(serde_json::json!(val));
3518 }
3519 self.call::<SetBanResponse>("setban", &rpc_params).await
3520 }
3521
3522 async fn set_label(
3524 &self,
3525 address: bitcoin::Address,
3526 label: String,
3527 ) -> Result<SetLabelResponse, Self::Error> {
3528 let mut rpc_params = vec![];
3529 rpc_params.push(serde_json::json!(address));
3530 rpc_params.push(serde_json::json!(label));
3531 self.call::<SetLabelResponse>("setlabel", &rpc_params).await
3532 }
3533
3534 async fn set_mock_time(&self, timestamp: i64) -> Result<SetMockTimeResponse, Self::Error> {
3536 let mut rpc_params = vec![];
3537 rpc_params.push(serde_json::json!(timestamp));
3538 self.call::<SetMockTimeResponse>("setmocktime", &rpc_params).await
3539 }
3540
3541 async fn set_network_active(
3543 &self,
3544 state: bool,
3545 ) -> Result<SetNetworkActiveResponse, Self::Error> {
3546 let mut rpc_params = vec![];
3547 rpc_params.push(serde_json::json!(state));
3548 self.call::<SetNetworkActiveResponse>("setnetworkactive", &rpc_params).await
3549 }
3550
3551 async fn set_tx_fee(&self, amount: serde_json::Value) -> Result<SetTxFeeResponse, Self::Error> {
3554 let mut rpc_params = vec![];
3555 rpc_params.push(serde_json::json!(amount));
3556 self.call::<SetTxFeeResponse>("settxfee", &rpc_params).await
3557 }
3558
3559 async fn set_wallet_flag(
3561 &self,
3562 flag: String,
3563 value: Option<bool>,
3564 ) -> Result<SetWalletFlagResponse, Self::Error> {
3565 let mut rpc_params = vec![];
3566 rpc_params.push(serde_json::json!(flag));
3567 if let Some(val) = value {
3568 rpc_params.push(serde_json::json!(val));
3569 }
3570 self.call::<SetWalletFlagResponse>("setwalletflag", &rpc_params).await
3571 }
3572
3573 async fn sign_message(
3576 &self,
3577 address: bitcoin::Address,
3578 message: String,
3579 ) -> Result<SignMessageResponse, Self::Error> {
3580 let mut rpc_params = vec![];
3581 rpc_params.push(serde_json::json!(address));
3582 rpc_params.push(serde_json::json!(message));
3583 self.call::<SignMessageResponse>("signmessage", &rpc_params).await
3584 }
3585
3586 async fn sign_message_with_priv_key(
3588 &self,
3589 privkey: String,
3590 message: String,
3591 ) -> Result<SignMessageWithPrivKeyResponse, Self::Error> {
3592 let mut rpc_params = vec![];
3593 rpc_params.push(serde_json::json!(privkey));
3594 rpc_params.push(serde_json::json!(message));
3595 self.call::<SignMessageWithPrivKeyResponse>("signmessagewithprivkey", &rpc_params).await
3596 }
3597
3598 async fn sign_raw_transaction_with_key(
3604 &self,
3605 hexstring: String,
3606 privkeys: Vec<serde_json::Value>,
3607 prevtxs: Option<Vec<serde_json::Value>>,
3608 sighashtype: Option<String>,
3609 ) -> Result<SignRawTransactionWithKeyResponse, Self::Error> {
3610 let mut rpc_params = vec![];
3611 rpc_params.push(serde_json::json!(hexstring));
3612 rpc_params.push(serde_json::json!(privkeys));
3613 if let Some(val) = prevtxs {
3614 rpc_params.push(serde_json::json!(val));
3615 }
3616 if let Some(val) = sighashtype {
3617 rpc_params.push(serde_json::json!(val));
3618 }
3619 self.call::<SignRawTransactionWithKeyResponse>("signrawtransactionwithkey", &rpc_params)
3620 .await
3621 }
3622
3623 async fn sign_raw_transaction_with_wallet(
3628 &self,
3629 hexstring: String,
3630 prevtxs: Option<Vec<serde_json::Value>>,
3631 sighashtype: Option<String>,
3632 ) -> Result<SignRawTransactionWithWalletResponse, Self::Error> {
3633 let mut rpc_params = vec![];
3634 rpc_params.push(serde_json::json!(hexstring));
3635 if let Some(val) = prevtxs {
3636 rpc_params.push(serde_json::json!(val));
3637 }
3638 if let Some(val) = sighashtype {
3639 rpc_params.push(serde_json::json!(val));
3640 }
3641 self.call::<SignRawTransactionWithWalletResponse>(
3642 "signrawtransactionwithwallet",
3643 &rpc_params,
3644 )
3645 .await
3646 }
3647
3648 async fn simulate_raw_transaction(
3650 &self,
3651 rawtxs: Option<Vec<serde_json::Value>>,
3652 options: Option<serde_json::Value>,
3653 ) -> Result<SimulateRawTransactionResponse, Self::Error> {
3654 let mut rpc_params = vec![];
3655 if let Some(val) = rawtxs {
3656 rpc_params.push(serde_json::json!(val));
3657 }
3658 if let Some(val) = options {
3659 rpc_params.push(serde_json::json!(val));
3660 }
3661 self.call::<SimulateRawTransactionResponse>("simulaterawtransaction", &rpc_params).await
3662 }
3663
3664 async fn stop(&self, wait: Option<i64>) -> Result<StopResponse, Self::Error> {
3666 let mut rpc_params = vec![];
3667 if let Some(val) = wait {
3668 rpc_params.push(serde_json::json!(val));
3669 }
3670 self.call::<StopResponse>("stop", &rpc_params).await
3671 }
3672
3673 async fn submit_block(
3676 &self,
3677 hexdata: String,
3678 dummy: Option<String>,
3679 ) -> Result<SubmitBlockResponse, Self::Error> {
3680 let mut rpc_params = vec![];
3681 rpc_params.push(serde_json::json!(hexdata));
3682 if let Some(val) = dummy {
3683 rpc_params.push(serde_json::json!(val));
3684 }
3685 self.call::<SubmitBlockResponse>("submitblock", &rpc_params).await
3686 }
3687
3688 async fn submit_header(&self, hexdata: String) -> Result<SubmitHeaderResponse, Self::Error> {
3691 let mut rpc_params = vec![];
3692 rpc_params.push(serde_json::json!(hexdata));
3693 self.call::<SubmitHeaderResponse>("submitheader", &rpc_params).await
3694 }
3695
3696 async fn submit_package(
3701 &self,
3702 package: Vec<serde_json::Value>,
3703 maxfeerate: Option<serde_json::Value>,
3704 maxburnamount: Option<serde_json::Value>,
3705 ) -> Result<SubmitPackageResponse, Self::Error> {
3706 let mut rpc_params = vec![];
3707 rpc_params.push(serde_json::json!(package));
3708 if let Some(val) = maxfeerate {
3709 rpc_params.push(serde_json::json!(val));
3710 }
3711 if let Some(val) = maxburnamount {
3712 rpc_params.push(serde_json::json!(val));
3713 }
3714 self.call::<SubmitPackageResponse>("submitpackage", &rpc_params).await
3715 }
3716
3717 async fn sync_with_validation_interface_queue(
3719 &self,
3720 ) -> Result<SyncWithValidationInterfaceQueueResponse, Self::Error> {
3721 self.call::<SyncWithValidationInterfaceQueueResponse>(
3722 "syncwithvalidationinterfacequeue",
3723 &[],
3724 )
3725 .await
3726 }
3727
3728 async fn test_mempool_accept(
3735 &self,
3736 rawtxs: Vec<serde_json::Value>,
3737 maxfeerate: Option<serde_json::Value>,
3738 ) -> Result<TestMempoolAcceptResponse, Self::Error> {
3739 let mut rpc_params = vec![];
3740 rpc_params.push(serde_json::json!(rawtxs));
3741 if let Some(val) = maxfeerate {
3742 rpc_params.push(serde_json::json!(val));
3743 }
3744 self.call::<TestMempoolAcceptResponse>("testmempoolaccept", &rpc_params).await
3745 }
3746
3747 async fn unload_wallet(
3750 &self,
3751 wallet_name: Option<String>,
3752 load_on_startup: Option<bool>,
3753 ) -> Result<UnloadWalletResponse, Self::Error> {
3754 let mut rpc_params = vec![];
3755 if let Some(val) = wallet_name {
3756 rpc_params.push(serde_json::json!(val));
3757 }
3758 if let Some(val) = load_on_startup {
3759 rpc_params.push(serde_json::json!(val));
3760 }
3761 self.call::<UnloadWalletResponse>("unloadwallet", &rpc_params).await
3762 }
3763
3764 async fn uptime(&self) -> Result<UptimeResponse, Self::Error> {
3766 self.call::<UptimeResponse>("uptime", &[]).await
3767 }
3768
3769 async fn utxo_update_psbt(
3771 &self,
3772 psbt: String,
3773 descriptors: Option<Vec<serde_json::Value>>,
3774 ) -> Result<UtxoUpdatePsbtResponse, Self::Error> {
3775 let mut rpc_params = vec![];
3776 rpc_params.push(serde_json::json!(psbt));
3777 if let Some(val) = descriptors {
3778 rpc_params.push(serde_json::json!(val));
3779 }
3780 self.call::<UtxoUpdatePsbtResponse>("utxoupdatepsbt", &rpc_params).await
3781 }
3782
3783 async fn validate_address(
3785 &self,
3786 address: bitcoin::Address,
3787 ) -> Result<ValidateAddressResponse, Self::Error> {
3788 let mut rpc_params = vec![];
3789 rpc_params.push(serde_json::json!(address));
3790 self.call::<ValidateAddressResponse>("validateaddress", &rpc_params).await
3791 }
3792
3793 async fn verify_chain(
3795 &self,
3796 checklevel: Option<i64>,
3797 nblocks: Option<i64>,
3798 ) -> Result<VerifyChainResponse, Self::Error> {
3799 let mut rpc_params = vec![];
3800 if let Some(val) = checklevel {
3801 rpc_params.push(serde_json::json!(val));
3802 }
3803 if let Some(val) = nblocks {
3804 rpc_params.push(serde_json::json!(val));
3805 }
3806 self.call::<VerifyChainResponse>("verifychain", &rpc_params).await
3807 }
3808
3809 async fn verify_message(
3811 &self,
3812 address: bitcoin::Address,
3813 signature: String,
3814 message: String,
3815 ) -> Result<VerifyMessageResponse, Self::Error> {
3816 let mut rpc_params = vec![];
3817 rpc_params.push(serde_json::json!(address));
3818 rpc_params.push(serde_json::json!(signature));
3819 rpc_params.push(serde_json::json!(message));
3820 self.call::<VerifyMessageResponse>("verifymessage", &rpc_params).await
3821 }
3822
3823 async fn verify_txout_proof(
3826 &self,
3827 proof: String,
3828 ) -> Result<VerifyTxoutProofResponse, Self::Error> {
3829 let mut rpc_params = vec![];
3830 rpc_params.push(serde_json::json!(proof));
3831 self.call::<VerifyTxoutProofResponse>("verifytxoutproof", &rpc_params).await
3832 }
3833
3834 async fn wait_for_block(
3838 &self,
3839 blockhash: bitcoin::BlockHash,
3840 timeout: Option<i64>,
3841 ) -> Result<WaitForBlockResponse, Self::Error> {
3842 let mut rpc_params = vec![];
3843 rpc_params.push(serde_json::json!(blockhash));
3844 if let Some(val) = timeout {
3845 rpc_params.push(serde_json::json!(val));
3846 }
3847 self.call::<WaitForBlockResponse>("waitforblock", &rpc_params).await
3848 }
3849
3850 async fn wait_for_block_height(
3855 &self,
3856 height: i64,
3857 timeout: Option<i64>,
3858 ) -> Result<WaitForBlockHeightResponse, Self::Error> {
3859 let mut rpc_params = vec![];
3860 rpc_params.push(serde_json::json!(height));
3861 if let Some(val) = timeout {
3862 rpc_params.push(serde_json::json!(val));
3863 }
3864 self.call::<WaitForBlockHeightResponse>("waitforblockheight", &rpc_params).await
3865 }
3866
3867 async fn wait_for_new_block(
3871 &self,
3872 timeout: Option<i64>,
3873 current_tip: Option<String>,
3874 ) -> Result<WaitForNewBlockResponse, Self::Error> {
3875 let mut rpc_params = vec![];
3876 if let Some(val) = timeout {
3877 rpc_params.push(serde_json::json!(val));
3878 }
3879 if let Some(val) = current_tip {
3880 rpc_params.push(serde_json::json!(val));
3881 }
3882 self.call::<WaitForNewBlockResponse>("waitfornewblock", &rpc_params).await
3883 }
3884
3885 async fn wallet_create_funded_psbt(
3890 &self,
3891 inputs: Option<Vec<serde_json::Value>>,
3892 outputs: Vec<serde_json::Value>,
3893 locktime: Option<i64>,
3894 options: Option<serde_json::Value>,
3895 bip32derivs: Option<bool>,
3896 version: Option<i64>,
3897 ) -> Result<WalletCreateFundedPsbtResponse, Self::Error> {
3898 let mut rpc_params = vec![];
3899 if let Some(val) = inputs {
3900 rpc_params.push(serde_json::json!(val));
3901 }
3902 rpc_params.push(serde_json::json!(outputs));
3903 if let Some(val) = locktime {
3904 rpc_params.push(serde_json::json!(val));
3905 }
3906 if let Some(val) = options {
3907 rpc_params.push(serde_json::json!(val));
3908 }
3909 if let Some(val) = bip32derivs {
3910 rpc_params.push(serde_json::json!(val));
3911 }
3912 if let Some(val) = version {
3913 rpc_params.push(serde_json::json!(val));
3914 }
3915 self.call::<WalletCreateFundedPsbtResponse>("walletcreatefundedpsbt", &rpc_params).await
3916 }
3917
3918 async fn wallet_display_address(
3920 &self,
3921 address: bitcoin::Address,
3922 ) -> Result<WalletDisplayAddressResponse, Self::Error> {
3923 let mut rpc_params = vec![];
3924 rpc_params.push(serde_json::json!(address));
3925 self.call::<WalletDisplayAddressResponse>("walletdisplayaddress", &rpc_params).await
3926 }
3927
3928 async fn wallet_lock(&self) -> Result<WalletLockResponse, Self::Error> {
3932 self.call::<WalletLockResponse>("walletlock", &[]).await
3933 }
3934
3935 async fn wallet_passphrase(
3941 &self,
3942 passphrase: String,
3943 timeout: i64,
3944 ) -> Result<WalletPassphraseResponse, Self::Error> {
3945 let mut rpc_params = vec![];
3946 rpc_params.push(serde_json::json!(passphrase));
3947 rpc_params.push(serde_json::json!(timeout));
3948 self.call::<WalletPassphraseResponse>("walletpassphrase", &rpc_params).await
3949 }
3950
3951 async fn wallet_passphrase_change(
3953 &self,
3954 oldpassphrase: String,
3955 newpassphrase: String,
3956 ) -> Result<WalletPassphraseChangeResponse, Self::Error> {
3957 let mut rpc_params = vec![];
3958 rpc_params.push(serde_json::json!(oldpassphrase));
3959 rpc_params.push(serde_json::json!(newpassphrase));
3960 self.call::<WalletPassphraseChangeResponse>("walletpassphrasechange", &rpc_params).await
3961 }
3962
3963 async fn wallet_process_psbt(
3967 &self,
3968 psbt: String,
3969 sign: Option<bool>,
3970 sighashtype: Option<String>,
3971 bip32derivs: Option<bool>,
3972 finalize: Option<bool>,
3973 ) -> Result<WalletProcessPsbtResponse, Self::Error> {
3974 let mut rpc_params = vec![];
3975 rpc_params.push(serde_json::json!(psbt));
3976 if let Some(val) = sign {
3977 rpc_params.push(serde_json::json!(val));
3978 }
3979 if let Some(val) = sighashtype {
3980 rpc_params.push(serde_json::json!(val));
3981 }
3982 if let Some(val) = bip32derivs {
3983 rpc_params.push(serde_json::json!(val));
3984 }
3985 if let Some(val) = finalize {
3986 rpc_params.push(serde_json::json!(val));
3987 }
3988 self.call::<WalletProcessPsbtResponse>("walletprocesspsbt", &rpc_params).await
3989 }
3990}