1 // Copyright (c) 2015-2019 The Limenka 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 LIMENKA_CONSENSUS_MERKLE_H
6 #define LIMENKA_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 * *mutated is set to true if a duplicated subtree was found.
24 */
25 uint256 BlockWitnessMerkleRoot(const CBlock& block, bool* mutated = nullptr);
26 27 /**
28 * Compute merkle path to the specified transaction
29 *
30 * @param[in] block the block
31 * @param[in] position transaction for which to calculate the merkle path (0 is the coinbase)
32 *
33 * @return merkle path ordered from the deepest
34 */
35 std::vector<uint256> TransactionMerklePath(const CBlock& block, uint32_t position);
36 37 #endif // LIMENKA_CONSENSUS_MERKLE_H
38