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