diff options
Diffstat (limited to 'src/merkleblock.cpp')
-rw-r--r-- | src/merkleblock.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/merkleblock.cpp b/src/merkleblock.cpp index b51b002b95..dc87d0377a 100644 --- a/src/merkleblock.cpp +++ b/src/merkleblock.cpp @@ -6,7 +6,7 @@ #include "merkleblock.h" #include "hash.h" -#include "primitives/block.h" // for MAX_BLOCK_SIZE +#include "consensus/consensus.h" #include "utilstrencodings.h" using namespace std; @@ -37,6 +37,29 @@ CMerkleBlock::CMerkleBlock(const CBlock& block, CBloomFilter& filter) txn = CPartialMerkleTree(vHashes, vMatch); } +CMerkleBlock::CMerkleBlock(const CBlock& block, const std::set<uint256>& txids) +{ + header = block.GetBlockHeader(); + + vector<bool> vMatch; + vector<uint256> vHashes; + + vMatch.reserve(block.vtx.size()); + vHashes.reserve(block.vtx.size()); + + for (unsigned int i = 0; i < block.vtx.size(); i++) + { + const uint256& hash = block.vtx[i].GetHash(); + if (txids.count(hash)) + vMatch.push_back(true); + else + vMatch.push_back(false); + vHashes.push_back(hash); + } + + txn = CPartialMerkleTree(vHashes, vMatch); +} + uint256 CPartialMerkleTree::CalcHash(int height, unsigned int pos, const std::vector<uint256> &vTxid) { if (height == 0) { // hash at height 0 is the txids themself |