checkblock.cpp raw
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 <consensus/validation.h>
8 #include <kernel/chainparams.h>
9 #include <primitives/block.h>
10 #include <primitives/transaction.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
24 static void DeserializeBlockTest(benchmark::Bench& bench)
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
34 static void CheckBlockTest(benchmark::Bench& bench)
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
53 BENCHMARK(DeserializeBlockTest);
54 BENCHMARK(CheckBlockTest);
55