diff --git a/src/merkleblock.cpp b/src/merkleblock.cpp index e453561733eb63..d9edd382e35040 100644 --- a/src/merkleblock.cpp +++ b/src/merkleblock.cpp @@ -19,10 +19,24 @@ CMerkleBlock::CMerkleBlock(const CBlock& block, CBloomFilter& filter) vMatch.reserve(block.vtx.size()); vHashes.reserve(block.vtx.size()); + const static std::set allowedTxTypes = { + TRANSACTION_NORMAL, + TRANSACTION_PROVIDER_REGISTER, + TRANSACTION_PROVIDER_UPDATE_SERVICE, + TRANSACTION_PROVIDER_UPDATE_REGISTRAR, + TRANSACTION_PROVIDER_UPDATE_REVOKE, + TRANSACTION_COINBASE, + }; + for (unsigned int i = 0; i < block.vtx.size(); i++) { - const uint256& hash = block.vtx[i]->GetHash(); - if (filter.IsRelevantAndUpdate(*block.vtx[i])) + const auto& tx = *block.vtx[i]; + if (tx.nVersion == 3 && !allowedTxTypes.count(tx.nType)) { + continue; + } + + const uint256& hash = tx.GetHash(); + if (filter.IsRelevantAndUpdate(tx)) { vMatch.push_back(true); vMatchedTxn.push_back(std::make_pair(i, hash));