aboutsummaryrefslogtreecommitdiff
path: root/src/merkleblock.cpp
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2015-04-28 10:02:45 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2015-04-28 10:07:25 +0200
commit6364408122210b2fa9f4e135783ff82636ef81c1 (patch)
treecc1737e3bfdae29485b3116606fe615d47680dfa /src/merkleblock.cpp
parentf9645ba80a004d87b9094b5348ab744e6c8d585e (diff)
parent1ec900a29e115503ca3a70eba28f2de33ca06228 (diff)
downloadbitcoin-6364408122210b2fa9f4e135783ff82636ef81c1.tar.xz
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.cpp23
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