Skip to content

Commit 6afae45

Browse files
committed
Merge #163: Implement all v17 util functions
7a21f08 Fix types table format (Jamil Lambert, PhD) e23708e Add v17 util methods (Jamil Lambert, PhD) Pull request description: Add all of the `Util` methods from core v17, macros for implementation, required models and tests. Update the table in types updated for v17. Run cargo fmt to correctly order the new method names in the lists. ACKs for top commit: tcharding: ACK 7a21f08 Tree-SHA512: 7080fbe5e556b0e1a2d38127d979d0a6f0dbe19ab136e59f3d95701d974be0992cf29b900c3787f8c8412ecf911c92e5d17d2422d22855c50baaecea9e13d34b
2 parents 736c26b + 7a21f08 commit 6afae45

File tree

33 files changed

+824
-193
lines changed

33 files changed

+824
-193
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!();

client/src/client_sync/v26/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::v26::*;
@@ -100,6 +100,13 @@ crate::impl_client_v26__submitpackage!();
100100
crate::impl_client_v17__testmempoolaccept!();
101101
crate::impl_client_v18__utxoupdatepsbt!();
102102

103+
// == Util ==
104+
crate::impl_client_v17__createmultisig!();
105+
crate::impl_client_v17__estimatesmartfee!();
106+
crate::impl_client_v17__signmessagewithprivkey!();
107+
crate::impl_client_v17__validateaddress!();
108+
crate::impl_client_v17__verifymessage!();
109+
103110
// == Wallet ==
104111
crate::impl_client_v17__addmultisigaddress!();
105112
crate::impl_client_v17__bumpfee!();

client/src/client_sync/v27.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::v27::*;
@@ -96,6 +96,13 @@ crate::impl_client_v26__submitpackage!();
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/v28/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::v28::*;
@@ -98,6 +98,13 @@ crate::impl_client_v28__submitpackage!();
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!();

0 commit comments

Comments
 (0)