Bitcoin Core 32.1.0
P2P Digital Currency
Loading...
Searching...
No Matches
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>
9#include <primitives/block.h>
11#include <serialize.h>
12#include <streams.h>
13#include <util/check.h>
14#include <validation.h>
15
16#include <memory>
17#include <span>
18#include <vector>
19
20// These are the two major time-sinks which happen after we have fully received
21// a block off the wire, but before we can relay the block on to peers using
22// compact block relay.
23
25{
26 const auto block_data{benchmark::data::block413567};
27 bench.unit("block").run([&] {
28 CBlock block;
29 SpanReader{block_data} >> TX_WITH_WITNESS(block);
30 assert(block.vtx.size() == 1557);
31 });
32}
33
35{
36 const auto& chain_params{CChainParams::Main()};
37 const auto block_data{benchmark::data::block413567};
38
39 CBlock block;
40 bench.unit("block")
41 .setup([&] {
42 block = CBlock{};
43 SpanReader{block_data} >> TX_WITH_WITNESS(block);
44 assert(block.vtx.size() == 1557);
45 })
46 .run([&] {
47 BlockValidationState validationState;
48 const bool checked{CheckBlock(block, validationState, chain_params->GetConsensus())};
49 assert(checked);
50 });
51}
52
#define BENCHMARK(n)
Definition bench.h:69
static void CheckBlockTest(benchmark::Bench &bench)
static void DeserializeBlockTest(benchmark::Bench &bench)
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:649
Bench & run(char const *benchmarkName, Op &&op)
Repeatedly calls op() based on the configuration, and performs measurements.
Definition nanobench.h:1308
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:1302
constexpr TransactionSerParams TX_WITH_WITNESS
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())