text: // Copyright (c) 2015-2019 The Matilda Core developers
  // Distributed under the MIT software license, see the accompanying
  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
  
  #ifndef MATILDA_CONSENSUS_MERKLE_H
  #define MATILDA_CONSENSUS_MERKLE_H
  
  #include <vector>
  
  #include <primitives/block.h>
  #include <uint256.h>
  
  uint256 ComputeMerkleRoot(std::vector<uint256> hashes, bool* mutated = nullptr);
  
  /*
   * Compute the Merkle root of the transactions in a block.
   * *mutated is set to true if a duplicated subtree was found.
   */
  uint256 BlockMerkleRoot(const CBlock& block, bool* mutated = nullptr);
  
  /*
   * Compute the Merkle root of the witness transactions in a block.
   * *mutated is set to true if a duplicated subtree was found.
   */
  uint256 BlockWitnessMerkleRoot(const CBlock& block, bool* mutated = nullptr);
  
  #endif // MATILDA_CONSENSUS_MERKLE_H
  