wallet: migrate wallet, exit early if no legacy data exist

otherwise the process will create a backup file then return
an error when notices that the db is already running sqlite.
This commit is contained in:
furszy 2023-01-17 11:58:23 -03:00
parent 635f1900d0
commit 6d31900e52
No known key found for this signature in database
GPG Key ID: 5DD23CCC686AA623
2 changed files with 10 additions and 4 deletions

View File

@ -3839,10 +3839,7 @@ std::optional<MigrationData> CWallet::GetDescriptorsForLegacy(bilingual_str& err
AssertLockHeld(cs_wallet);
LegacyScriptPubKeyMan* legacy_spkm = GetLegacyScriptPubKeyMan();
if (!legacy_spkm) {
error = _("Error: This wallet is already a descriptor wallet");
return std::nullopt;
}
assert(legacy_spkm);
std::optional<MigrationData> res = legacy_spkm->MigrateToDescriptor();
if (res == std::nullopt) {
@ -4138,6 +4135,11 @@ bool DoMigration(CWallet& wallet, WalletContext& context, bilingual_str& error,
util::Result<MigrationResult> MigrateLegacyToDescriptor(std::shared_ptr<CWallet>&& wallet, WalletContext& context)
{
// Before anything else, check if there is something to migrate.
if (!wallet->GetLegacyScriptPubKeyMan()) {
return util::Error{_("Error: This wallet is already a descriptor wallet")};
}
MigrationResult res;
bilingual_str error;
std::vector<bilingual_str> warnings;

View File

@ -163,6 +163,10 @@ class WalletMigrationTest(BitcoinTestFramework):
assert_equal(basic2.getbalance(), basic2_balance)
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")
assert_raises_rpc_error(-4, "Error: This wallet is already a descriptor wallet", basic2.migratewallet)
def test_multisig(self):
default = self.nodes[0].get_wallet_rpc(self.default_wallet_name)