corepc_client/client_sync/v17/
mod.rs1pub mod blockchain;
8pub mod control;
9pub mod generating;
10pub mod mining;
11pub mod network;
12pub mod raw_transactions;
13pub mod util;
14pub mod wallet;
15pub mod zmq;
16
17use std::collections::{BTreeMap, HashMap};
18use std::path::Path;
19
20use bitcoin::address::{Address, NetworkChecked};
21use bitcoin::{sign_message, Amount, Block, BlockHash, PublicKey, Txid};
22use serde::{Deserialize, Serialize, Serializer};
23
24use crate::client_sync::into_json;
25use crate::types::v17::*;
26
27crate::define_jsonrpc_minreq_client!("v17");
28crate::impl_client_check_expected_server_version!({ [170200] });
29
30crate::impl_client_v17__get_best_block_hash!();
32crate::impl_client_v17__get_block!();
33crate::impl_client_v17__get_blockchain_info!();
34crate::impl_client_v17__get_block_count!();
35crate::impl_client_v17__get_block_hash!();
36crate::impl_client_v17__get_block_header!();
37crate::impl_client_v17__get_block_stats!();
38crate::impl_client_v17__get_chain_tips!();
39crate::impl_client_v17__get_chain_tx_stats!();
40crate::impl_client_v17__get_difficulty!();
41crate::impl_client_v17__get_mempool_ancestors!();
42crate::impl_client_v17__get_mempool_descendants!();
43crate::impl_client_v17__get_mempool_entry!();
44crate::impl_client_v17__get_mempool_info!();
45crate::impl_client_v17__get_raw_mempool!();
46crate::impl_client_v17__get_tx_out!();
47crate::impl_client_v17__get_tx_out_proof!();
48crate::impl_client_v17__get_tx_out_set_info!();
49crate::impl_client_v17__precious_block!();
50crate::impl_client_v17__prune_blockchain!();
51crate::impl_client_v17__save_mempool!();
52crate::impl_client_v17__verify_chain!();
53crate::impl_client_v17__verify_tx_out_proof!();
54
55crate::impl_client_v17__get_memory_info!();
57crate::impl_client_v17__help!();
58crate::impl_client_v17__logging!();
59crate::impl_client_v17__stop!();
60crate::impl_client_v17__uptime!();
61
62crate::impl_client_v17__generate_to_address!();
64crate::impl_client_v17__generate!();
65crate::impl_client_v17__invalidate_block!();
66
67crate::impl_client_v17__get_block_template!();
69crate::impl_client_v17__get_mining_info!();
70crate::impl_client_v17__get_network_hashes_per_second!();
71crate::impl_client_v17__prioritise_transaction!();
72crate::impl_client_v17__submit_block!();
73
74crate::impl_client_v17__add_node!();
76crate::impl_client_v17__clear_banned!();
77crate::impl_client_v17__disconnect_node!();
78crate::impl_client_v17__get_added_node_info!();
79crate::impl_client_v17__get_connection_count!();
80crate::impl_client_v17__get_net_totals!();
81crate::impl_client_v17__get_network_info!();
82crate::impl_client_v17__get_peer_info!();
83crate::impl_client_v17__list_banned!();
84crate::impl_client_v17__ping!();
85crate::impl_client_v17__set_ban!();
86crate::impl_client_v17__set_network_active!();
87
88crate::impl_client_v17__combine_psbt!();
90crate::impl_client_v17__combine_raw_transaction!();
91crate::impl_client_v17__convert_to_psbt!();
92crate::impl_client_v17__create_psbt!();
93crate::impl_client_v17__create_raw_transaction!();
94crate::impl_client_v17__decode_psbt!();
95crate::impl_client_v17__decode_raw_transaction!();
96crate::impl_client_v17__decode_script!();
97crate::impl_client_v17__finalize_psbt!();
98crate::impl_client_v17__fund_raw_transaction!();
99crate::impl_client_v17__get_raw_transaction!();
100crate::impl_client_v17__send_raw_transaction!();
101crate::impl_client_v17__sign_raw_transaction!();
102crate::impl_client_v17__sign_raw_transaction_with_key!();
103crate::impl_client_v17__test_mempool_accept!();
104
105crate::impl_client_v17__create_multisig!();
107crate::impl_client_v17__estimate_smart_fee!();
108crate::impl_client_v17__sign_message_with_priv_key!();
109crate::impl_client_v17__validate_address!();
110crate::impl_client_v17__verify_message!();
111
112crate::impl_client_v17__abandon_transaction!();
114crate::impl_client_v17__abort_rescan!();
115crate::impl_client_v17__add_multisig_address!();
116crate::impl_client_v17__backup_wallet!();
117crate::impl_client_v17__bump_fee!();
118crate::impl_client_v17__create_wallet!();
119crate::impl_client_v17__dump_priv_key!();
120crate::impl_client_v17__dump_wallet!();
121crate::impl_client_v17__encrypt_wallet!();
122crate::impl_client_v17__get_addresses_by_label!();
123crate::impl_client_v17__get_address_info!();
124crate::impl_client_v17__get_balance!();
125crate::impl_client_v17__get_new_address!();
126crate::impl_client_v17__get_raw_change_address!();
127crate::impl_client_v17__get_received_by_address!();
128crate::impl_client_v17__get_transaction!();
129crate::impl_client_v17__get_unconfirmed_balance!();
130crate::impl_client_v17__get_wallet_info!();
131crate::impl_client_v17__import_address!();
132crate::impl_client_v17__import_multi!();
133crate::impl_client_v17__import_privkey!();
134crate::impl_client_v17__import_pruned_funds!();
135crate::impl_client_v17__import_pubkey!();
136crate::impl_client_v17__import_wallet!();
137crate::impl_client_v17__key_pool_refill!();
138crate::impl_client_v17__list_address_groupings!();
139crate::impl_client_v17__list_labels!();
140crate::impl_client_v17__list_lock_unspent!();
141crate::impl_client_v17__list_received_by_address!();
142crate::impl_client_v17__list_since_block!();
143crate::impl_client_v17__list_transactions!();
144crate::impl_client_v17__list_unspent!();
145crate::impl_client_v17__list_wallets!();
146crate::impl_client_v17__load_wallet!();
147crate::impl_client_v17__lock_unspent!();
148crate::impl_client_v17__remove_pruned_funds!();
149crate::impl_client_v17__rescan_blockchain!();
150crate::impl_client_v17__send_many!();
151crate::impl_client_v17__send_to_address!();
152crate::impl_client_v17__set_hd_seed!();
153crate::impl_client_v17__set_tx_fee!();
154crate::impl_client_v17__sign_message!();
155crate::impl_client_v17__sign_raw_transaction_with_wallet!();
156crate::impl_client_v17__unload_wallet!();
157crate::impl_client_v17__wallet_create_funded_psbt!();
158crate::impl_client_v17__wallet_lock!();
159crate::impl_client_v17__wallet_passphrase!();
160crate::impl_client_v17__wallet_passphrase_change!();
161crate::impl_client_v17__wallet_process_psbt!();
162
163crate::impl_client_v17__get_zmq_notifications!();
165
166#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
170#[serde(rename_all = "kebab-case")]
171pub enum AddressType {
172 Legacy,
173 P2shSegwit,
174 Bech32,
175}
176
177impl fmt::Display for AddressType {
178 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
179 use AddressType::*;
180
181 let s = match *self {
182 Legacy => "legacy",
183 P2shSegwit => "p2sh-segwit",
184 Bech32 => "bech32",
185 };
186 fmt::Display::fmt(s, f)
187 }
188}
189
190#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
194pub struct TemplateRequest {
195 pub rules: Vec<TemplateRules>,
197}
198
199#[derive(Copy, Clone, PartialEq, Eq, Debug, Deserialize, Serialize)]
201#[serde(rename_all = "lowercase")]
202pub enum TemplateRules {
203 Segwit,
205 Signet,
207 Csv,
209 Taproot,
211}
212
213#[derive(Debug, Serialize)]
215pub struct Input {
216 pub txid: bitcoin::Txid,
218 pub vout: u64,
220 pub sequence: Option<bitcoin::Sequence>,
222}
223
224#[derive(Debug, Serialize)]
227pub struct Output(
228 HashMap<String, f64>,
230);
231
232impl Output {
233 pub fn new(addr: Address, value: Amount) -> Self {
235 let mut map = HashMap::new();
236 map.insert(addr.to_string(), value.to_btc());
237 Output(map)
238 }
239}
240
241#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
243pub struct WalletCreateFundedPsbtInput {
244 txid: Txid,
245 vout: u32,
246}
247
248impl WalletCreateFundedPsbtInput {
249 pub fn new(txid: Txid, vout: u32) -> Self { Self { txid, vout } }
251}
252
253#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
255#[serde(rename_all = "lowercase")]
256pub enum AddNodeCommand {
257 Add,
258 Remove,
259 OneTry,
260}
261
262#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
264#[serde(rename_all = "lowercase")]
265pub enum SetBanCommand {
266 Add,
267 Remove,
268}
269
270#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
272pub struct ImportMultiRequest {
273 #[serde(rename = "desc", skip_serializing_if = "Option::is_none")]
275 pub descriptor: Option<String>, #[serde(rename = "scriptPubKey", skip_serializing_if = "Option::is_none")]
278 pub script_pubkey: Option<ImportMultiScriptPubKey>,
279 pub timestamp: ImportMultiTimestamp,
281}
282
283#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
285#[serde(untagged)]
286pub enum ImportMultiScriptPubKey {
287 Script(String),
289 Address { address: String },
291}
292
293#[derive(Clone, Debug, Deserialize, PartialEq)]
295#[serde(untagged)]
296pub enum ImportMultiTimestamp {
297 Now,
299 Time(u64),
301}
302
303impl Serialize for ImportMultiTimestamp {
304 fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
305 where
306 S: Serializer,
307 {
308 match self {
309 ImportMultiTimestamp::Now => serializer.serialize_str("now"),
310 ImportMultiTimestamp::Time(t) => serializer.serialize_u64(*t),
311 }
312 }
313}