merkle.h raw
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
37