From d9ac9dbd8ef57ad6e8e1716614025fdcfd098fb5 Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Fri, 11 Apr 2025 21:07:51 -0700 Subject: [PATCH] tests, gui: Use descriptors watchonly wallet for watchonly test --- src/qt/test/wallettests.cpp | 38 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/src/qt/test/wallettests.cpp b/src/qt/test/wallettests.cpp index 8d945a1b869..1aae1b5fcd3 100644 --- a/src/qt/test/wallettests.cpp +++ b/src/qt/test/wallettests.cpp @@ -189,36 +189,28 @@ void SyncUpWallet(const std::shared_ptr& wallet, interfaces::Node& node QVERIFY(result.last_failed_block.IsNull()); } -std::shared_ptr SetupLegacyWatchOnlyWallet(interfaces::Node& node, TestChain100Setup& test) -{ - std::shared_ptr wallet = std::make_shared(node.context()->chain.get(), "", CreateMockableWalletDatabase()); - wallet->LoadWallet(); - { - LOCK(wallet->cs_wallet); - wallet->SetWalletFlag(WALLET_FLAG_DISABLE_PRIVATE_KEYS); - wallet->SetupLegacyScriptPubKeyMan(); - // Add watched key - CPubKey pubKey = test.coinbaseKey.GetPubKey(); - bool import_keys = wallet->ImportPubKeys({{pubKey.GetID(), false}}, {{pubKey.GetID(), pubKey}} , /*key_origins=*/{}, /*add_keypool=*/false, /*timestamp=*/1); - assert(import_keys); - wallet->SetLastBlockProcessed(105, WITH_LOCK(node.context()->chainman->GetMutex(), return node.context()->chainman->ActiveChain().Tip()->GetBlockHash())); - } - SyncUpWallet(wallet, node); - return wallet; -} - -std::shared_ptr SetupDescriptorsWallet(interfaces::Node& node, TestChain100Setup& test) +std::shared_ptr SetupDescriptorsWallet(interfaces::Node& node, TestChain100Setup& test, bool watch_only = false) { std::shared_ptr wallet = std::make_shared(node.context()->chain.get(), "", CreateMockableWalletDatabase()); wallet->LoadWallet(); LOCK(wallet->cs_wallet); wallet->SetWalletFlag(WALLET_FLAG_DESCRIPTORS); - wallet->SetupDescriptorScriptPubKeyMans(); + if (watch_only) { + wallet->SetWalletFlag(WALLET_FLAG_DISABLE_PRIVATE_KEYS); + } else { + wallet->SetupDescriptorScriptPubKeyMans(); + } // Add the coinbase key FlatSigningProvider provider; std::string error; - auto descs = Parse("combo(" + EncodeSecret(test.coinbaseKey) + ")", provider, error, /* require_checksum=*/ false); + std::string key_str; + if (watch_only) { + key_str = HexStr(test.coinbaseKey.GetPubKey()); + } else { + key_str = EncodeSecret(test.coinbaseKey); + } + auto descs = Parse("combo(" + key_str + ")", provider, error, /* require_checksum=*/ false); assert(!descs.empty()); assert(descs.size() == 1); auto& desc = descs.at(0); @@ -397,7 +389,7 @@ void TestGUI(interfaces::Node& node, const std::shared_ptr& wallet) void TestGUIWatchOnly(interfaces::Node& node, TestChain100Setup& test) { - const std::shared_ptr& wallet = SetupLegacyWatchOnlyWallet(node, test); + const std::shared_ptr& wallet = SetupDescriptorsWallet(node, test, /*watch_only=*/true); // Create widgets and init models std::unique_ptr platformStyle(PlatformStyle::instantiate("other")); @@ -409,7 +401,7 @@ void TestGUIWatchOnly(interfaces::Node& node, TestChain100Setup& test) // Update walletModel cached balance which will trigger an update for the 'labelBalance' QLabel. walletModel.pollBalanceChanged(); // Check balance in send dialog - CompareBalance(walletModel, walletModel.wallet().getBalances().watch_only_balance, + CompareBalance(walletModel, walletModel.wallet().getBalances().balance, sendCoinsDialog.findChild("labelBalance")); // Set change address