Skip to content

Commit e23708e

Browse files
committed
Add v17 util methods
Add all of the methods from core v17, macros for implementation, required models and tests.
1 parent c2f3741 commit e23708e

File tree

33 files changed

+821
-190
lines changed

33 files changed

+821
-190
lines changed

client/src/client_sync/v17/mod.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@ pub mod generating;
1010
pub mod mining;
1111
pub mod network;
1212
pub mod raw_transactions;
13+
pub mod util;
1314
pub mod wallet;
1415

1516
use std::collections::{BTreeMap, HashMap};
1617
use std::path::Path;
1718

1819
use bitcoin::address::{Address, NetworkChecked};
19-
use bitcoin::{Amount, Block, BlockHash, PublicKey, Txid};
20+
use bitcoin::{sign_message, Amount, Block, BlockHash, PublicKey, Txid};
2021
use serde::{Deserialize, Serialize};
2122

2223
use crate::client_sync::into_json;
@@ -92,6 +93,13 @@ crate::impl_client_v17__signrawtransaction!();
9293
crate::impl_client_v17__signrawtransactionwithkey!();
9394
crate::impl_client_v17__testmempoolaccept!();
9495

96+
// == Util ==
97+
crate::impl_client_v17__createmultisig!();
98+
crate::impl_client_v17__estimatesmartfee!();
99+
crate::impl_client_v17__signmessagewithprivkey!();
100+
crate::impl_client_v17__validateaddress!();
101+
crate::impl_client_v17__verifymessage!();
102+
95103
// == Wallet ==
96104
crate::impl_client_v17__addmultisigaddress!();
97105
crate::impl_client_v17__bumpfee!();

client/src/client_sync/v17/util.rs

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
// SPDX-License-Identifier: CC0-1.0
2+
3+
//! Macros for implementing JSON-RPC methods on a client.
4+
//!
5+
//! Specifically this is methods found under the `== Util ==` section of the
6+
//! API docs of Bitcoin Core `v0.17`.
7+
//!
8+
//! All macros require `Client` to be in scope.
9+
//!
10+
//! See or use the `define_jsonrpc_minreq_client!` macro to define a `Client`.
11+
12+
/// Implements Bitcoin Core JSON-RPC API method `createmultisig`
13+
#[macro_export]
14+
macro_rules! impl_client_v17__createmultisig {
15+
() => {
16+
impl Client {
17+
pub fn create_multisig(
18+
&self,
19+
nrequired: u32,
20+
keys: Vec<PublicKey>,
21+
) -> Result<CreateMultisig> {
22+
self.call("createmultisig", &[nrequired.into(), into_json(keys)?])
23+
}
24+
}
25+
};
26+
}
27+
28+
/// Implements Bitcoin Core JSON-RPC API method `estimatesmartfee`
29+
#[macro_export]
30+
macro_rules! impl_client_v17__estimatesmartfee {
31+
() => {
32+
impl Client {
33+
pub fn estimate_smart_fee(&self, blocks: u32) -> Result<EstimateSmartFee> {
34+
self.call("estimatesmartfee", &[blocks.into()])
35+
}
36+
}
37+
};
38+
}
39+
40+
/// Implements Bitcoin Core JSON-RPC API method `signmessagewithprivkey`
41+
#[macro_export]
42+
macro_rules! impl_client_v17__signmessagewithprivkey {
43+
() => {
44+
impl Client {
45+
pub fn sign_message_with_privkey(
46+
&self,
47+
privkey: &bitcoin::PrivateKey,
48+
message: &str,
49+
) -> Result<SignMessageWithPrivKey> {
50+
self.call("signmessagewithprivkey", &[into_json(privkey)?, message.into()])
51+
}
52+
}
53+
};
54+
}
55+
56+
/// Implements Bitcoin Core JSON-RPC API method `validateaddress`
57+
#[macro_export]
58+
macro_rules! impl_client_v17__validateaddress {
59+
() => {
60+
impl Client {
61+
pub fn validate_address(
62+
&self,
63+
address: &Address<NetworkChecked>,
64+
) -> Result<ValidateAddress> {
65+
self.call("validateaddress", &[address.to_string().into()])
66+
}
67+
}
68+
};
69+
}
70+
71+
/// Implements Bitcoin Core JSON-RPC API method `verifymessage`
72+
#[macro_export]
73+
macro_rules! impl_client_v17__verifymessage {
74+
() => {
75+
impl Client {
76+
pub fn verify_message(
77+
&self,
78+
address: &Address<NetworkChecked>,
79+
signature: &sign_message::MessageSignature,
80+
message: &str,
81+
) -> Result<VerifyMessage> {
82+
self.call(
83+
"verifymessage",
84+
&[address.to_string().into(), signature.to_string().into(), message.into()],
85+
)
86+
}
87+
}
88+
};
89+
}

