Skip to content

Commit 9e82412

Browse files
authored
Merge pull request rust-bitcoin#79 from tnull/2025-03-expose-get-block-count
Expose remaining `v17` `blockchain` APIs for `v19`+
2 parents d34aea4 + 2efcb9e commit 9e82412

File tree

29 files changed

+1016
-157
lines changed

29 files changed

+1016
-157
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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 `== Blockchain ==` section of the
6+
//! API docs of Bitcoin Core `v0.19`.
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 `getmempoolancestors`
13+
#[macro_export]
14+
macro_rules! impl_client_v19__getmempoolancestors {
15+
() => {
16+
impl Client {
17+
pub fn get_mempool_ancestors(&self, txid: Txid) -> Result<GetMempoolAncestors> {
18+
// Equivalent to self.call("getmempoolancestors", &[into_json(txid)?, into_json(false)?])
19+
self.call("getmempoolancestors", &[into_json(txid)?])
20+
}
21+
22+
pub fn get_mempool_ancestors_verbose(
23+
&self,
24+
txid: Txid,
25+
) -> Result<GetMempoolAncestorsVerbose> {
26+
self.call("getmempoolancestors", &[into_json(txid)?, into_json(true)?])
27+
}
28+
}
29+
};
30+
}
31+
32+
/// Implements Bitcoin Core JSON-RPC API method `getmempooldescendants`
33+
#[macro_export]
34+
macro_rules! impl_client_v19__getmempooldescendants {
35+
() => {
36+
impl Client {
37+
pub fn get_mempool_descendants(&self, txid: Txid) -> Result<GetMempoolDescendants> {
38+
// Equivalent to self.call("getmempooldescendants", &[into_json(txid)?, into_json(false)?])
39+
self.call("getmempooldescendants", &[into_json(txid)?])
40+
}
41+
42+
pub fn get_mempool_descendants_verbose(
43+
&self,
44+
txid: Txid,
45+
) -> Result<GetMempoolDescendantsVerbose> {
46+
self.call("getmempooldescendants", &[into_json(txid)?, into_json(true)?])
47+
}
48+
}
49+
};
50+
}
51+
52+
/// Implements Bitcoin Core JSON-RPC API method `getmempoolentry`
53+
#[macro_export]
54+
macro_rules! impl_client_v19__getmempoolentry {
55+
() => {
56+
impl Client {
57+
pub fn get_mempool_entry(&self, txid: Txid) -> Result<GetMempoolEntry> {
58+
self.call("getmempoolentry", &[into_json(txid)?])
59+
}
60+
}
61+
};
62+
}

client/src/client_sync/v19/mod.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
//!
55
//! We ignore option arguments unless they effect the shape of the returned JSON data.
66
7-
mod wallet;
7+
pub mod blockchain;
8+
pub mod wallet;
89

910
use bitcoin::address::{Address, NetworkChecked};
1011
use bitcoin::{Amount, Block, BlockHash, Txid};
@@ -15,10 +16,25 @@ use crate::types::v19::*;
1516
crate::define_jsonrpc_minreq_client!("v19");
1617

1718
// == Blockchain ==
18-
crate::impl_client_v17__getblockchaininfo!();
1919
crate::impl_client_v17__getbestblockhash!();
2020
crate::impl_client_v17__getblock!();
21+
crate::impl_client_v17__getblockchaininfo!();
22+
crate::impl_client_v17__getblockcount!();
23+
crate::impl_client_v17__getblockhash!();
24+
crate::impl_client_v17__getblockheader!();
25+
crate::impl_client_v17__getblockstats!();
26+
crate::impl_client_v17__getchaintips!();
27+
crate::impl_client_v17__getchaintxstats!();
28+
crate::impl_client_v17__getdifficulty!();
29+
crate::impl_client_v19__getmempoolancestors!();
30+
crate::impl_client_v19__getmempooldescendants!();
31+
crate::impl_client_v19__getmempoolentry!();
32+
crate::impl_client_v17__getmempoolinfo!();
33+
crate::impl_client_v17__getrawmempool!();
2134
crate::impl_client_v17__gettxout!();
35+
crate::impl_client_v17__gettxoutproof!();
36+
crate::impl_client_v17__gettxoutsetinfo!();
37+
crate::impl_client_v17__verifytxoutproof!();
2238

2339
// == Control ==
2440
crate::impl_client_v17__stop!();

client/src/client_sync/v20.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,25 @@ pub use crate::client_sync::v17::AddressType;
1616
crate::define_jsonrpc_minreq_client!("v20");
1717

