Bitcoin Core 32.99.0
P2P Digital Currency
Loading...
Searching...
No Matches
wallet_create.cpp
Go to the documentation of this file.
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>
8#include <uint256.h>
9#include <util/check.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 <memory>
18#include <optional>
19#include <string>
20#include <utility>
21#include <vector>
22
23namespace wallet {
25{
27 FastRandomContext random;
28
30 context.args = &test_setup->m_args;
31 context.chain = test_setup->m_node.chain.get();
32
33 DatabaseOptions options;
35 options.require_create = true;
37
38 if (encrypted) {
39 options.create_passphrase = random.rand256().ToString();
40 }
41
42 DatabaseStatus status;
44 std::vector<bilingual_str> warnings;
45
46 const auto wallet_path = test_setup->m_path_root / "test_wallet";
47 const auto wallet_name = fs::PathToString(wallet_path);
48
49 std::shared_ptr<CWallet> wallet;
50 auto cleanup{[&] {
51 if (!wallet) return;
52 // Release wallet
53 RemoveWallet(context, wallet, /*load_on_start=*/std::nullopt);
54 WaitForDeleteWallet(std::move(wallet));
55 fs::remove(wallet_path / "wallet.dat");
56 fs::remove(wallet_path);
57 }};
58 bench.setup(cleanup).run([&] {
59 wallet = CreateWallet(context, wallet_name, /*load_on_start=*/std::nullopt, options, status, error_string, warnings);
61 assert(wallet != nullptr);
62 });
63 cleanup();
64}
65
66static void WalletCreatePlain(benchmark::Bench& bench) { WalletCreate(bench, /*encrypted=*/false); }
67static void WalletCreateEncrypted(benchmark::Bench& bench) { WalletCreate(bench, /*encrypted=*/true); }
68
71
72} // namespace wallet
#define BENCHMARK(n)
Definition bench.h:69
Fast randomness source.
Definition random.h:386
uint256 rand256() noexcept
generate a random uint256.
Definition random.h:317
Main entry point to nanobench's benchmarking facility.
Definition nanobench.h:649
std::string ToString() const
Definition uint256.cpp:21
static std::string PathToString(const path &path)
Convert path object to a byte string.
Definition fs.h:160
static void WalletCreate(benchmark::Bench &bench, bool encrypted)
std::shared_ptr< CWallet > CreateWallet(WalletContext &context, const std::string &name, std::optional< bool > load_on_start, DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error, std::vector< bilingual_str > &warnings)
Definition wallet.cpp:334
@ WALLET_FLAG_DESCRIPTORS
Indicate that this wallet supports DescriptorScriptPubKeyMan.
Definition walletutil.h:53
void WaitForDeleteWallet(std::shared_ptr< CWallet > &&wallet)
Explicitly delete the wallet.
Definition wallet.cpp:266
static void WalletCreatePlain(benchmark::Bench &bench)
DatabaseStatus
Definition db.h:180
bool RemoveWallet(WalletContext &context, const std::shared_ptr< CWallet > &wallet, std::optional< bool > load_on_start, std::vector< bilingual_str > &warnings)
Definition wallet.cpp:175
static void WalletCreateEncrypted(benchmark::Bench &bench)
Bilingual messages:
Definition translation.h:24
SecureString create_passphrase
Definition db.h:173
std::optional< DatabaseFormat > require_format
Definition db.h:171
uint64_t create_flags
Definition db.h:172
WalletContext struct containing references to state shared between CWallet instances,...
Definition context.h:36
interfaces::Chain * chain
Definition context.h:37
ArgsManager * args
Definition context.h:39
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.
Definition time.h:82
assert(!tx.IsCoinBase())
WalletContext context