diff --git a/doc/release-notes-16528.md b/doc/release-notes-16528.md index 84af219e90..bc67977f86 100644 --- a/doc/release-notes-16528.md +++ b/doc/release-notes-16528.md @@ -35,6 +35,7 @@ Descriptor Wallet should be created. Without those options being set, a Legacy Wallet will be created instead. + #### `IsMine` Semantics `IsMine` refers to the function used to determine whether a script belongs to the wallet. @@ -117,3 +118,4 @@ descriptors with private keys for now as explained earlier. ## RPC changes - `createwallet` has changed list of arguments: `createwallet "wallet_name" ( disable_private_keys blank "passphrase" avoid_reuse descriptors load_on_startup )` `load_on_startup` used to be an argument 5 but now has a number 6. + - `createwallet` requires specifying the `load_on_startup` flag when creating descriptor wallets due to breaking changes in v21. diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 2a7b557b31..f9b29f28e5 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -3032,6 +3032,9 @@ static RPCHelpMan createwallet() #ifndef USE_SQLITE throw JSONRPCError(RPC_WALLET_ERROR, "Compiled without sqlite support (required for descriptor wallets)"); #endif + if (request.params[6].isNull()) { + throw JSONRPCError(RPC_INVALID_PARAMETER, "The createwallet RPC requires specifying the 'load_on_startup' flag when creating descriptor wallets. Dash Core v21 introduced this requirement due to breaking changes in the createwallet RPC."); + } flags |= WALLET_FLAG_DESCRIPTORS; warnings.emplace_back(Untranslated("Wallet is an experimental descriptor wallet")); } diff --git a/test/functional/test_framework/test_node.py b/test/functional/test_framework/test_node.py index b1d6f70bfa..d92b5bc4a3 100755 --- a/test/functional/test_framework/test_node.py +++ b/test/functional/test_framework/test_node.py @@ -704,6 +704,8 @@ class RPCOverloadWrapper(): def createwallet(self, wallet_name, disable_private_keys=None, blank=None, passphrase='', avoid_reuse=None, descriptors=None, load_on_startup=None): if descriptors is None: descriptors = self.descriptors + if descriptors is not None and load_on_startup is None: + load_on_startup = False return self.__getattr__('createwallet')(wallet_name, disable_private_keys, blank, passphrase, avoid_reuse, descriptors, load_on_startup) def importprivkey(self, privkey, label=None, rescan=None):