1818
// == Blockchain ==
19-
crate::impl_client_v17__getblockchaininfo!();
2019
crate::impl_client_v17__getbestblockhash!();
2120
crate::impl_client_v17__getblock!();
21+
crate::impl_client_v17__getblockchaininfo!();
22+
crate::impl_client_v17__getblockcount!();
23+
crate::impl_client_v17__getblockhash!();
24+
crate::impl_client_v17__getblockheader!();
25+
crate::impl_client_v17__getblockstats!();
26+
crate::impl_client_v17__getchaintips!();
27+
crate::impl_client_v17__getchaintxstats!();
28+
crate::impl_client_v17__getdifficulty!();
29+
crate::impl_client_v19__getmempoolancestors!();
30+
crate::impl_client_v19__getmempooldescendants!();
31+
crate::impl_client_v19__getmempoolentry!();
32+
crate::impl_client_v17__getmempoolinfo!();
33+
crate::impl_client_v17__getrawmempool!();
2234
crate::impl_client_v17__gettxout!();
35+
crate::impl_client_v17__gettxoutproof!();
36+
crate::impl_client_v17__gettxoutsetinfo!();
37+
crate::impl_client_v17__verifytxoutproof!();
2338

2439
// == Control ==
2540
crate::impl_client_v17__stop!();

client/src/client_sync/v21.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,25 @@ pub use crate::client_sync::v17::AddressType;
1616
crate::define_jsonrpc_minreq_client!("v21");
1717

1818
// == Blockchain ==
19-
crate::impl_client_v17__getblockchaininfo!();
2019
crate::impl_client_v17__getbestblockhash!();
2120
crate::impl_client_v17__getblock!();
21+
crate::impl_client_v17__getblockchaininfo!();
22+
crate::impl_client_v17__getblockcount!();
23+
crate::impl_client_v17__getblockhash!();
24+
crate::impl_client_v17__getblockheader!();
25+
crate::impl_client_v17__getblockstats!();
26+
crate::impl_client_v17__getchaintips!();
27+
crate::impl_client_v17__getchaintxstats!();
28+
crate::impl_client_v17__getdifficulty!();
29+
crate::impl_client_v19__getmempoolancestors!();
30+
crate::impl_client_v19__getmempooldescendants!();
31+
crate::impl_client_v19__getmempoolentry!();
32+
crate::impl_client_v17__getmempoolinfo!();
33+
crate::impl_client_v17__getrawmempool!();
34+
crate::impl_client_v17__gettxout!();
35+
crate::impl_client_v17__gettxoutproof!();
36+
crate::impl_client_v17__gettxoutsetinfo!();
37+
crate::impl_client_v17__verifytxoutproof!();
2238

2339
// == Control ==
2440
crate::impl_client_v17__stop!();
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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 `== Blockchain ==` section of the
6+
//! API docs of Bitcoin Core `v22`.
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 `gettxout`
13+
#[macro_export]
14+
macro_rules! impl_client_v22__gettxout {
15+
() => {
16+
impl Client {
17+
pub fn get_tx_out(&self, txid: Txid, vout: u64) -> Result<GetTxOut> {
18+
self.call("gettxout", &[into_json(txid)?, into_json(vout)?])
19+
}
20+
}
21+
};
22+
}

client/src/client_sync/v22/mod.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
//!
55
//! We ignore option arguments unless they effect the shape of the returned JSON data.
66
7+
mod blockchain;
78
mod wallet;
89

910
use bitcoin::address::{Address, NetworkChecked};
@@ -15,10 +16,25 @@ use crate::types::v22::*;
1516
crate::define_jsonrpc_minreq_client!("v22");
1617

1718
// == Blockchain ==
18-
crate::impl_client_v17__getblockchaininfo!();
1919
crate::impl_client_v17__getbestblockhash!();
2020
crate::impl_client_v17__getblock!();
21-
crate::impl_client_v17__gettxout!();
21+
crate::impl_client_v17__getblockchaininfo!();
22+
crate::impl_client_v17__getblockcount!();
23+
crate::impl_client_v17__getblockhash!();
24+
crate::impl_client_v17__getblockheader!();
25+
crate::impl_client_v17__getblockstats!();
26+
crate::impl_client_v17__getchaintips!();
27+
crate::impl_client_v17__getchaintxstats!();
28+
crate::impl_client_v17__getdifficulty!();
29+
crate::impl_client_v19__getmempoolancestors!();
30+
crate::impl_client_v19__getmempooldescendants!();
31+
crate::impl_client_v19__getmempoolentry!();
32+
crate::impl_client_v17__getmempoolinfo!();
33+
crate::impl_client_v17__getrawmempool!();
34+
crate::impl_client_v22__gettxout!();
35+
crate::impl_client_v17__gettxoutproof!();
36+
crate::impl_client_v17__gettxoutsetinfo!();
37+
crate::impl_client_v17__verifytxoutproof!();
2238

2339
// == Control ==
2440
crate::impl_client_v17__stop!();

client/src/client_sync/v23.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,25 @@ use crate::types::v23::*;
1414
crate::define_jsonrpc_minreq_client!("v23");
1515

