Bitcoin Core 32.1.0
P2P Digital Currency
Loading...
Searching...
No Matches
rpc_blockchain.cpp
Go to the documentation of this file.
1// Copyright (c) 2016-present The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#include <bench/bench.h>
6#include <bench/data/block413567.raw.h>
7#include <chain.h>
8#include <consensus/params.h>
9#include <core_io.h>
10#include <kernel/chainparams.h>
11#include <primitives/block.h>
13#include <rpc/blockchain.h>
14#include <serialize.h>
15#include <streams.h>
17#include <uint256.h>
18#include <univalue.h>
19#include <validation.h>
20
21#include <memory>
22#include <span>
23#include <string>
24
25namespace {
26
27struct TestBlockAndIndex {
28 const std::unique_ptr<const TestingSetup> testing_setup{MakeNoLogFileContext<const TestingSetup>(ChainType::MAIN)};
29 CBlock block{};
30 uint256 blockHash{};
31 CBlockIndex blockindex{};
32
33 TestBlockAndIndex()
34 {
35 SpanReader stream{benchmark::data::block413567};
36 stream >> TX_WITH_WITNESS(block);
37
38 blockHash = block.GetHash();
39 blockindex.phashBlock = &blockHash;
40 blockindex.nBits = 403014710;
41 }
42};
43
44} // namespace
45
46static void BlockToJson(benchmark::Bench& bench, TxVerbosity verbosity)
47{
48 TestBlockAndIndex data;
49 const uint256 pow_limit{data.testing_setup->m_node.chainman->GetParams().GetConsensus().powLimit};
50 bench.run([&] {
51 auto univalue = blockToJSON(data.testing_setup->m_node.chainman->m_blockman, data.block, data.blockindex, data.blockindex, verbosity, pow_limit);
53 });
54}
55
60
65
70
74
76{
77 TestBlockAndIndex data;
78 const uint256 pow_limit{data.testing_setup->m_node.chainman->GetParams().GetConsensus().powLimit};
79 auto univalue = blockToJSON(data.testing_setup->m_node.chainman->m_blockman, data.block, data.blockindex, data.blockindex, TxVerbosity::SHOW_DETAILS_AND_PREVOUT, pow_limit);
80 bench.run([&] {
81 auto str = univalue.write();
83 });
84}
85
#define BENCHMARK(n)
Definition bench.h:69
UniValue blockToJSON(BlockManager &blockman, const CBlock &block, const CBlockIndex &tip, const CBlockIndex &blockindex, TxVerbosity verbosity, const uint256 pow_limit)
Block description to JSON.
Main entry point to nanobench's benchmarking facility.
Definition nanobench.h:649
Bench & run(char const *benchmarkName, Op &&op)
Repeatedly calls op() based on the configuration, and performs measurements.
Definition nanobench.h:1308
256-bit opaque blob.
Definition uint256.h:196
TxVerbosity
Verbose level for block's transaction.
Definition core_io.h:29
@ SHOW_DETAILS_AND_PREVOUT
The same as previous option with information about prevouts if available.
Definition core_io.h:32
@ SHOW_TXID
Only TXID for each block's transaction.
Definition core_io.h:30
@ SHOW_DETAILS
Include TXID, inputs, outputs, and other common block's transaction information.
Definition core_io.h:31
void doNotOptimizeAway(Arg &&arg)
Makes sure none of the given arguments are optimized away by the compiler.
Definition nanobench.h:1353
constexpr TransactionSerParams TX_WITH_WITNESS
static void BlockToJsonVerbosity2(benchmark::Bench &bench)
static void BlockToJson(benchmark::Bench &bench, TxVerbosity verbosity)
static void BlockToJsonVerbosity1(benchmark::Bench &bench)
static void BlockToJsonVerboseWrite(benchmark::Bench &bench)
static void BlockToJsonVerbosity3(benchmark::Bench &bench)
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.