/
githubmirror
/
bitcoin
Обзор
Документация
Войти
/
githubmirror
/
bitcoin
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/bench/wallet_ismine.cpp
74 строки
3 KB
Pablo Martin
bench: replace CreateMockableWalletDatabase with MakeInMemoryWalletDatabase
13 июл 2026, 07:06
13 июл 2026, 07:06
7508ac3
Код
Авторство
О чём код?
// Copyright (c) 2022-present The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include <addresstype.h> #include <bench/bench.h> #include <key.h> #include <key_io.h> #include <script/descriptor.h> #include <script/script.h> #include <script/signingprovider.h> #include <sync.h> #include <test/util/setup_common.h> #include <util/check.h> #include <wallet/context.h> #include <wallet/db.h> #include <wallet/sqlite.h> #include <wallet/test/util.h> #include <wallet/wallet.h> #include <wallet/walletutil.h> #include <cstdint> #include <functional> #include <memory> #include <string> #include <utility> #include <vector> namespace wallet { static void WalletIsMine(benchmark::Bench& bench, int num_combo = 0) { const auto test_setup = MakeNoLogFileContext<TestingSetup>(); WalletContext context; context.args = &test_setup->m_args; context.chain = test_setup->m_node.chain.get(); // Setup the wallet // Loading the wallet will also create it uint64_t create_flags = WALLET_FLAG_DESCRIPTORS; auto database = MakeInMemoryWalletDatabase(); auto wallet = TestCreateWallet(std::move(database), context, create_flags); // For a descriptor wallet, fill with num_combo combo descriptors with random keys // This benchmarks a non-HD wallet migrated to descriptors if (num_combo > 0) { LOCK(wallet->cs_wallet); for (int i = 0; i < num_combo; ++i) { CKey key; key.MakeNewKey(/*fCompressed=*/true); FlatSigningProvider keys; std::string error; std::vector<std::unique_ptr<Descriptor>> desc = Parse("combo(" + EncodeSecret(key) + ")", keys, error, /*require_checksum=*/false); WalletDescriptor w_desc(std::move(desc.at(0)), /*creation_time=*/0, /*range_start=*/0, /*range_end=*/0, /*next_index=*/0); Assert(wallet->AddWalletDescriptor(w_desc, keys, /*label=*/"", /*internal=*/false)); } } const CScript script = GetScriptForDestination(DecodeDestination(ADDRESS_BCRT1_UNSPENDABLE)); bench.run([&] { LOCK(wallet->cs_wallet); bool mine = wallet->IsMine(script); assert(!mine); }); TestUnloadWallet(std::move(wallet)); } static void WalletIsMineDescriptors(benchmark::Bench& bench) { WalletIsMine(bench); } static void WalletIsMineMigratedDescriptors(benchmark::Bench& bench) { WalletIsMine(bench, /*num_combo=*/2000); } BENCHMARK(WalletIsMineDescriptors); BENCHMARK(WalletIsMineMigratedDescriptors); } // namespace wallet