diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2015-04-28 10:02:45 +0200 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2015-04-28 10:07:25 +0200 |
commit | 6364408122210b2fa9f4e135783ff82636ef81c1 (patch) | |
tree | cc1737e3bfdae29485b3116606fe615d47680dfa /src/merkleblock.cpp | |
parent | f9645ba80a004d87b9094b5348ab744e6c8d585e (diff) | |
parent | 1ec900a29e115503ca3a70eba28f2de33ca06228 (diff) |
Merge pull request #5199
1ec900a Remove broken+useless lock/unlock log prints (Matt Corallo)
352ed22 Add merkle blocks test (Matt Corallo)
59ed61b Add RPC call to generate and verify merkle blocks (Matt Corallo)
30da90d Add CMerkleBlock constructor for tx set + block and an empty one (Matt Corallo)
Diffstat (limited to 'src/merkleblock.cpp')
-rw-r--r-- | src/merkleblock.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/merkleblock.cpp b/src/merkleblock.cpp index c48d8cd508..dc87d0377a 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 |