diff --git a/client/src/client_sync/v17/mod.rs b/client/src/client_sync/v17/mod.rs index 7670c141..cde677b7 100644 --- a/client/src/client_sync/v17/mod.rs +++ b/client/src/client_sync/v17/mod.rs @@ -129,6 +129,7 @@ crate::impl_client_v17__get_unconfirmed_balance!(); 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__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 84afae0b..b0e6383d 100644 --- a/client/src/client_sync/v17/wallet.rs +++ b/client/src/client_sync/v17/wallet.rs @@ -314,6 +314,29 @@ macro_rules! impl_client_v17__import_privkey { }; } +/// Implements Bitcoin Core JSON-RPC API method `importprunedfunds`. +#[macro_export] +macro_rules! impl_client_v17__import_pruned_funds { + () => { + impl Client { + pub fn import_pruned_funds( + &self, + raw_transaction: &str, + tx_out_proof: &str, + ) -> Result<()> { + match self.call( + "importprunedfunds", + &[into_json(raw_transaction)?, into_json(tx_out_proof)?], + ) { + 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 f1ef6388..93c93ce3 100644 --- a/client/src/client_sync/v18/mod.rs +++ b/client/src/client_sync/v18/mod.rs @@ -144,6 +144,7 @@ crate::impl_client_v17__get_unconfirmed_balance!(); 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__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 8d7453eb..43da71dc 100644 --- a/client/src/client_sync/v19/mod.rs +++ b/client/src/client_sync/v19/mod.rs @@ -140,6 +140,7 @@ crate::impl_client_v17__get_unconfirmed_balance!(); 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__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 82aad478..d311378e 100644 --- a/client/src/client_sync/v20/mod.rs +++ b/client/src/client_sync/v20/mod.rs @@ -137,6 +137,7 @@ crate::impl_client_v17__get_unconfirmed_balance!(); 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__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 32330cb7..0675c946 100644 --- a/client/src/client_sync/v21/mod.rs +++ b/client/src/client_sync/v21/mod.rs @@ -139,6 +139,7 @@ crate::impl_client_v17__get_unconfirmed_balance!(); 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__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 bd11d844..c011afa6 100644 --- a/client/src/client_sync/v22/mod.rs +++ b/client/src/client_sync/v22/mod.rs @@ -139,6 +139,7 @@ crate::impl_client_v17__get_unconfirmed_balance!(); 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__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 a448b29f..f2699d04 100644 --- a/client/src/client_sync/v23/mod.rs +++ b/client/src/client_sync/v23/mod.rs @@ -141,6 +141,7 @@ crate::impl_client_v17__get_unconfirmed_balance!(); 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__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 600042fd..389bf504 100644 --- a/client/src/client_sync/v24/mod.rs +++ b/client/src/client_sync/v24/mod.rs @@ -138,6 +138,7 @@ crate::impl_client_v17__get_unconfirmed_balance!(); 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__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 65cfa5e2..103b31e1 100644 --- a/client/src/client_sync/v25/mod.rs +++ b/client/src/client_sync/v25/mod.rs @@ -138,6 +138,7 @@ crate::impl_client_v17__get_unconfirmed_balance!(); 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__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 126a6474..72c24b95 100644 --- a/client/src/client_sync/v26/mod.rs +++ b/client/src/client_sync/v26/mod.rs @@ -144,6 +144,7 @@ crate::impl_client_v17__get_unconfirmed_balance!(); 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__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 b10de3e3..a04e416b 100644 --- a/client/src/client_sync/v27/mod.rs +++ b/client/src/client_sync/v27/mod.rs @@ -140,6 +140,7 @@ crate::impl_client_v17__get_unconfirmed_balance!(); 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__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 e4c340ac..a7d6fab7 100644 --- a/client/src/client_sync/v28/mod.rs +++ b/client/src/client_sync/v28/mod.rs @@ -142,6 +142,7 @@ crate::impl_client_v17__get_unconfirmed_balance!(); 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__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 a82d77e7..90f5a87e 100644 --- a/client/src/client_sync/v29/mod.rs +++ b/client/src/client_sync/v29/mod.rs @@ -142,6 +142,7 @@ crate::impl_client_v17__get_unconfirmed_balance!(); 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__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 e4861bd3..bb372813 100644 --- a/integration_test/tests/wallet.rs +++ b/integration_test/tests/wallet.rs @@ -310,6 +310,20 @@ fn wallet__import_address() { let _: () = node.client.import_address(&addr).expect("importaddress"); } +#[test] +fn wallet__import_pruned_funds() { + let node = Node::with_wallet(Wallet::Default, &["-txindex"]); + node.fund_wallet(); + + let (_, tx) = node.create_mined_transaction(); + let txid = tx.compute_txid(); + + let raw_tx = node.client.get_raw_transaction(txid).expect("getrawtransaction"); + let tx_out_proof = node.client.get_tx_out_proof(&[txid]).expect("gettxoutproof"); + + let _: () = node.client.import_pruned_funds(&raw_tx.0, &tx_out_proof).expect("importprunedfunds"); +} + #[cfg(not(feature = "v17"))] #[test] fn wallet__list_received_by_label__modelled() {