From 30da90de8dcbb62199262f65516e574dab57d1bd Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Sat, 1 Nov 2014 23:53:55 -0700 Subject: [PATCH] Add CMerkleBlock constructor for tx set + block and an empty one --- src/merkleblock.cpp | 23 +++++++++++++++++++++++ src/merkleblock.h | 5 +++++ 2 files changed, 28 insertions(+) diff --git a/src/merkleblock.cpp b/src/merkleblock.cpp index b51b002b9..40723f032 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& txids) +{ + header = block.GetBlockHeader(); + + vector vMatch; + vector 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 &vTxid) { if (height == 0) { // hash at height 0 is the txids themself diff --git a/src/merkleblock.h b/src/merkleblock.h index 52c914967..d90face17 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& txids); + + CMerkleBlock() {} + ADD_SERIALIZE_METHODS; template