Inside Bitcoin
Opening the selected file…
Inside Bitcoin
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
1// Copyright (c) 2016-present The Bitcoin Core developers2// Distributed under the MIT software license, see the accompanying3// file COPYING or http://www.opensource.org/licenses/mit-license.php.5#include <bench/bench.h>6#include <consensus/merkle.h>7#include <random.h>8#include <uint256.h>9#include <util/check.h>11#include <utility>12#include <vector>14static void MerkleRoot(benchmark::Bench& bench)15{16FastRandomContext rng{/*fDeterministic=*/true};18std::vector<uint256> hashes{};19hashes.resize(9001);20for (auto& item : hashes) {21item = rng.rand256();22}24constexpr uint256 expected_root{"d8d4dfd014a533bc3941b8663fa6e7f3a8707af124f713164d75b0c3179ecb08"};25for (bool mutate : {false, true}) {26bench.name(mutate ? "MerkleRootWithMutation" : "MerkleRoot").batch(hashes.size()).unit("leaf").run([&] {27std::vector<uint256> leaves;28leaves.reserve((hashes.size() + 1) & ~1ULL); // capacity rounded up to even29for (const auto& hash : hashes) {30leaves.push_back(hash);31}33bool mutated{false};34const uint256 root{ComputeMerkleRoot(std::move(leaves), mutate ? &mutated : nullptr)};35assert(root == expected_root);36});37}38}40BENCHMARK(MerkleRoot);
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.