diff options
author | Matt Corallo <git@bluematt.me> | 2014-11-01 23:53:55 -0700 |
---|---|---|
committer | Matt Corallo <git@bluematt.me> | 2015-04-23 17:50:39 -0700 |
commit | 30da90de8dcbb62199262f65516e574dab57d1bd (patch) | |
tree | 630cfb9d9a171668a9ee57f0fdd75f3aaeeec998 | |
parent | 734f80a5d18821f4f6d0488996655c6e35ce160c (diff) |
Add CMerkleBlock constructor for tx set + block and an empty one
-rw-r--r-- | src/merkleblock.cpp | 23 | ||||
-rw-r--r-- | src/merkleblock.h | 5 |
2 files changed, 28 insertions, 0 deletions
diff --git a/src/merkleblock.cpp b/src/merkleblock.cpp index b51b002b95..40723f0322 100644 --- a/src/merkleblock.cpp +++ b/src/merkleblock.cpp @@ -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 diff --git a/src/merkleblock.h b/src/merkleblock.h index 52c914967f..d90face17c 100644 --- a/src/merkleblock.h +++ b/src/merkleblock.h @@ -139,6 +139,11 @@ public: */ CMerkleBlock(const CBlock& block, CBloomFilter& filter); + // Create from a CBlock, matching the txids in the set + CMerkleBlock(const CBlock& block, const std::set<uint256>& txids); + + CMerkleBlock() {} + ADD_SERIALIZE_METHODS; template <typename Stream, typename Operation> |