// Copyright (c) 2015 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_MERKLE #define BITCOIN_MERKLE #include #include #include "primitives/transaction.h" #include "primitives/block.h" #include "uint256.h" uint256 ComputeMerkleRoot(const std::vector& leaves, bool* mutated = NULL); std::vector ComputeMerkleBranch(const std::vector& leaves, uint32_t position); uint256 ComputeMerkleRootFromBranch(const uint256& leaf, const std::vector& branch, uint32_t position); /* * Compute the Merkle root of the transactions in a block. * *mutated is set to true if a duplicated subtree was found. */ uint256 BlockMerkleRoot(const CBlock& block, bool* mutated = NULL); /* * Compute the Merkle root of the witness transactions in a block. * *mutated is set to true if a duplicated subtree was found. */ uint256 BlockWitnessMerkleRoot(const CBlock& block, bool* mutated = NULL); /* * Compute the Merkle branch for the tree of transactions in a block, for a * given position. * This can be verified using ComputeMerkleRootFromBranch. */ std::vector BlockMerkleBranch(const CBlock& block, uint32_t position); #endif