1616
// == Blockchain ==
17-
crate::impl_client_v17__getblockchaininfo!();
1817
crate::impl_client_v17__getbestblockhash!();
1918
crate::impl_client_v17__getblock!();
20-
crate::impl_client_v17__gettxout!();
19+
crate::impl_client_v17__getblockchaininfo!();
20+
crate::impl_client_v17__getblockcount!();
21+
crate::impl_client_v17__getblockhash!();
22+
crate::impl_client_v17__getblockheader!();
23+
crate::impl_client_v17__getblockstats!();
24+
crate::impl_client_v17__getchaintips!();
25+
crate::impl_client_v17__getchaintxstats!();
26+
crate::impl_client_v17__getdifficulty!();
27+
crate::impl_client_v19__getmempoolancestors!();
28+
crate::impl_client_v19__getmempooldescendants!();
29+
crate::impl_client_v19__getmempoolentry!();
30+
crate::impl_client_v17__getmempoolinfo!();
31+
crate::impl_client_v17__getrawmempool!();
32+
crate::impl_client_v22__gettxout!();
33+
crate::impl_client_v17__gettxoutproof!();
34+
crate::impl_client_v17__gettxoutsetinfo!();
35+
crate::impl_client_v17__verifytxoutproof!();
2136

2237
// == Control ==
2338
crate::impl_client_v17__stop!();

client/src/client_sync/v24.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,25 @@ pub use crate::client_sync::v23::AddressType;
1616
crate::define_jsonrpc_minreq_client!("v24");
1717

1818
// == Blockchain ==
19-
crate::impl_client_v17__getblockchaininfo!();
2019
crate::impl_client_v17__getbestblockhash!();
2120
crate::impl_client_v17__getblock!();
22-
crate::impl_client_v17__gettxout!();
21+
crate::impl_client_v17__getblockchaininfo!();
22+
crate::impl_client_v17__getblockcount!();
23+
crate::impl_client_v17__getblockhash!();
24+
crate::impl_client_v17__getblockheader!();
25+
crate::impl_client_v17__getblockstats!();
26+
crate::impl_client_v17__getchaintips!();
27+
crate::impl_client_v17__getchaintxstats!();
28+
crate::impl_client_v17__getdifficulty!();
29+
crate::impl_client_v19__getmempoolancestors!();
30+
crate::impl_client_v19__getmempooldescendants!();
31+
crate::impl_client_v19__getmempoolentry!();
32+
crate::impl_client_v17__getmempoolinfo!();
33+
crate::impl_client_v17__getrawmempool!();
34+
crate::impl_client_v22__gettxout!();
35+
crate::impl_client_v17__gettxoutproof!();
36+
crate::impl_client_v17__gettxoutsetinfo!();
37+
crate::impl_client_v17__verifytxoutproof!();
2338

2439
// == Control ==
2540
crate::impl_client_v17__stop!();

client/src/client_sync/v25.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,25 @@ pub use crate::client_sync::v23::AddressType;
1616
crate::define_jsonrpc_minreq_client!("v25");
1717

1818
// == Blockchain ==
19-
crate::impl_client_v17__getblockchaininfo!();
2019
crate::impl_client_v17__getbestblockhash!();
2120
crate::impl_client_v17__getblock!();
22-
crate::impl_client_v17__gettxout!();
21+
crate::impl_client_v17__getblockchaininfo!();
22+
crate::impl_client_v17__getblockcount!();
23+
crate::impl_client_v17__getblockhash!();
24+
crate::impl_client_v17__getblockheader!();
25+
crate::impl_client_v17__getblockstats!();
26+
crate::impl_client_v17__getchaintips!();
27+
crate::impl_client_v17__getchaintxstats!();
28+
crate::impl_client_v17__getdifficulty!();
29+
crate::impl_client_v19__getmempoolancestors!();
30+
crate::impl_client_v19__getmempooldescendants!();
31+
crate::impl_client_v19__getmempoolentry!();
32+
crate::impl_client_v17__getmempoolinfo!();
33+
crate::impl_client_v17__getrawmempool!();
34+
crate::impl_client_v22__gettxout!();
35+
crate::impl_client_v17__gettxoutproof!();
36+
crate::impl_client_v17__gettxoutsetinfo!();
37+
crate::impl_client_v17__verifytxoutproof!();
2338

2439
// == Control ==
2540
crate::impl_client_v17__stop!();
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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 `== Blockchain ==` section of the
6+
//! API docs of Bitcoin Core `v0.26`.
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 `gettxoutsetinfo`
13+
#[macro_export]
14+
macro_rules! impl_client_v26__gettxoutsetinfo {
15+
() => {
16+
impl Client {
17+
pub fn get_tx_out_set_info(&self) -> Result<GetTxOutSetInfo> {
18+
self.call("gettxoutsetinfo", &[])
19+
}
20+
}
21+
};
22+
}

0 commit comments

Comments
 (0)