git / moonbite-core / src/bench/checkblock.cpp · raw
// Copyright (c) 2016-2020 The Bitcoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.#include <bench/bench.h>#include <bench/data.h>#include <chainparams.h>#include <consensus/validation.h>#include <streams.h>#include <validation.h>// These are the two major time-sinks which happen after we have fully received// a block off the wire, but before we can relay the block on to peers using// compact block relay.// Litecoin uses block height 878439, hash 0babe680f55a55d54339511226755f0837261da89a4e78eba4d6436a63026df8// which contains 3808 transactions.static void DeserializeBlockTest(benchmark::Bench& bench){ CDataStream stream(benchmark::data::block413567, SER_NETWORK, PROTOCOL_VERSION); char a = '\0'; stream.write(&a, 1); // Prevent compaction bench.unit("block").run([&] { CBlock block; stream >> block; bool rewound = stream.Rewind(benchmark::data::block413567.size()); assert(rewound); });}static void DeserializeAndCheckBlockTest(benchmark::Bench& bench){ CDataStream stream(benchmark::data::block413567, SER_NETWORK, PROTOCOL_VERSION); char a = '\0'; stream.write(&a, 1); // Prevent compaction ArgsManager bench_args; const auto chainParams = CreateChainParams(bench_args, CBaseChainParams::MAIN); bench.unit("block").run([&] { CBlock block; // Note that CBlock caches its checked state, so we need to recreate it here stream >> block; bool rewound = stream.Rewind(benchmark::data::block413567.size()); assert(rewound); BlockValidationState validationState; bool checked = CheckBlock(block, validationState, chainParams->GetConsensus()); assert(checked); });}BENCHMARK(DeserializeBlockTest);BENCHMARK(DeserializeAndCheckBlockTest);