mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-05-04 17:00:52 +02:00
wallet: fix and improve upgradewallet error responses
This commit is contained in:
parent
99d56e3571
commit
ca8cd893bb
@ -4484,12 +4484,12 @@ static RPCHelpMan upgradewallet()
|
|||||||
const int current_version{pwallet->GetVersion()};
|
const int current_version{pwallet->GetVersion()};
|
||||||
std::string result;
|
std::string result;
|
||||||
|
|
||||||
if (!wallet_upgraded) {
|
if (wallet_upgraded) {
|
||||||
throw JSONRPCError(RPC_WALLET_ERROR, error.original);
|
if (previous_version == current_version) {
|
||||||
} else if (previous_version == current_version) {
|
result = "Already at latest version. Wallet version unchanged.";
|
||||||
result = "Already at latest version. Wallet version unchanged.";
|
} else {
|
||||||
} else {
|
result = strprintf("Wallet upgraded successfully from version %i to version %i.", previous_version, current_version);
|
||||||
result = strprintf("Wallet upgraded successfully from version %i to version %i.", previous_version, current_version);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UniValue obj(UniValue::VOBJ);
|
UniValue obj(UniValue::VOBJ);
|
||||||
@ -4498,8 +4498,8 @@ static RPCHelpMan upgradewallet()
|
|||||||
obj.pushKV("current_version", current_version);
|
obj.pushKV("current_version", current_version);
|
||||||
if (!result.empty()) {
|
if (!result.empty()) {
|
||||||
obj.pushKV("result", result);
|
obj.pushKV("result", result);
|
||||||
}
|
} else {
|
||||||
if (!error.empty()) {
|
CHECK_NONFATAL(!error.empty());
|
||||||
obj.pushKV("error", error.original);
|
obj.pushKV("error", error.original);
|
||||||
}
|
}
|
||||||
return obj;
|
return obj;
|
||||||
|
@ -23,7 +23,6 @@ from test_framework.test_framework import BitcoinTestFramework
|
|||||||
from test_framework.util import (
|
from test_framework.util import (
|
||||||
assert_equal,
|
assert_equal,
|
||||||
assert_is_hex_string,
|
assert_is_hex_string,
|
||||||
assert_raises_rpc_error,
|
|
||||||
sha256sum_file,
|
sha256sum_file,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -105,6 +104,18 @@ class UpgradeWalletTest(BitcoinTestFramework):
|
|||||||
)
|
)
|
||||||
assert_equal(wallet.getwalletinfo()["walletversion"], new_version)
|
assert_equal(wallet.getwalletinfo()["walletversion"], new_version)
|
||||||
|
|
||||||
|
def test_upgradewallet_error(self, wallet, previous_version, requested_version, msg):
|
||||||
|
assert_equal(wallet.getwalletinfo()["walletversion"], previous_version)
|
||||||
|
assert_equal(wallet.upgradewallet(requested_version),
|
||||||
|
{
|
||||||
|
"wallet_name": "",
|
||||||
|
"previous_version": previous_version,
|
||||||
|
"current_version": previous_version,
|
||||||
|
"error": msg,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
assert_equal(wallet.getwalletinfo()["walletversion"], previous_version)
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
self.nodes[0].generatetoaddress(101, self.nodes[0].getnewaddress())
|
self.nodes[0].generatetoaddress(101, self.nodes[0].getnewaddress())
|
||||||
self.dumb_sync_blocks()
|
self.dumb_sync_blocks()
|
||||||
@ -200,7 +211,7 @@ class UpgradeWalletTest(BitcoinTestFramework):
|
|||||||
|
|
||||||
self.log.info('Wallets cannot be downgraded')
|
self.log.info('Wallets cannot be downgraded')
|
||||||
copy_non_hd()
|
copy_non_hd()
|
||||||
assert_raises_rpc_error(-4, 'Cannot downgrade wallet', wallet.upgradewallet, 40000)
|
self.test_upgradewallet_error(wallet, previous_version=60000, requested_version=40000, msg="Cannot downgrade wallet")
|
||||||
wallet.unloadwallet()
|
wallet.unloadwallet()
|
||||||
assert_equal(before_checksum, sha256sum_file(node_master_wallet))
|
assert_equal(before_checksum, sha256sum_file(node_master_wallet))
|
||||||
node_master.loadwallet('')
|
node_master.loadwallet('')
|
||||||
@ -237,12 +248,9 @@ class UpgradeWalletTest(BitcoinTestFramework):
|
|||||||
assert_equal('m/0\'/0\'/1\'', info['hdkeypath'])
|
assert_equal('m/0\'/0\'/1\'', info['hdkeypath'])
|
||||||
|
|
||||||
self.log.info('Cannot upgrade to HD Split, needs Pre Split Keypool')
|
self.log.info('Cannot upgrade to HD Split, needs Pre Split Keypool')
|
||||||
assert_raises_rpc_error(-4, 'Cannot upgrade a non HD split wallet without upgrading to support pre split keypool', wallet.upgradewallet, 139900)
|
for version in [139900, 159900, 169899]:
|
||||||
assert_equal(130000, wallet.getwalletinfo()['walletversion'])
|
self.test_upgradewallet_error(wallet, previous_version=130000, requested_version=version,
|
||||||
assert_raises_rpc_error(-4, 'Cannot upgrade a non HD split wallet without upgrading to support pre split keypool', wallet.upgradewallet, 159900)
|
msg="Cannot upgrade a non HD split wallet without upgrading to support pre split keypool. Please use version 169900 or no version specified.")
|
||||||
assert_equal(130000, wallet.getwalletinfo()['walletversion'])
|
|
||||||
assert_raises_rpc_error(-4, 'Cannot upgrade a non HD split wallet without upgrading to support pre split keypool', wallet.upgradewallet, 169899)
|
|
||||||
assert_equal(130000, wallet.getwalletinfo()['walletversion'])
|
|
||||||
|
|
||||||
self.log.info('Upgrade HD to HD chain split')
|
self.log.info('Upgrade HD to HD chain split')
|
||||||
self.test_upgradewallet(wallet, previous_version=130000, requested_version=169900)
|
self.test_upgradewallet(wallet, previous_version=130000, requested_version=169900)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user