From 1430723d36f4531132de0abd761e01ebb8c0a566 Mon Sep 17 00:00:00 2001 From: GideonBature Date: Tue, 24 Jun 2025 13:45:23 +0100 Subject: [PATCH] Implement importpubkey method and test --- client/src/client_sync/v17/mod.rs | 1 + client/src/client_sync/v17/wallet.rs | 16 ++++++++++++++++ client/src/client_sync/v18/mod.rs | 1 + client/src/client_sync/v19/mod.rs | 1 + client/src/client_sync/v20/mod.rs | 1 + client/src/client_sync/v21/mod.rs | 1 + client/src/client_sync/v22/mod.rs | 1 + client/src/client_sync/v23/mod.rs | 1 + client/src/client_sync/v24/mod.rs | 1 + client/src/client_sync/v25/mod.rs | 1 + client/src/client_sync/v26/mod.rs | 1 + client/src/client_sync/v27/mod.rs | 1 + client/src/client_sync/v28/mod.rs | 1 + client/src/client_sync/v29/mod.rs | 1 + integration_test/tests/wallet.rs | 22 +++++++++++++++++++++- 15 files changed, 50 insertions(+), 1 deletion(-) diff --git a/client/src/client_sync/v17/mod.rs b/client/src/client_sync/v17/mod.rs index cde677b7..d17bae2c 100644 --- a/client/src/client_sync/v17/mod.rs +++ b/client/src/client_sync/v17/mod.rs @@ -130,6 +130,7 @@ crate::impl_client_v17__get_wallet_info!(); crate::impl_client_v17__import_address!(); crate::impl_client_v17__import_privkey!(); crate::impl_client_v17__import_pruned_funds!(); +crate::impl_client_v17__import_pubkey!(); crate::impl_client_v17__list_address_groupings!(); crate::impl_client_v17__list_labels!(); crate::impl_client_v17__list_lock_unspent!(); diff --git a/client/src/client_sync/v17/wallet.rs b/client/src/client_sync/v17/wallet.rs index b0e6383d..cb715fec 100644 --- a/client/src/client_sync/v17/wallet.rs +++ b/client/src/client_sync/v17/wallet.rs @@ -337,6 +337,22 @@ macro_rules! impl_client_v17__import_pruned_funds { }; } +/// Implements Bitcoin Core JSON-RPC API method `importpubkey`. +#[macro_export] +macro_rules! impl_client_v17__import_pubkey { + () => { + impl Client { + pub fn import_pubkey(&self, pubkey: &bitcoin::PublicKey) -> Result<()> { + match self.call("importpubkey", &[into_json(pubkey)?]) { + Ok(serde_json::Value::Null) => Ok(()), + Ok(res) => Err(Error::Returned(res.to_string())), + Err(err) => Err(err.into()), + } + } + } + }; +} + /// Implements Bitcoin Core JSON-RPC API method `listaddressgroupings`. #[macro_export] macro_rules! impl_client_v17__list_address_groupings { diff --git a/client/src/client_sync/v18/mod.rs b/client/src/client_sync/v18/mod.rs index 93c93ce3..39a5be97 100644 --- a/client/src/client_sync/v18/mod.rs +++ b/client/src/client_sync/v18/mod.rs @@ -145,6 +145,7 @@ crate::impl_client_v17__get_wallet_info!(); crate::impl_client_v17__import_address!(); crate::impl_client_v17__import_privkey!(); crate::impl_client_v17__import_pruned_funds!(); +crate::impl_client_v17__import_pubkey!(); crate::impl_client_v17__list_address_groupings!(); crate::impl_client_v17__list_labels!(); crate::impl_client_v17__list_lock_unspent!(); diff --git a/client/src/client_sync/v19/mod.rs b/client/src/client_sync/v19/mod.rs index 43da71dc..80859a7c 100644 --- a/client/src/client_sync/v19/mod.rs +++ b/client/src/client_sync/v19/mod.rs @@ -141,6 +141,7 @@ crate::impl_client_v17__get_wallet_info!(); crate::impl_client_v17__import_address!(); crate::impl_client_v17__import_privkey!(); crate::impl_client_v17__import_pruned_funds!(); +crate::impl_client_v17__import_pubkey!(); crate::impl_client_v17__list_address_groupings!(); crate::impl_client_v18__list_received_by_label!(); crate::impl_client_v17__list_labels!(); diff --git a/client/src/client_sync/v20/mod.rs b/client/src/client_sync/v20/mod.rs index d311378e..3cf59879 100644 --- a/client/src/client_sync/v20/mod.rs +++ b/client/src/client_sync/v20/mod.rs @@ -138,6 +138,7 @@ crate::impl_client_v17__get_wallet_info!(); crate::impl_client_v17__import_address!(); crate::impl_client_v17__import_privkey!(); crate::impl_client_v17__import_pruned_funds!(); +crate::impl_client_v17__import_pubkey!(); crate::impl_client_v17__list_address_groupings!(); crate::impl_client_v17__list_labels!(); crate::impl_client_v18__list_received_by_label!(); diff --git a/client/src/client_sync/v21/mod.rs b/client/src/client_sync/v21/mod.rs index 0675c946..23af0098 100644 --- a/client/src/client_sync/v21/mod.rs +++ b/client/src/client_sync/v21/mod.rs @@ -140,6 +140,7 @@ crate::impl_client_v17__get_wallet_info!(); crate::impl_client_v17__import_address!(); crate::impl_client_v17__import_privkey!(); crate::impl_client_v17__import_pruned_funds!(); +crate::impl_client_v17__import_pubkey!(); crate::impl_client_v17__list_address_groupings!(); crate::impl_client_v17__list_labels!(); crate::impl_client_v18__list_received_by_label!(); diff --git a/client/src/client_sync/v22/mod.rs b/client/src/client_sync/v22/mod.rs index c011afa6..960b3f7a 100644 --- a/client/src/client_sync/v22/mod.rs +++ b/client/src/client_sync/v22/mod.rs @@ -140,6 +140,7 @@ crate::impl_client_v17__get_wallet_info!(); crate::impl_client_v17__import_address!(); crate::impl_client_v17__import_privkey!(); crate::impl_client_v17__import_pruned_funds!(); +crate::impl_client_v17__import_pubkey!(); crate::impl_client_v17__list_address_groupings!(); crate::impl_client_v18__list_received_by_label!(); crate::impl_client_v17__list_labels!(); diff --git a/client/src/client_sync/v23/mod.rs b/client/src/client_sync/v23/mod.rs index f2699d04..800bf419 100644 --- a/client/src/client_sync/v23/mod.rs +++ b/client/src/client_sync/v23/mod.rs @@ -142,6 +142,7 @@ crate::impl_client_v17__get_wallet_info!(); crate::impl_client_v17__import_address!(); crate::impl_client_v17__import_privkey!(); crate::impl_client_v17__import_pruned_funds!(); +crate::impl_client_v17__import_pubkey!(); crate::impl_client_v17__list_address_groupings!(); crate::impl_client_v18__list_received_by_label!(); crate::impl_client_v17__list_labels!(); diff --git a/client/src/client_sync/v24/mod.rs b/client/src/client_sync/v24/mod.rs index 389bf504..6459ea89 100644 --- a/client/src/client_sync/v24/mod.rs +++ b/client/src/client_sync/v24/mod.rs @@ -139,6 +139,7 @@ crate::impl_client_v17__get_wallet_info!(); crate::impl_client_v17__import_address!(); crate::impl_client_v17__import_privkey!(); crate::impl_client_v17__import_pruned_funds!(); +crate::impl_client_v17__import_pubkey!(); crate::impl_client_v17__list_address_groupings!(); crate::impl_client_v18__list_received_by_label!(); crate::impl_client_v17__list_labels!(); diff --git a/client/src/client_sync/v25/mod.rs b/client/src/client_sync/v25/mod.rs index 103b31e1..15625fb7 100644 --- a/client/src/client_sync/v25/mod.rs +++ b/client/src/client_sync/v25/mod.rs @@ -139,6 +139,7 @@ crate::impl_client_v17__get_wallet_info!(); crate::impl_client_v17__import_address!(); crate::impl_client_v17__import_privkey!(); crate::impl_client_v17__import_pruned_funds!(); +crate::impl_client_v17__import_pubkey!(); crate::impl_client_v17__list_address_groupings!(); crate::impl_client_v18__list_received_by_label!(); crate::impl_client_v17__list_labels!(); diff --git a/client/src/client_sync/v26/mod.rs b/client/src/client_sync/v26/mod.rs index 72c24b95..c9b29930 100644 --- a/client/src/client_sync/v26/mod.rs +++ b/client/src/client_sync/v26/mod.rs @@ -145,6 +145,7 @@ crate::impl_client_v17__get_wallet_info!(); crate::impl_client_v17__import_address!(); crate::impl_client_v17__import_privkey!(); crate::impl_client_v17__import_pruned_funds!(); +crate::impl_client_v17__import_pubkey!(); crate::impl_client_v17__list_address_groupings!(); crate::impl_client_v17__list_labels!(); crate::impl_client_v18__list_received_by_label!(); diff --git a/client/src/client_sync/v27/mod.rs b/client/src/client_sync/v27/mod.rs index a04e416b..e84f7d7c 100644 --- a/client/src/client_sync/v27/mod.rs +++ b/client/src/client_sync/v27/mod.rs @@ -141,6 +141,7 @@ crate::impl_client_v17__get_wallet_info!(); crate::impl_client_v17__import_address!(); crate::impl_client_v17__import_privkey!(); crate::impl_client_v17__import_pruned_funds!(); +crate::impl_client_v17__import_pubkey!(); crate::impl_client_v17__list_address_groupings!(); crate::impl_client_v18__list_received_by_label!(); crate::impl_client_v17__list_labels!(); diff --git a/client/src/client_sync/v28/mod.rs b/client/src/client_sync/v28/mod.rs index a7d6fab7..b0466149 100644 --- a/client/src/client_sync/v28/mod.rs +++ b/client/src/client_sync/v28/mod.rs @@ -143,6 +143,7 @@ crate::impl_client_v17__get_wallet_info!(); crate::impl_client_v17__import_address!(); crate::impl_client_v17__import_privkey!(); crate::impl_client_v17__import_pruned_funds!(); +crate::impl_client_v17__import_pubkey!(); crate::impl_client_v17__list_address_groupings!(); crate::impl_client_v18__list_received_by_label!(); crate::impl_client_v17__list_labels!(); diff --git a/client/src/client_sync/v29/mod.rs b/client/src/client_sync/v29/mod.rs index 90f5a87e..ded13cf7 100644 --- a/client/src/client_sync/v29/mod.rs +++ b/client/src/client_sync/v29/mod.rs @@ -143,6 +143,7 @@ crate::impl_client_v17__get_wallet_info!(); crate::impl_client_v17__import_address!(); crate::impl_client_v17__import_privkey!(); crate::impl_client_v17__import_pruned_funds!(); +crate::impl_client_v17__import_pubkey!(); crate::impl_client_v17__list_address_groupings!(); crate::impl_client_v18__list_received_by_label!(); crate::impl_client_v17__list_labels!(); diff --git a/integration_test/tests/wallet.rs b/integration_test/tests/wallet.rs index bca87d5e..bc6b6066 100644 --- a/integration_test/tests/wallet.rs +++ b/integration_test/tests/wallet.rs @@ -6,7 +6,7 @@ #[cfg(feature = "TODO")] use bitcoin::address::{Address, NetworkChecked}; -use bitcoin::{Amount, PrivateKey}; +use bitcoin::{Amount, PrivateKey, PublicKey}; use integration_test::{Node, NodeExt as _, Wallet}; use node::{mtype,AddressType}; use node::vtype::*; // All the version specific types. @@ -362,6 +362,26 @@ fn wallet__import_privkey() { let _: () = node.client.import_privkey(&privkey).expect("importprivkey"); } +#[test] +fn wallet__import_pubkey() { + let node = match () { + #[cfg(feature = "v22_and_below")] + () => Node::with_wallet(Wallet::Default, &[]), + #[cfg(not(feature = "v22_and_below"))] + () => { + let node = Node::with_wallet(Wallet::None, &["-deprecatedrpc=create_bdb"]); + node.client.create_legacy_wallet("wallet_name").expect("createlegacywallet"); + node + } + }; + + let pubkey = "02ff12471208c14bd580709cb2358d98975247d8765f92bc25eab3b2763ed605f8" + .parse::() + .unwrap(); + + let _: () = node.client.import_pubkey(&pubkey).expect("importpubkey"); +} + #[test] fn wallet__list_unspent__modelled() { let node = match () {