| 73 | } |
| 74 | |
| 75 | uint256 BlockWitnessMerkleRoot(const CBlock& block, bool* mutated) |
| 76 | { |
| 77 | std::vector<uint256> leaves; |
| 78 | leaves.resize(block.vtx.size()); |
| 79 | if (g_con_elementsmode) { |
| 80 | // Coinbase witness hash for inputs is just CTxInWitness().GetHash() |
| 81 | for (size_t s = 0; s < block.vtx.size(); s++) { |
| 82 | leaves[s] = block.vtx[s]->GetWitnessOnlyHash(); |
| 83 | } |
| 84 | return ComputeFastMerkleRoot(std::move(leaves)); |
| 85 | } else { |
| 86 | leaves[0].SetNull(); // The witness hash of the coinbase is 0. |
| 87 | for (size_t s = 1; s < block.vtx.size(); s++) { |
| 88 | leaves[s] = block.vtx[s]->GetWitnessHash(); |
| 89 | } |
| 90 | return ComputeMerkleRoot(std::move(leaves), mutated); |
| 91 | } |
| 92 | } |