Bitcoin Core 31.99.0
P2P Digital Currency
checkblock.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>
8#include <primitives/block.h>
10#include <streams.h>
11#include <validation.h>
12
13#include <cassert>
14#include <cstddef>
15
16// These are the two major time-sinks which happen after we have fully received
17// a block off the wire, but before we can relay the block on to peers using
18// compact block relay.
19
21{
22 const auto block_data{benchmark::data::block413567};
23 bench.unit("block").run([&] {
24 CBlock block;
25 SpanReader{block_data} >> TX_WITH_WITNESS(block);
26 assert(block.vtx.size() == 1557);
27 });
28}
29
31{
32 const auto& chain_params{CChainParams::Main()};
33 const auto block_data{benchmark::data::block413567};
34
35 CBlock block;
36 bench.unit("block")
37 .setup([&] {
38 block = CBlock{};
39 SpanReader{block_data} >> TX_WITH_WITNESS(block);
40 assert(block.vtx.size() == 1557);
41 })
42 .run([&] {
43 BlockValidationState validationState;
44 const bool checked{CheckBlock(block, validationState, chain_params->GetConsensus())};
45 assert(checked);
46 });
47}
48
BENCHMARK(DeserializeBlockTest)
static void CheckBlockTest(benchmark::Bench &bench)
Definition: checkblock.cpp:30
static void DeserializeBlockTest(benchmark::Bench &bench)
Definition: checkblock.cpp:20
Definition: block.h:74
std::vector< CTransactionRef > vtx
Definition: block.h:77
static std::unique_ptr< const CChainParams > Main()
Minimal stream for reading from an existing byte array by std::span.
Definition: streams.h:83
Main entry point to nanobench's benchmarking facility.
Definition: nanobench.h:633
Bench & run(char const *benchmarkName, Op &&op)
Repeatedly calls op() based on the configuration, and performs measurements.
Definition: nanobench.h:1292
Bench & unit(char const *unit)
Sets the operation unit.
detail::SetupRunner< SetupOp > setup(SetupOp setupOp)
Configure an untimed setup step per epoch (forces single-iteration epochs).
Definition: nanobench.h:1286
static constexpr TransactionSerParams TX_WITH_WITNESS
Definition: transaction.h:180
bool CheckBlock(const CBlock &block, BlockValidationState &state, const Consensus::Params &consensusParams, bool fCheckPOW, bool fCheckMerkleRoot)
Functions for validating blocks and updating the block tree.
assert(!tx.IsCoinBase())