diff --git a/client/src/client_sync/v17/mod.rs b/client/src/client_sync/v17/mod.rs index 7bebbfac..65a5f9ce 100644 --- a/client/src/client_sync/v17/mod.rs +++ b/client/src/client_sync/v17/mod.rs @@ -123,6 +123,7 @@ crate::impl_client_v17__get_received_by_address!(); crate::impl_client_v17__get_transaction!(); crate::impl_client_v17__get_unconfirmed_balance!(); crate::impl_client_v17__get_wallet_info!(); +crate::impl_client_v17__import_privkey!(); 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 45e54314..1185d737 100644 --- a/client/src/client_sync/v17/wallet.rs +++ b/client/src/client_sync/v17/wallet.rs @@ -243,6 +243,22 @@ macro_rules! impl_client_v17__get_wallet_info { }; } +/// Implements Bitcoin Core JSON-RPC API method `importprivkey`. +#[macro_export] +macro_rules! impl_client_v17__import_privkey { + () => { + impl Client { + pub fn import_privkey(&self, privkey: &bitcoin::PrivateKey) -> Result<()> { + match self.call("importprivkey", &[into_json(privkey)?]) { + 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 92ef7711..9fd8a70b 100644 --- a/client/src/client_sync/v18/mod.rs +++ b/client/src/client_sync/v18/mod.rs @@ -134,6 +134,7 @@ crate::impl_client_v17__get_received_by_address!(); crate::impl_client_v17__get_transaction!(); crate::impl_client_v17__get_unconfirmed_balance!(); crate::impl_client_v17__get_wallet_info!(); +crate::impl_client_v17__import_privkey!(); 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 f4438222..1ec488bf 100644 --- a/client/src/client_sync/v19/mod.rs +++ b/client/src/client_sync/v19/mod.rs @@ -132,6 +132,7 @@ crate::impl_client_v17__get_received_by_address!(); crate::impl_client_v17__get_transaction!(); crate::impl_client_v17__get_unconfirmed_balance!(); crate::impl_client_v17__get_wallet_info!(); +crate::impl_client_v17__import_privkey!(); 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/v20/mod.rs b/client/src/client_sync/v20/mod.rs index 072991f9..9089e41c 100644 --- a/client/src/client_sync/v20/mod.rs +++ b/client/src/client_sync/v20/mod.rs @@ -129,6 +129,7 @@ crate::impl_client_v17__get_received_by_address!(); crate::impl_client_v17__get_transaction!(); crate::impl_client_v17__get_unconfirmed_balance!(); crate::impl_client_v17__get_wallet_info!(); +crate::impl_client_v17__import_privkey!(); 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/v21/mod.rs b/client/src/client_sync/v21/mod.rs index 1036756d..f1a9de2a 100644 --- a/client/src/client_sync/v21/mod.rs +++ b/client/src/client_sync/v21/mod.rs @@ -131,6 +131,7 @@ crate::impl_client_v17__get_received_by_address!(); crate::impl_client_v17__get_transaction!(); crate::impl_client_v17__get_unconfirmed_balance!(); crate::impl_client_v17__get_wallet_info!(); +crate::impl_client_v17__import_privkey!(); 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/v22/mod.rs b/client/src/client_sync/v22/mod.rs index 30f04ed6..fed023de 100644 --- a/client/src/client_sync/v22/mod.rs +++ b/client/src/client_sync/v22/mod.rs @@ -131,6 +131,7 @@ crate::impl_client_v17__get_received_by_address!(); crate::impl_client_v17__get_transaction!(); crate::impl_client_v17__get_unconfirmed_balance!(); crate::impl_client_v17__get_wallet_info!(); +crate::impl_client_v17__import_privkey!(); 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/v23/mod.rs b/client/src/client_sync/v23/mod.rs index 297e218f..0a800cc2 100644 --- a/client/src/client_sync/v23/mod.rs +++ b/client/src/client_sync/v23/mod.rs @@ -133,6 +133,7 @@ crate::impl_client_v17__get_received_by_address!(); crate::impl_client_v17__get_transaction!(); crate::impl_client_v17__get_unconfirmed_balance!(); crate::impl_client_v17__get_wallet_info!(); +crate::impl_client_v17__import_privkey!(); 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/v24/mod.rs b/client/src/client_sync/v24/mod.rs index b48428e3..1fb626e7 100644 --- a/client/src/client_sync/v24/mod.rs +++ b/client/src/client_sync/v24/mod.rs @@ -130,6 +130,7 @@ crate::impl_client_v17__get_received_by_address!(); crate::impl_client_v17__get_transaction!(); crate::impl_client_v17__get_unconfirmed_balance!(); crate::impl_client_v17__get_wallet_info!(); +crate::impl_client_v17__import_privkey!(); 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/v25/mod.rs b/client/src/client_sync/v25/mod.rs index 7825ec24..135c3362 100644 --- a/client/src/client_sync/v25/mod.rs +++ b/client/src/client_sync/v25/mod.rs @@ -130,6 +130,7 @@ crate::impl_client_v17__get_received_by_address!(); crate::impl_client_v17__get_transaction!(); crate::impl_client_v17__get_unconfirmed_balance!(); crate::impl_client_v17__get_wallet_info!(); +crate::impl_client_v17__import_privkey!(); 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/v26/mod.rs b/client/src/client_sync/v26/mod.rs index 6dbed209..a672a72e 100644 --- a/client/src/client_sync/v26/mod.rs +++ b/client/src/client_sync/v26/mod.rs @@ -136,6 +136,7 @@ crate::impl_client_v17__get_received_by_address!(); crate::impl_client_v17__get_transaction!(); crate::impl_client_v17__get_unconfirmed_balance!(); crate::impl_client_v17__get_wallet_info!(); +crate::impl_client_v17__import_privkey!(); 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/v27/mod.rs b/client/src/client_sync/v27/mod.rs index 54674779..c7e00c49 100644 --- a/client/src/client_sync/v27/mod.rs +++ b/client/src/client_sync/v27/mod.rs @@ -132,6 +132,7 @@ crate::impl_client_v17__get_received_by_address!(); crate::impl_client_v17__get_transaction!(); crate::impl_client_v17__get_unconfirmed_balance!(); crate::impl_client_v17__get_wallet_info!(); +crate::impl_client_v17__import_privkey!(); 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/v28/mod.rs b/client/src/client_sync/v28/mod.rs index 7e92ad9c..2f38a783 100644 --- a/client/src/client_sync/v28/mod.rs +++ b/client/src/client_sync/v28/mod.rs @@ -134,6 +134,7 @@ crate::impl_client_v17__get_received_by_address!(); crate::impl_client_v17__get_transaction!(); crate::impl_client_v17__get_unconfirmed_balance!(); crate::impl_client_v17__get_wallet_info!(); +crate::impl_client_v17__import_privkey!(); 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/v29/mod.rs b/client/src/client_sync/v29/mod.rs index 0b3e8df4..ebdeafa7 100644 --- a/client/src/client_sync/v29/mod.rs +++ b/client/src/client_sync/v29/mod.rs @@ -134,6 +134,7 @@ crate::impl_client_v17__get_received_by_address!(); crate::impl_client_v17__get_transaction!(); crate::impl_client_v17__get_unconfirmed_balance!(); crate::impl_client_v17__get_wallet_info!(); +crate::impl_client_v17__import_privkey!(); crate::impl_client_v17__list_address_groupings!(); crate::impl_client_v17__list_labels!(); crate::impl_client_v17__list_lock_unspent!(); diff --git a/integration_test/tests/wallet.rs b/integration_test/tests/wallet.rs index 64880451..d7e7057a 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; +use bitcoin::{Amount, PrivateKey}; use integration_test::{Node, NodeExt as _, Wallet}; use node::{mtype,AddressType}; use node::vtype::*; // All the version specific types. @@ -240,6 +240,25 @@ fn wallet__get_transaction__modelled() { model.unwrap(); } +#[test] +fn wallet__import_privkey() { + 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 privkey = + PrivateKey::from_wif("cVt4o7BGAig1UXywgGSmARhxMdzP5qvQsxKkSsc1XEkw3tDTQFpy").unwrap(); + + node.client.import_privkey(&privkey).expect("importprivkey"); +} + #[test] fn wallet__list_unspent__modelled() { let node = match () {