/ src / consensus / merkle.h
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