aboutsummaryrefslogtreecommitdiff
path: root/src/merkleblock.cpp
diff options
context:
space:
mode:
authorWladimir J. van der Laan <[email protected]>2015-04-28 10:02:45 +0200
committerWladimir J. van der Laan <[email protected]>2015-04-28 10:07:25 +0200
commit6364408122210b2fa9f4e135783ff82636ef81c1 (patch)
treecc1737e3bfdae29485b3116606fe615d47680dfa /src/merkleblock.cpp
parentqt: translation update (diff)
parentRemove broken+useless lock/unlock log prints (diff)
downloaddiscoin-6364408122210b2fa9f4e135783ff82636ef81c1.tar.xz
discoin-6364408122210b2fa9f4e135783ff82636ef81c1.zip
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 c48d8cd50..dc87d0377 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