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) 2020-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 <merkleblock.h>6#include <test/fuzz/FuzzedDataProvider.h>7#include <test/fuzz/fuzz.h>8#include <test/fuzz/util.h>9#include <uint256.h>11#include <cstdint>12#include <optional>13#include <string>14#include <vector>16FUZZ_TARGET(merkleblock)17{18FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());19CPartialMerkleTree partial_merkle_tree;20CallOneOf(21fuzzed_data_provider,22[&] {23const std::optional<CPartialMerkleTree> opt_partial_merkle_tree = ConsumeDeserializable<CPartialMerkleTree>(fuzzed_data_provider);24if (opt_partial_merkle_tree) {25partial_merkle_tree = *opt_partial_merkle_tree;26}27},28[&] {29CMerkleBlock merkle_block;30const std::optional<CBlock> opt_block = ConsumeDeserializable<CBlock>(fuzzed_data_provider, TX_WITH_WITNESS);31CBloomFilter bloom_filter;32std::set<Txid> txids;33if (opt_block && !opt_block->vtx.empty()) {34if (fuzzed_data_provider.ConsumeBool()) {35merkle_block = CMerkleBlock{*opt_block, bloom_filter};36} else if (fuzzed_data_provider.ConsumeBool()) {37LIMITED_WHILE (fuzzed_data_provider.ConsumeBool(), 10000) {38txids.insert(Txid::FromUint256(ConsumeUInt256(fuzzed_data_provider)));39}40merkle_block = CMerkleBlock{*opt_block, txids};41}42}43partial_merkle_tree = merkle_block.txn;44});45(void)partial_merkle_tree.GetNumTransactions();46std::vector<Txid> matches;47std::vector<unsigned int> indices;48(void)partial_merkle_tree.ExtractMatches(matches, indices);49}
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.