Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
bench
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>
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
);
64
BENCHMARK
(
WalletCreateEncrypted
);
65
66
}
// namespace wallet
bench.h
BENCHMARK
#define BENCHMARK(n)
Definition
bench.h:68
FastRandomContext
Fast randomness source.
Definition
random.h:386
RandomMixin::rand256
uint256 rand256() noexcept
generate a random uint256.
Definition
random.h:317
ankerl::nanobench::Bench
Main entry point to nanobench's benchmarking facility.
Definition
nanobench.h:627
ankerl::nanobench::Bench::run
Bench & run(char const *benchmarkName, Op &&op)
Repeatedly calls op() based on the configuration, and performs measurements.
Definition
nanobench.h:1234
base_blob::ToString
std::string ToString() const
Definition
uint256.cpp:21
db.h
fs.h
wallet
Definition
wallet_balance.cpp:26
wallet::WalletCreate
static void WalletCreate(benchmark::Bench &bench, bool encrypted)
Definition
wallet_create.cpp:25
wallet::DatabaseFormat::SQLITE
@ SQLITE
Definition
db.h:168
wallet::CreateWallet
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:377
wallet::WALLET_FLAG_DESCRIPTORS
@ WALLET_FLAG_DESCRIPTORS
Indicate that this wallet supports DescriptorScriptPubKeyMan.
Definition
walletutil.h:53
wallet::WaitForDeleteWallet
void WaitForDeleteWallet(std::shared_ptr< CWallet > &&wallet)
Definition
wallet.cpp:254
wallet::WalletCreatePlain
static void WalletCreatePlain(benchmark::Bench &bench)
Definition
wallet_create.cpp:60
wallet::DatabaseStatus
DatabaseStatus
Definition
db.h:186
wallet::DatabaseStatus::SUCCESS
@ SUCCESS
Definition
db.h:187
wallet::RemoveWallet
bool RemoveWallet(WalletContext &context, const std::shared_ptr< CWallet > &wallet, std::optional< bool > load_on_start, std::vector< bilingual_str > &warnings)
Definition
wallet.cpp:163
wallet::WalletCreateEncrypted
static void WalletCreateEncrypted(benchmark::Bench &bench)
Definition
wallet_create.cpp:61
secure.h
setup_common.h
MakeNoLogFileContext
std::unique_ptr< T > MakeNoLogFileContext(const ChainType chain_type=ChainType::REGTEST, TestOpts opts={})
Make a test setup that has disk access to the debug.log file disabled.
Definition
setup_common.h:250
bilingual_str
Bilingual messages:
Definition
translation.h:24
wallet::DatabaseOptions
Definition
db.h:172
wallet::DatabaseOptions::require_create
bool require_create
Definition
db.h:174
wallet::DatabaseOptions::create_passphrase
SecureString create_passphrase
Definition
db.h:177
wallet::DatabaseOptions::require_format
std::optional< DatabaseFormat > require_format
Definition
db.h:175
wallet::DatabaseOptions::create_flags
uint64_t create_flags
Definition
db.h:176
wallet::WalletContext
Definition
context.h:36
wallet::WalletContext::chain
interfaces::Chain * chain
Definition
context.h:37
wallet::WalletContext::args
ArgsManager * args
Definition
context.h:39
translation.h
uint256.h
assert
assert(!tx.IsCoinBase())
context.h
wallet.h
walletutil.h
Generated on
for Bitcoin Core by
1.17.0