From 75f8e9eedbfe31b999813091db48a917d8767bcc Mon Sep 17 00:00:00 2001 From: GideonBature Date: Thu, 10 Jul 2025 07:01:01 +0100 Subject: [PATCH] Implement walletpassphrasechange method and test --- client/src/client_sync/v17/mod.rs | 1 + client/src/client_sync/v17/wallet.rs | 22 ++++++++++++++++++++++ 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 | 11 +++++++++++ 15 files changed, 46 insertions(+) diff --git a/client/src/client_sync/v17/mod.rs b/client/src/client_sync/v17/mod.rs index 4d547d724..717bf7e8c 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 51eecf27c..2f6db442e 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 0a2fd61a7..b5ad837fa 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 40c4e1ce2..153ea3f89 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 75fb86c8b..1e2bd38e9 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 b9841fe42..a4dce4fe3 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 a1d32d5c2..faba37b0e 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 169042672..78c6a95d1 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 4cb01e35e..5bdac03f0 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 2c22c5e3b..27f4260f3 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 a3cc6da5d..d901ac9c2 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 8bf7ba380..a0ba48817 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 f04b8bcfd..4e9bf6b94 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 3953e11f7..60c09071b 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 8c71a0ada..5d4eeb67a 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, &[]);