| 25 | } |
| 26 | |
| 27 | uint256 CBlock::BuildMerkleTree() const { |
| 28 | vMerkleTree.clear(); |
| 29 | for (const auto& ptx : vptx) { |
| 30 | vMerkleTree.push_back(ptx->GetHash()); |
| 31 | } |
| 32 | int32_t j = 0; |
| 33 | for (int32_t nSize = vptx.size(); nSize > 1; nSize = (nSize + 1) / 2) { |
| 34 | for (int32_t i = 0; i < nSize; i += 2) { |
| 35 | int32_t i2 = min(i + 1, nSize - 1); |
| 36 | vMerkleTree.push_back(Hash(BEGIN(vMerkleTree[j + i]), END(vMerkleTree[j + i]), |
| 37 | BEGIN(vMerkleTree[j + i2]), END(vMerkleTree[j + i2]))); |
| 38 | } |
| 39 | j += nSize; |
| 40 | } |
| 41 | return (vMerkleTree.empty() ? uint256() : vMerkleTree.back()); |
| 42 | } |
| 43 | |
| 44 | vector<uint256> CBlock::GetMerkleBranch(int32_t index) const { |
| 45 | if (vMerkleTree.empty()) |