merkle.h
1 // Copyright (c) 2015-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 #ifndef BITCOIN_CONSENSUS_MERKLE_H 6 #define BITCOIN_CONSENSUS_MERKLE_H 7 8 #include <vector> 9 10 #include <primitives/block.h> 11 #include <uint256.h> 12 13 uint256 ComputeMerkleRoot(std::vector<uint256> hashes, bool* mutated = nullptr); 14 15 /* 16 * Compute the Merkle root of the transactions in a block. 17 * *mutated is set to true if a duplicated subtree was found. 18 */ 19 uint256 BlockMerkleRoot(const CBlock& block, bool* mutated = nullptr); 20 21 /* 22 * Compute the Merkle root of the witness transactions in a block. 23 */ 24 uint256 BlockWitnessMerkleRoot(const CBlock& block); 25 26 /** 27 * Compute merkle path to the specified transaction 28 * 29 * @param[in] block the block 30 * @param[in] position transaction for which to calculate the merkle path (0 is the coinbase) 31 * 32 * @return merkle path ordered from the deepest 33 */ 34 std::vector<uint256> TransactionMerklePath(const CBlock& block, uint32_t position); 35 36 #endif // BITCOIN_CONSENSUS_MERKLE_H