mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-10 05:57:59 +01:00
Merge bitcoin/bitcoin#28976: wallet: Fix migration of blank wallets
c11c404281tests: Test migration of blank wallets (Andrew Chow)563b2a60d6wallet: Better error message when missing LegacySPKM during migration (Andrew Chow)b1d2c771d4wallet: Check for descriptors flag before migration (Andrew Chow)8c127ff1edwallet: Skip key and script migration for blank wallets (Andrew Chow) Pull request description: Blank wallets (wallets without any keys are scripts) are being detected as already being descriptor wallets even though they are not. This is because the check for whether a wallet is already a descriptor wallet uses the presence of a `LegacyScriptPubKeyMan` which is only setup when keys or scripts are found. This PR resolves this issue by checking for the descriptor wallet flag instead and subsequently skipping the keys and scripts part of migration for blank wallets. Fixes the issue mentioned in https://github.com/bitcoin/bitcoin/pull/28868#issuecomment-1809641110 ACKs for top commit: furszy: reACKc11c404281. CI failure is unrelated. ryanofsky: Code review ACKc11c404281Tree-SHA512: 2466fdf1542eb8489c841253191f85dc88365493f0bb3395b67dee3e43709a9993c68b9d7623657b54b779adbe68fc81962d60efef4802c5d461f154167af7f4
This commit is contained in:
@@ -52,13 +52,12 @@ class WalletMigrationTest(BitcoinTestFramework):
|
||||
assert_equal(file_magic, b'SQLite format 3\x00')
|
||||
assert_equal(self.nodes[0].get_wallet_rpc(wallet_name).getwalletinfo()["format"], "sqlite")
|
||||
|
||||
def create_legacy_wallet(self, wallet_name, disable_private_keys=False):
|
||||
self.nodes[0].createwallet(wallet_name=wallet_name, descriptors=False, disable_private_keys=disable_private_keys)
|
||||
def create_legacy_wallet(self, wallet_name, **kwargs):
|
||||
self.nodes[0].createwallet(wallet_name=wallet_name, descriptors=False, **kwargs)
|
||||
wallet = self.nodes[0].get_wallet_rpc(wallet_name)
|
||||
info = wallet.getwalletinfo()
|
||||
assert_equal(info["descriptors"], False)
|
||||
assert_equal(info["format"], "bdb")
|
||||
assert_equal(info["private_keys_enabled"], not disable_private_keys)
|
||||
return wallet
|
||||
|
||||
def assert_addr_info_equal(self, addr_info, addr_info_old):
|
||||
@@ -876,6 +875,13 @@ class WalletMigrationTest(BitcoinTestFramework):
|
||||
_, _, magic = struct.unpack("QII", data)
|
||||
assert_equal(magic, BTREE_MAGIC)
|
||||
|
||||
def test_blank(self):
|
||||
self.log.info("Test that a blank wallet is migrated")
|
||||
wallet = self.create_legacy_wallet("blank", blank=True)
|
||||
assert_equal(wallet.getwalletinfo()["blank"], True)
|
||||
wallet.migratewallet()
|
||||
assert_equal(wallet.getwalletinfo()["blank"], True)
|
||||
|
||||
|
||||
def test_avoidreuse(self):
|
||||
self.log.info("Test that avoidreuse persists after migration")
|
||||
@@ -987,6 +993,7 @@ class WalletMigrationTest(BitcoinTestFramework):
|
||||
self.test_failed_migration_cleanup()
|
||||
self.test_avoidreuse()
|
||||
self.test_preserve_tx_extra_info()
|
||||
self.test_blank()
|
||||
|
||||
if __name__ == '__main__':
|
||||
WalletMigrationTest().main()
|
||||
|
||||
Reference in New Issue
Block a user