Skip to content

Commit 9daa9b4

Browse files
committed
Add listdescriptors struct and test
Add the struct, client macro, test and reexports. Redefine the struct in v25 for added return field. Change to no_model since there is nothing to model.
1 parent 4fa58a2 commit 9daa9b4

File tree

28 files changed

+134
-23
lines changed

28 files changed

+134
-23
lines changed

client/src/client_sync/v22/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ crate::impl_client_v17__import_pubkey!();
155155
crate::impl_client_v17__import_wallet!();
156156
crate::impl_client_v17__key_pool_refill!();
157157
crate::impl_client_v17__list_address_groupings!();
158+
crate::impl_client_v22__list_descriptors!();
158159
crate::impl_client_v18__list_received_by_label!();
159160
crate::impl_client_v17__list_labels!();
160161
crate::impl_client_v17__list_lock_unspent!();

client/src/client_sync/v22/wallet.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,18 @@
99
//!
1010
//! See or use the `define_jsonrpc_minreq_client!` macro to define a `Client`.
1111
12+
/// Implements Bitcoin Core JSON-RPC API method `listdescriptors`
13+
#[macro_export]
14+
macro_rules! impl_client_v22__list_descriptors {
15+
() => {
16+
impl Client {
17+
pub fn list_descriptors(&self) -> Result<ListDescriptors> {
18+
self.call("listdescriptors", &[])
19+
}
20+
}
21+
};
22+
}
23+
1224
/// Implements Bitcoin Core JSON-RPC API method `loadwallet`
1325
#[macro_export]
1426
macro_rules! impl_client_v22__load_wallet {

client/src/client_sync/v23/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ crate::impl_client_v17__import_pubkey!();
156156
crate::impl_client_v17__import_wallet!();
157157
crate::impl_client_v17__key_pool_refill!();
158158
crate::impl_client_v17__list_address_groupings!();
159+
crate::impl_client_v22__list_descriptors!();
159160
crate::impl_client_v18__list_received_by_label!();
160161
crate::impl_client_v17__list_labels!();
161162
crate::impl_client_v17__list_lock_unspent!();

client/src/client_sync/v24/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ crate::impl_client_v17__import_pubkey!();
153153
crate::impl_client_v17__import_wallet!();
154154
crate::impl_client_v17__key_pool_refill!();
155155
crate::impl_client_v17__list_address_groupings!();
156+
crate::impl_client_v22__list_descriptors!();
156157
crate::impl_client_v18__list_received_by_label!();
157158
crate::impl_client_v17__list_labels!();
158159
crate::impl_client_v17__list_lock_unspent!();

client/src/client_sync/v25/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ crate::impl_client_v17__import_pubkey!();
155155
crate::impl_client_v17__import_wallet!();
156156
crate::impl_client_v17__key_pool_refill!();
157157
crate::impl_client_v17__list_address_groupings!();
158+
crate::impl_client_v22__list_descriptors!();
158159
crate::impl_client_v18__list_received_by_label!();
159160
crate::impl_client_v17__list_labels!();
160161
crate::impl_client_v17__list_lock_unspent!();

client/src/client_sync/v26/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ crate::impl_client_v17__import_pubkey!();
159159
crate::impl_client_v17__import_wallet!();
160160
crate::impl_client_v17__key_pool_refill!();
161161
crate::impl_client_v17__list_address_groupings!();
162+
crate::impl_client_v22__list_descriptors!();
162163
crate::impl_client_v17__list_labels!();
163164
crate::impl_client_v18__list_received_by_label!();
164165
crate::impl_client_v17__list_lock_unspent!();

client/src/client_sync/v27/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ crate::impl_client_v17__import_pubkey!();
155155
crate::impl_client_v17__import_wallet!();
156156
crate::impl_client_v17__key_pool_refill!();
157157
crate::impl_client_v17__list_address_groupings!();
158+
crate::impl_client_v22__list_descriptors!();
158159
crate::impl_client_v18__list_received_by_label!();
159160
crate::impl_client_v17__list_labels!();
160161
crate::impl_client_v17__list_lock_unspent!();

client/src/client_sync/v28/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ crate::impl_client_v17__import_pubkey!();
157157
crate::impl_client_v17__import_wallet!();
158158
crate::impl_client_v17__key_pool_refill!();
159159
crate::impl_client_v17__list_address_groupings!();
160+
crate::impl_client_v22__list_descriptors!();
160161
crate::impl_client_v18__list_received_by_label!();
161162
crate::impl_client_v17__list_labels!();
162163
crate::impl_client_v17__list_lock_unspent!();

client/src/client_sync/v29/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ crate::impl_client_v17__import_pubkey!();
157157
crate::impl_client_v17__import_wallet!();
158158
crate::impl_client_v17__key_pool_refill!();
159159
crate::impl_client_v17__list_address_groupings!();
160+
crate::impl_client_v22__list_descriptors!();
160161
crate::impl_client_v18__list_received_by_label!();
161162
crate::impl_client_v17__list_labels!();
162163
crate::impl_client_v17__list_lock_unspent!();

integration_test/tests/wallet.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,25 @@ fn wallet__import_pubkey() {
495495
let _: () = node.client.import_pubkey(&pubkey).expect("importpubkey");
496496
}
497497

498+
#[test]
499+
#[cfg(not(feature = "v21_and_below"))]
500+
fn wallet__list_descriptors() {
501+
let node = Node::with_wallet(Wallet::None, &[]);
502+
let wallet_name = "desc_wallet";
503+
504+
#[cfg(feature = "v22_and_below")]
505+
node.client.create_wallet_with_descriptors(wallet_name).expect("create descriptor wallet");
506+
507+
// v23 onwards uses descriptor wallets by default.
508+
#[cfg(not(feature = "v22_and_below"))]
509+
node.client.create_wallet(wallet_name).expect("create wallet");
510+
511+
let json: ListDescriptors = node.client.list_descriptors().expect("listdescriptors");
512+
513+
let has_descriptor = json.descriptors.iter().any(|desc_info| desc_info.descriptor.starts_with("wpkh(") || desc_info.descriptor.starts_with("pkh("));
514+
assert!(has_descriptor, "No standard descriptors found in listdescriptors result");
515+
}
516+
498517
#[test]
499518
fn wallet__list_unspent__modelled() {
500519
let node = match () {

0 commit comments

Comments
 (0)