client/src/client_sync/v18/mod.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use std::collections::BTreeMap;
1212
use std::path::Path;
1313

1414
use bitcoin::address::{Address, NetworkChecked};
15-
use bitcoin::{Amount, Block, BlockHash, PublicKey, Txid};
15+
use bitcoin::{sign_message, Amount, Block, BlockHash, PublicKey, Txid};
1616

1717
use crate::client_sync::into_json;
1818
use crate::types::v18::*;
@@ -98,6 +98,13 @@ crate::impl_client_v17__signrawtransactionwithkey!();
9898
crate::impl_client_v17__testmempoolaccept!();
9999
crate::impl_client_v18__utxoupdatepsbt!();
100100

101+
// == Util ==
102+
crate::impl_client_v17__createmultisig!();
103+
crate::impl_client_v17__estimatesmartfee!();
104+
crate::impl_client_v17__signmessagewithprivkey!();
105+
crate::impl_client_v17__validateaddress!();
106+
crate::impl_client_v17__verifymessage!();
107+
101108
// == Wallet ==
102109
crate::impl_client_v17__addmultisigaddress!();
103110
crate::impl_client_v17__bumpfee!();

client/src/client_sync/v19/mod.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use std::collections::BTreeMap;
1111
use std::path::Path;
1212

1313
use bitcoin::address::{Address, NetworkChecked};
14-
use bitcoin::{Amount, Block, BlockHash, PublicKey, Txid};
14+
use bitcoin::{sign_message, Amount, Block, BlockHash, PublicKey, Txid};
1515

1616
use crate::client_sync::into_json;
1717
use crate::types::v19::*;
@@ -96,6 +96,13 @@ crate::impl_client_v17__signrawtransactionwithkey!();
9696
crate::impl_client_v17__testmempoolaccept!();
9797
crate::impl_client_v18__utxoupdatepsbt!();
9898

99+
// == Util ==
100+
crate::impl_client_v17__createmultisig!();
101+
crate::impl_client_v17__estimatesmartfee!();
102+
crate::impl_client_v17__signmessagewithprivkey!();
103+
crate::impl_client_v17__validateaddress!();
104+
crate::impl_client_v17__verifymessage!();
105+
99106
// == Wallet ==
100107
crate::impl_client_v17__addmultisigaddress!();
101108
crate::impl_client_v17__bumpfee!();

client/src/client_sync/v20.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use std::collections::BTreeMap;
88
use std::path::Path;
99

1010
use bitcoin::address::{Address, NetworkChecked};
11-
use bitcoin::{Amount, Block, BlockHash, PublicKey, Txid};
11+
use bitcoin::{sign_message, Amount, Block, BlockHash, PublicKey, Txid};
1212

1313
use crate::client_sync::into_json;
1414
use crate::types::v20::*;
@@ -93,6 +93,13 @@ crate::impl_client_v17__signrawtransactionwithkey!();
9393
crate::impl_client_v17__testmempoolaccept!();
9494
crate::impl_client_v18__utxoupdatepsbt!();
9595

96+
// == Util ==
97+
crate::impl_client_v17__createmultisig!();
98+
crate::impl_client_v17__estimatesmartfee!();
99+
crate::impl_client_v17__signmessagewithprivkey!();
100+
crate::impl_client_v17__validateaddress!();
101+
crate::impl_client_v17__verifymessage!();
102+
96103
// == Wallet ==
97104
crate::impl_client_v17__addmultisigaddress!();
98105
crate::impl_client_v17__bumpfee!();

client/src/client_sync/v21/mod.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use std::collections::BTreeMap;
1010
use std::path::Path;
1111

1212
use bitcoin::address::{Address, NetworkChecked};
13-
use bitcoin::{Amount, Block, BlockHash, PublicKey, Txid};
13+
use bitcoin::{sign_message, Amount, Block, BlockHash, PublicKey, Txid};
1414

1515
use crate::client_sync::into_json;
1616
use crate::types::v21::*;
@@ -95,6 +95,13 @@ crate::impl_client_v17__signrawtransactionwithkey!();
9595
crate::impl_client_v17__testmempoolaccept!();
9696
crate::impl_client_v18__utxoupdatepsbt!();
9797

98+
// == Util ==
99+
crate::impl_client_v17__createmultisig!();
100+
crate::impl_client_v17__estimatesmartfee!();
101+
crate::impl_client_v17__signmessagewithprivkey!();
102+
crate::impl_client_v17__validateaddress!();
103+
crate::impl_client_v17__verifymessage!();
104+
98105
// == Wallet ==
99106
crate::impl_client_v17__addmultisigaddress!();
100107
crate::impl_client_v17__bumpfee!();

