wallet_create.cpp
1 // Copyright (c) 2023-present The Bitcoin Core developers 2 // Distributed under the MIT software license, see the accompanying 3 // file COPYING or https://www.opensource.org/licenses/mit-license.php. 4 5 #include <bench/bench.h> 6 #include <random.h> 7 #include <support/allocators/secure.h> 8 #include <test/util/setup_common.h> 9 #include <uint256.h> 10 #include <util/fs.h> 11 #include <util/translation.h> 12 #include <wallet/context.h> 13 #include <wallet/db.h> 14 #include <wallet/wallet.h> 15 #include <wallet/walletutil.h> 16 17 #include <cassert> 18 #include <memory> 19 #include <optional> 20 #include <string> 21 #include <utility> 22 #include <vector> 23 24 namespace wallet { 25 static void WalletCreate(benchmark::Bench& bench, bool encrypted) 26 { 27 auto test_setup = MakeNoLogFileContext<TestingSetup>(); 28 FastRandomContext random; 29 30 WalletContext context; 31 context.args = &test_setup->m_args; 32 context.chain = test_setup->m_node.chain.get(); 33 34 DatabaseOptions options; 35 options.require_format = DatabaseFormat::SQLITE; 36 options.require_create = true; 37 options.create_flags = WALLET_FLAG_DESCRIPTORS; 38 39 if (encrypted) { 40 options.create_passphrase = random.rand256().ToString(); 41 } 42 43 DatabaseStatus status; 44 bilingual_str error_string; 45 std::vector<bilingual_str> warnings; 46 47 auto wallet_path = fs::PathToString(test_setup->m_path_root / "test_wallet"); 48 bench.run([&] { 49 auto wallet = CreateWallet(context, wallet_path, /*load_on_start=*/std::nullopt, options, status, error_string, warnings); 50 assert(status == DatabaseStatus::SUCCESS); 51 assert(wallet != nullptr); 52 53 // Release wallet 54 RemoveWallet(context, wallet, /*load_on_start=*/ std::nullopt); 55 WaitForDeleteWallet(std::move(wallet)); 56 fs::remove_all(wallet_path); 57 }); 58 } 59 60 static void WalletCreatePlain(benchmark::Bench& bench) { WalletCreate(bench, /*encrypted=*/false); } 61 static void WalletCreateEncrypted(benchmark::Bench& bench) { WalletCreate(bench, /*encrypted=*/true); } 62 63 BENCHMARK(WalletCreatePlain, benchmark::PriorityLevel::LOW); 64 BENCHMARK(WalletCreateEncrypted, benchmark::PriorityLevel::LOW); 65 66 } // namespace wallet