mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-10 05:57:59 +01:00
Merge bitcoin/bitcoin#26596: wallet: Migrate legacy wallets to descriptor wallets without requiring BDB
8ce3739edbtest: verify wallet is still active post-migration failure (furszy)771bc60f13wallet: Use LegacyDataSPKM when loading (Ava Chow)61d872f1b3wallet: Move MigrateToDescriptor and DeleteRecords to LegacyDataSPKM (Ava Chow)b231f4d556wallet: Move LegacyScriptPubKeyMan::IsMine to LegacyDataSPKM (Ava Chow)7461d0c006wallet: Move LegacySPKM data storage and handling to LegacyDataSPKM (Ava Chow)517e204bacChange MigrateLegacyToDescriptor to reopen wallet as BERKELEY_RO (Ava Chow) Pull request description: #26606 introduced `BerkeleyRODatabase` which is an independent parser for BDB files. This PR uses this in legacy wallet migration so that migration will continue to work once the legacy wallet and BDB are removed. `LegacyDataSPKM` is introduced to have the minimum data and functions necessary for a legacy wallet to be loaded for migration. ACKs for top commit: cbergqvist: ACK8ce3739edbtheStack: Code-review ACK8ce3739edbfurszy: Code review ACK8ce3739edbTree-SHA512: dccea12d6c597de15e3e42f97ab483cfd069e103611200279a177e021e8e9c4e74387c4f45d2e58b3a1e7e2bdb32a1d2d2060b1f8086c03eeaa0c68579d9d54e
This commit is contained in:
@@ -205,9 +205,13 @@ class WalletMigrationTest(BitcoinTestFramework):
|
||||
self.assert_list_txs_equal(basic2.listtransactions(), basic2_txs)
|
||||
|
||||
# Now test migration on a descriptor wallet
|
||||
self.log.info("Test \"nothing to migrate\" when the user tries to migrate a wallet with no legacy data")
|
||||
self.log.info("Test \"nothing to migrate\" when the user tries to migrate a loaded wallet with no legacy data")
|
||||
assert_raises_rpc_error(-4, "Error: This wallet is already a descriptor wallet", basic2.migratewallet)
|
||||
|
||||
self.log.info("Test \"nothing to migrate\" when the user tries to migrate an unloaded wallet with no legacy data")
|
||||
basic2.unloadwallet()
|
||||
assert_raises_rpc_error(-4, "Error: This wallet is already a descriptor wallet", self.nodes[0].migratewallet, "basic2")
|
||||
|
||||
def test_multisig(self):
|
||||
default = self.nodes[0].get_wallet_rpc(self.default_wallet_name)
|
||||
|
||||
@@ -467,6 +471,12 @@ class WalletMigrationTest(BitcoinTestFramework):
|
||||
assert_raises_rpc_error(-4, "Error: Wallet decryption failed, the wallet passphrase was not provided or was incorrect", wallet.migratewallet, None, "badpass")
|
||||
assert_raises_rpc_error(-4, "The passphrase contains a null character", wallet.migratewallet, None, "pass\0with\0null")
|
||||
|
||||
# Check the wallet is still active post-migration failure.
|
||||
# If not, it will throw an exception and abort the test.
|
||||
wallet.walletpassphrase("pass", 99999)
|
||||
wallet.getnewaddress()
|
||||
|
||||
# Verify we can properly migrate the encrypted wallet
|
||||
self.migrate_wallet(wallet, passphrase="pass")
|
||||
|
||||
info = wallet.getwalletinfo()
|
||||
|
||||
Reference in New Issue
Block a user