client/src/client_sync/v22/mod.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use std::collections::BTreeMap;
1010
use std::path::Path;
1111

1212
use bitcoin::address::{Address, NetworkChecked};
13-
use bitcoin::{Amount, Block, BlockHash, PublicKey, Txid};
13+
use bitcoin::{sign_message, Amount, Block, BlockHash, PublicKey, Txid};
1414

1515
use crate::client_sync::into_json;
1616
use crate::types::v22::*;
@@ -95,6 +95,13 @@ crate::impl_client_v17__signrawtransactionwithkey!();
9595
crate::impl_client_v17__testmempoolaccept!();
9696
crate::impl_client_v18__utxoupdatepsbt!();
9797

98+
// == Util ==
99+
crate::impl_client_v17__createmultisig!();
100+
crate::impl_client_v17__estimatesmartfee!();
101+
crate::impl_client_v17__signmessagewithprivkey!();
102+
crate::impl_client_v17__validateaddress!();
103+
crate::impl_client_v17__verifymessage!();
104+
98105
// == Wallet ==
99106
crate::impl_client_v17__addmultisigaddress!();
100107
crate::impl_client_v17__bumpfee!();

client/src/client_sync/v23/mod.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use std::collections::BTreeMap;
1111
use std::path::Path;
1212

1313
use bitcoin::address::{Address, NetworkChecked};
14-
use bitcoin::{Amount, Block, BlockHash, PublicKey, Txid};
14+
use bitcoin::{sign_message, Amount, Block, BlockHash, PublicKey, Txid};
1515
use serde::{Deserialize, Serialize};
1616

1717
use crate::client_sync::into_json;
@@ -97,6 +97,13 @@ crate::impl_client_v17__signrawtransactionwithkey!();
9797
crate::impl_client_v17__testmempoolaccept!();
9898
crate::impl_client_v18__utxoupdatepsbt!();
9999

100+
// == Util ==
101+
crate::impl_client_v17__createmultisig!();
102+
crate::impl_client_v17__estimatesmartfee!();
103+
crate::impl_client_v17__signmessagewithprivkey!();
104+
crate::impl_client_v17__validateaddress!();
105+
crate::impl_client_v17__verifymessage!();
106+
100107
// == Wallet ==
101108
crate::impl_client_v17__addmultisigaddress!();
102109
crate::impl_client_v17__bumpfee!();

client/src/client_sync/v24.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use std::collections::BTreeMap;
88
use std::path::Path;
99

1010
use bitcoin::address::{Address, NetworkChecked};
11-
use bitcoin::{Amount, Block, BlockHash, PublicKey, Txid};
11+
use bitcoin::{sign_message, Amount, Block, BlockHash, PublicKey, Txid};
1212

1313
use crate::client_sync::into_json;
1414
use crate::types::v24::*;
@@ -94,6 +94,13 @@ crate::impl_client_v17__signrawtransactionwithkey!();
9494
crate::impl_client_v17__testmempoolaccept!();
9595
crate::impl_client_v18__utxoupdatepsbt!();
9696

97+
// == Util ==
98+
crate::impl_client_v17__createmultisig!();
99+
crate::impl_client_v17__estimatesmartfee!();
100+
crate::impl_client_v17__signmessagewithprivkey!();
101+
crate::impl_client_v17__validateaddress!();
102+
crate::impl_client_v17__verifymessage!();
103+
97104
// == Wallet ==
98105
crate::impl_client_v17__addmultisigaddress!();
99106
crate::impl_client_v17__bumpfee!();

client/src/client_sync/v25.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use std::collections::BTreeMap;
88
use std::path::Path;
99

1010
use bitcoin::address::{Address, NetworkChecked};
11-
use bitcoin::{Amount, Block, BlockHash, PublicKey, Txid};
11+
use bitcoin::{sign_message, Amount, Block, BlockHash, PublicKey, Txid};
1212

1313
use crate::client_sync::into_json;
1414
use crate::types::v25::*;
@@ -94,6 +94,13 @@ crate::impl_client_v17__signrawtransactionwithkey!();
9494
crate::impl_client_v17__testmempoolaccept!();
9595
crate::impl_client_v18__utxoupdatepsbt!();
9696

97+
// == Util ==
98+
crate::impl_client_v17__createmultisig!();
99+
crate::impl_client_v17__estimatesmartfee!();
100+
crate::impl_client_v17__signmessagewithprivkey!();
101+
crate::impl_client_v17__validateaddress!();
102+
crate::impl_client_v17__verifymessage!();
103+
97104
// == Wallet ==
98105
crate::impl_client_v17__addmultisigaddress!();
99106
crate::impl_client_v17__bumpfee!();

0 commit comments

Comments
 (0)