merkle.h raw

   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