diff --git a/client/src/client_sync/v17/mod.rs b/client/src/client_sync/v17/mod.rs index 4d547d72..717bf7e8 100644 --- a/client/src/client_sync/v17/mod.rs +++ b/client/src/client_sync/v17/mod.rs @@ -156,6 +156,7 @@ crate::impl_client_v17__unload_wallet!(); crate::impl_client_v17__wallet_create_funded_psbt!(); crate::impl_client_v17__wallet_lock!(); crate::impl_client_v17__wallet_passphrase!(); +crate::impl_client_v17__wallet_passphrase_change!(); crate::impl_client_v17__wallet_process_psbt!(); /// Argument to the `Client::get_new_address_with_type` function. diff --git a/client/src/client_sync/v17/wallet.rs b/client/src/client_sync/v17/wallet.rs index 51eecf27..2f6db442 100644 --- a/client/src/client_sync/v17/wallet.rs +++ b/client/src/client_sync/v17/wallet.rs @@ -714,6 +714,28 @@ macro_rules! impl_client_v17__wallet_lock { }; } +/// Implements Bitcoin Core JSON-RPC API method `walletpassphrasechange` +#[macro_export] +macro_rules! impl_client_v17__wallet_passphrase_change { + () => { + impl Client { + pub fn wallet_passphrase_change( + &self, + old_passphrase: &str, + new_passphrase: &str, + ) -> Result<()> { + match self + .call("walletpassphrasechange", &[old_passphrase.into(), new_passphrase.into()]) + { + 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 `walletprocesspsbt`. #[macro_export] macro_rules! impl_client_v17__wallet_process_psbt { diff --git a/client/src/client_sync/v18/mod.rs b/client/src/client_sync/v18/mod.rs index 0a2fd61a..b5ad837f 100644 --- a/client/src/client_sync/v18/mod.rs +++ b/client/src/client_sync/v18/mod.rs @@ -173,4 +173,5 @@ crate::impl_client_v17__unload_wallet!(); crate::impl_client_v17__wallet_create_funded_psbt!(); crate::impl_client_v17__wallet_lock!(); crate::impl_client_v17__wallet_passphrase!(); +crate::impl_client_v17__wallet_passphrase_change!(); crate::impl_client_v17__wallet_process_psbt!(); diff --git a/client/src/client_sync/v19/mod.rs b/client/src/client_sync/v19/mod.rs index 40c4e1ce..153ea3f8 100644 --- a/client/src/client_sync/v19/mod.rs +++ b/client/src/client_sync/v19/mod.rs @@ -170,4 +170,5 @@ crate::impl_client_v17__unload_wallet!(); crate::impl_client_v17__wallet_create_funded_psbt!(); crate::impl_client_v17__wallet_lock!(); crate::impl_client_v17__wallet_passphrase!(); +crate::impl_client_v17__wallet_passphrase_change!(); crate::impl_client_v17__wallet_process_psbt!(); diff --git a/client/src/client_sync/v20/mod.rs b/client/src/client_sync/v20/mod.rs index 75fb86c8..1e2bd38e 100644 --- a/client/src/client_sync/v20/mod.rs +++ b/client/src/client_sync/v20/mod.rs @@ -170,4 +170,5 @@ crate::impl_client_v17__unload_wallet!(); crate::impl_client_v17__wallet_create_funded_psbt!(); crate::impl_client_v17__wallet_lock!(); crate::impl_client_v17__wallet_passphrase!(); +crate::impl_client_v17__wallet_passphrase_change!(); crate::impl_client_v17__wallet_process_psbt!(); diff --git a/client/src/client_sync/v21/mod.rs b/client/src/client_sync/v21/mod.rs index b9841fe4..a4dce4fe 100644 --- a/client/src/client_sync/v21/mod.rs +++ b/client/src/client_sync/v21/mod.rs @@ -180,6 +180,7 @@ crate::impl_client_v21__upgrade_wallet!(); crate::impl_client_v17__wallet_create_funded_psbt!(); crate::impl_client_v17__wallet_lock!(); crate::impl_client_v17__wallet_passphrase!(); +crate::impl_client_v17__wallet_passphrase_change!(); crate::impl_client_v17__wallet_process_psbt!(); /// Request object for the `importdescriptors` method. diff --git a/client/src/client_sync/v22/mod.rs b/client/src/client_sync/v22/mod.rs index a1d32d5c..faba37b0 100644 --- a/client/src/client_sync/v22/mod.rs +++ b/client/src/client_sync/v22/mod.rs @@ -178,4 +178,5 @@ crate::impl_client_v21__upgrade_wallet!(); crate::impl_client_v17__wallet_create_funded_psbt!(); crate::impl_client_v17__wallet_lock!(); crate::impl_client_v17__wallet_passphrase!(); +crate::impl_client_v17__wallet_passphrase_change!(); crate::impl_client_v17__wallet_process_psbt!(); diff --git a/client/src/client_sync/v23/mod.rs b/client/src/client_sync/v23/mod.rs index 16904267..78c6a95d 100644 --- a/client/src/client_sync/v23/mod.rs +++ b/client/src/client_sync/v23/mod.rs @@ -180,6 +180,7 @@ crate::impl_client_v21__upgrade_wallet!(); crate::impl_client_v17__wallet_create_funded_psbt!(); crate::impl_client_v17__wallet_lock!(); crate::impl_client_v17__wallet_passphrase!(); +crate::impl_client_v17__wallet_passphrase_change!(); crate::impl_client_v17__wallet_process_psbt!(); /// Argument to the `Client::get_new_address_with_type` function. diff --git a/client/src/client_sync/v24/mod.rs b/client/src/client_sync/v24/mod.rs index 4cb01e35..5bdac03f 100644 --- a/client/src/client_sync/v24/mod.rs +++ b/client/src/client_sync/v24/mod.rs @@ -177,4 +177,5 @@ crate::impl_client_v21__upgrade_wallet!(); crate::impl_client_v17__wallet_create_funded_psbt!(); crate::impl_client_v17__wallet_lock!(); crate::impl_client_v17__wallet_passphrase!(); +crate::impl_client_v17__wallet_passphrase_change!(); crate::impl_client_v17__wallet_process_psbt!(); diff --git a/client/src/client_sync/v25/mod.rs b/client/src/client_sync/v25/mod.rs index 2c22c5e3..27f4260f 100644 --- a/client/src/client_sync/v25/mod.rs +++ b/client/src/client_sync/v25/mod.rs @@ -179,4 +179,5 @@ crate::impl_client_v21__upgrade_wallet!(); crate::impl_client_v17__wallet_create_funded_psbt!(); crate::impl_client_v17__wallet_lock!(); crate::impl_client_v17__wallet_passphrase!(); +crate::impl_client_v17__wallet_passphrase_change!(); crate::impl_client_v17__wallet_process_psbt!(); diff --git a/client/src/client_sync/v26/mod.rs b/client/src/client_sync/v26/mod.rs index a3cc6da5..d901ac9c 100644 --- a/client/src/client_sync/v26/mod.rs +++ b/client/src/client_sync/v26/mod.rs @@ -183,4 +183,5 @@ crate::impl_client_v21__upgrade_wallet!(); crate::impl_client_v17__wallet_create_funded_psbt!(); crate::impl_client_v17__wallet_lock!(); crate::impl_client_v17__wallet_passphrase!(); +crate::impl_client_v17__wallet_passphrase_change!(); crate::impl_client_v17__wallet_process_psbt!(); diff --git a/client/src/client_sync/v27/mod.rs b/client/src/client_sync/v27/mod.rs index 8bf7ba38..a0ba4881 100644 --- a/client/src/client_sync/v27/mod.rs +++ b/client/src/client_sync/v27/mod.rs @@ -179,4 +179,5 @@ crate::impl_client_v21__upgrade_wallet!(); crate::impl_client_v17__wallet_create_funded_psbt!(); crate::impl_client_v17__wallet_lock!(); crate::impl_client_v17__wallet_passphrase!(); +crate::impl_client_v17__wallet_passphrase_change!(); crate::impl_client_v17__wallet_process_psbt!(); diff --git a/client/src/client_sync/v28/mod.rs b/client/src/client_sync/v28/mod.rs index f04b8bcf..4e9bf6b9 100644 --- a/client/src/client_sync/v28/mod.rs +++ b/client/src/client_sync/v28/mod.rs @@ -181,4 +181,5 @@ crate::impl_client_v21__upgrade_wallet!(); crate::impl_client_v17__wallet_create_funded_psbt!(); crate::impl_client_v17__wallet_lock!(); crate::impl_client_v17__wallet_passphrase!(); +crate::impl_client_v17__wallet_passphrase_change!(); crate::impl_client_v17__wallet_process_psbt!(); diff --git a/client/src/client_sync/v29/mod.rs b/client/src/client_sync/v29/mod.rs index 3953e11f..60c09071 100644 --- a/client/src/client_sync/v29/mod.rs +++ b/client/src/client_sync/v29/mod.rs @@ -181,6 +181,7 @@ crate::impl_client_v21__upgrade_wallet!(); crate::impl_client_v17__wallet_create_funded_psbt!(); crate::impl_client_v17__wallet_lock!(); crate::impl_client_v17__wallet_passphrase!(); +crate::impl_client_v17__wallet_passphrase_change!(); crate::impl_client_v17__wallet_process_psbt!(); /// Arg for the `getblocktemplate` method. (v29+). diff --git a/integration_test/tests/wallet.rs b/integration_test/tests/wallet.rs index 8c71a0ad..5d4eeb67 100644 --- a/integration_test/tests/wallet.rs +++ b/integration_test/tests/wallet.rs @@ -689,6 +689,17 @@ fn wallet__wallet_passphrase() { let _: () = node.client.wallet_passphrase("passphrase", timeout).expect("walletpassphrase"); } +#[test] +fn wallet__wallet_passphrase_change() { + let node = Node::with_wallet(Wallet::Default, &[]); + + node.client.create_wallet("wallet name").expect("createwallet"); + node.client.encrypt_wallet("old passphrase").expect("encryptwallet"); + + let _: () = node.client.wallet_passphrase_change("old passphrase", "new passphrase") + .expect("walletpassphrasechange"); +} + fn create_load_unload_wallet() { let node = Node::with_wallet(Wallet::None, &[]);