Changeset View
Changeset View
Standalone View
Standalone View
src/test/bloom_tests.cpp
Show First 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | BOOST_CHECK_MESSAGE( | ||||
"Bloom filter doesn't contain just-inserted object (3)!"); | "Bloom filter doesn't contain just-inserted object (3)!"); | ||||
CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); | CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); | ||||
stream << filter; | stream << filter; | ||||
std::vector<uint8_t> vch = ParseHex("03614e9b050000000000000001"); | std::vector<uint8_t> vch = ParseHex("03614e9b050000000000000001"); | ||||
std::vector<char> expected(vch.size()); | std::vector<char> expected(vch.size()); | ||||
for (unsigned int i = 0; i < vch.size(); i++) | for (size_t i = 0; i < vch.size(); i++) { | ||||
expected[i] = (char)vch[i]; | expected[i] = (char)vch[i]; | ||||
} | |||||
BOOST_CHECK_EQUAL_COLLECTIONS(stream.begin(), stream.end(), | BOOST_CHECK_EQUAL_COLLECTIONS(stream.begin(), stream.end(), | ||||
expected.begin(), expected.end()); | expected.begin(), expected.end()); | ||||
BOOST_CHECK_MESSAGE( | BOOST_CHECK_MESSAGE( | ||||
filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f0950c8")), | filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f0950c8")), | ||||
"Bloom filter doesn't contain just-inserted object!"); | "Bloom filter doesn't contain just-inserted object!"); | ||||
filter.clear(); | filter.clear(); | ||||
Show All 26 Lines | BOOST_CHECK_MESSAGE( | ||||
"Bloom filter doesn't contain just-inserted object (3)!"); | "Bloom filter doesn't contain just-inserted object (3)!"); | ||||
CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); | CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); | ||||
stream << filter; | stream << filter; | ||||
std::vector<uint8_t> vch = ParseHex("03ce4299050000000100008001"); | std::vector<uint8_t> vch = ParseHex("03ce4299050000000100008001"); | ||||
std::vector<char> expected(vch.size()); | std::vector<char> expected(vch.size()); | ||||
for (unsigned int i = 0; i < vch.size(); i++) | for (size_t i = 0; i < vch.size(); i++) { | ||||
expected[i] = (char)vch[i]; | expected[i] = (char)vch[i]; | ||||
} | |||||
BOOST_CHECK_EQUAL_COLLECTIONS(stream.begin(), stream.end(), | BOOST_CHECK_EQUAL_COLLECTIONS(stream.begin(), stream.end(), | ||||
expected.begin(), expected.end()); | expected.begin(), expected.end()); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(bloom_create_insert_key) { | BOOST_AUTO_TEST_CASE(bloom_create_insert_key) { | ||||
std::string strSecret = | std::string strSecret = | ||||
std::string("5Kg1gnAjaLfKiwhhPpGS3QfRg2m6awQvaj98JCZBZQ5SuS2F15C"); | std::string("5Kg1gnAjaLfKiwhhPpGS3QfRg2m6awQvaj98JCZBZQ5SuS2F15C"); | ||||
Show All 10 Lines | BOOST_AUTO_TEST_CASE(bloom_create_insert_key) { | ||||
filter.insert(std::vector<uint8_t>(hash.begin(), hash.end())); | filter.insert(std::vector<uint8_t>(hash.begin(), hash.end())); | ||||
CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); | CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); | ||||
stream << filter; | stream << filter; | ||||
std::vector<uint8_t> vch = ParseHex("038fc16b080000000000000001"); | std::vector<uint8_t> vch = ParseHex("038fc16b080000000000000001"); | ||||
std::vector<char> expected(vch.size()); | std::vector<char> expected(vch.size()); | ||||
for (unsigned int i = 0; i < vch.size(); i++) | for (size_t i = 0; i < vch.size(); i++) { | ||||
expected[i] = (char)vch[i]; | expected[i] = (char)vch[i]; | ||||
} | |||||
BOOST_CHECK_EQUAL_COLLECTIONS(stream.begin(), stream.end(), | BOOST_CHECK_EQUAL_COLLECTIONS(stream.begin(), stream.end(), | ||||
expected.begin(), expected.end()); | expected.begin(), expected.end()); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(bloom_match) { | BOOST_AUTO_TEST_CASE(bloom_match) { | ||||
// Random real transaction | // Random real transaction | ||||
// (b4749f017444b051c44dfd2720e88f314ff94f3dd6d56d40ef65854fcd7fff6b) | // (b4749f017444b051c44dfd2720e88f314ff94f3dd6d56d40ef65854fcd7fff6b) | ||||
▲ Show 20 Lines • Show All 86 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(bloom_match) { | ||||
BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), | BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), | ||||
"Simple Bloom filter didn't match COutPoint"); | "Simple Bloom filter didn't match COutPoint"); | ||||
filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL); | filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL); | ||||
COutPoint prevOutPoint(uint256S("0x90c122d70786e899529d71dbeba91ba216982fb6" | COutPoint prevOutPoint(uint256S("0x90c122d70786e899529d71dbeba91ba216982fb6" | ||||
"ba58f3bdaab65e73b7e9260b"), | "ba58f3bdaab65e73b7e9260b"), | ||||
0); | 0); | ||||
{ | { | ||||
std::vector<uint8_t> data(32 + sizeof(unsigned int)); | std::vector<uint8_t> data(32 + sizeof(uint32_t)); | ||||
memcpy(&data[0], prevOutPoint.GetTxId().begin(), 32); | memcpy(&data[0], prevOutPoint.GetTxId().begin(), 32); | ||||
uint32_t n = prevOutPoint.GetN(); | uint32_t n = prevOutPoint.GetN(); | ||||
memcpy(&data[32], &n, sizeof(uint32_t)); | memcpy(&data[32], &n, sizeof(uint32_t)); | ||||
filter.insert(data); | filter.insert(data); | ||||
} | } | ||||
BOOST_CHECK_MESSAGE( | BOOST_CHECK_MESSAGE( | ||||
filter.IsRelevantAndUpdate(tx), | filter.IsRelevantAndUpdate(tx), | ||||
"Simple Bloom filter didn't match manually serialized COutPoint"); | "Simple Bloom filter didn't match manually serialized COutPoint"); | ||||
▲ Show 20 Lines • Show All 133 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(merkle_block_1) { | ||||
// Match the last transaction | // Match the last transaction | ||||
filter.insert(uint256S( | filter.insert(uint256S( | ||||
"0x74d681e0e03bafa802c8aa084379aa98d9fcd632ddc2ed9782b586ec87451f20")); | "0x74d681e0e03bafa802c8aa084379aa98d9fcd632ddc2ed9782b586ec87451f20")); | ||||
CMerkleBlock merkleBlock(block, filter); | CMerkleBlock merkleBlock(block, filter); | ||||
BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); | BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); | BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); | ||||
std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0]; | std::pair<size_t, uint256> pair = merkleBlock.vMatchedTxn[0]; | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == | BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == | ||||
uint256S("0x74d681e0e03bafa802c8aa084379aa98d9fcd632ddc2ed9782b" | uint256S("0x74d681e0e03bafa802c8aa084379aa98d9fcd632ddc2ed9782b" | ||||
"586ec87451f20")); | "586ec87451f20")); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 8); | BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 8); | ||||
std::vector<uint256> vMatched; | std::vector<uint256> vMatched; | ||||
std::vector<unsigned int> vIndex; | std::vector<size_t> vIndex; | ||||
BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | ||||
block.hashMerkleRoot); | block.hashMerkleRoot); | ||||
BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | ||||
for (unsigned int i = 0; i < vMatched.size(); i++) | for (size_t i = 0; i < vMatched.size(); i++) { | ||||
BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | ||||
} | |||||
// Also match the 8th transaction | // Also match the 8th transaction | ||||
filter.insert(uint256S( | filter.insert(uint256S( | ||||
"0xdd1fd2a6fc16404faf339881a90adbde7f4f728691ac62e8f168809cdfae1053")); | "0xdd1fd2a6fc16404faf339881a90adbde7f4f728691ac62e8f168809cdfae1053")); | ||||
merkleBlock = CMerkleBlock(block, filter); | merkleBlock = CMerkleBlock(block, filter); | ||||
BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); | BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 2); | BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 2); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[1] == pair); | BOOST_CHECK(merkleBlock.vMatchedTxn[1] == pair); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == | BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == | ||||
uint256S("0xdd1fd2a6fc16404faf339881a90adbde7f4f728691ac62e8f16" | uint256S("0xdd1fd2a6fc16404faf339881a90adbde7f4f728691ac62e8f16" | ||||
"8809cdfae1053")); | "8809cdfae1053")); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 7); | BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 7); | ||||
BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | ||||
block.hashMerkleRoot); | block.hashMerkleRoot); | ||||
BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | ||||
for (unsigned int i = 0; i < vMatched.size(); i++) | for (size_t i = 0; i < vMatched.size(); i++) { | ||||
BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | ||||
} | } | ||||
} | |||||
BOOST_AUTO_TEST_CASE(merkle_block_2) { | BOOST_AUTO_TEST_CASE(merkle_block_2) { | ||||
// Random real block | // Random real block | ||||
// (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34ae6) | // (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34ae6) | ||||
// With 4 txes | // With 4 txes | ||||
CBlock block; | CBlock block; | ||||
CDataStream stream( | CDataStream stream( | ||||
ParseHex( | ParseHex( | ||||
▲ Show 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(merkle_block_2) { | ||||
// Match the first transaction | // Match the first transaction | ||||
filter.insert(uint256S( | filter.insert(uint256S( | ||||
"0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70")); | "0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70")); | ||||
CMerkleBlock merkleBlock(block, filter); | CMerkleBlock merkleBlock(block, filter); | ||||
BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); | BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); | BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); | ||||
std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0]; | std::pair<size_t, uint256> pair = merkleBlock.vMatchedTxn[0]; | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == | BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == | ||||
uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df" | uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df" | ||||
"5b47aecb93b70")); | "5b47aecb93b70")); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0); | BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0); | ||||
std::vector<uint256> vMatched; | std::vector<uint256> vMatched; | ||||
std::vector<unsigned int> vIndex; | std::vector<size_t> vIndex; | ||||
BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | ||||
block.hashMerkleRoot); | block.hashMerkleRoot); | ||||
BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | ||||
for (unsigned int i = 0; i < vMatched.size(); i++) | for (size_t i = 0; i < vMatched.size(); i++) { | ||||
BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | ||||
} | |||||
// Match an output from the second transaction (the pubkey for address | // Match an output from the second transaction (the pubkey for address | ||||
// 1DZTzaBHUDM7T3QvUKBz4qXMRpkg8jsfB5) | // 1DZTzaBHUDM7T3QvUKBz4qXMRpkg8jsfB5) | ||||
// This should match the third transaction because it spends the output | // This should match the third transaction because it spends the output | ||||
// matched | // matched | ||||
// It also matches the fourth transaction, which spends to the pubkey again | // It also matches the fourth transaction, which spends to the pubkey again | ||||
filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad" | filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad" | ||||
"769f02032cb86a5eb5e56842e92e19141d60a01928f8dd2c875" | "769f02032cb86a5eb5e56842e92e19141d60a01928f8dd2c875" | ||||
Show All 19 Lines | BOOST_AUTO_TEST_CASE(merkle_block_2) { | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[3].second == | BOOST_CHECK(merkleBlock.vMatchedTxn[3].second == | ||||
uint256S("0x3c1d7e82342158e4109df2e0b6348b6e84e403d8b4046d70076" | uint256S("0x3c1d7e82342158e4109df2e0b6348b6e84e403d8b4046d70076" | ||||
"63ace63cddb23")); | "63ace63cddb23")); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[3].first == 3); | BOOST_CHECK(merkleBlock.vMatchedTxn[3].first == 3); | ||||
BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | ||||
block.hashMerkleRoot); | block.hashMerkleRoot); | ||||
BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | ||||
for (unsigned int i = 0; i < vMatched.size(); i++) | for (size_t i = 0; i < vMatched.size(); i++) { | ||||
BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | ||||
} | } | ||||
} | |||||
BOOST_AUTO_TEST_CASE(merkle_block_2_with_update_none) { | BOOST_AUTO_TEST_CASE(merkle_block_2_with_update_none) { | ||||
// Random real block | // Random real block | ||||
// (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34ae6) | // (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34ae6) | ||||
// With 4 txes | // With 4 txes | ||||
CBlock block; | CBlock block; | ||||
CDataStream stream( | CDataStream stream( | ||||
ParseHex( | ParseHex( | ||||
▲ Show 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(merkle_block_2_with_update_none) { | ||||
// Match the first transaction | // Match the first transaction | ||||
filter.insert(uint256S( | filter.insert(uint256S( | ||||
"0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70")); | "0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70")); | ||||
CMerkleBlock merkleBlock(block, filter); | CMerkleBlock merkleBlock(block, filter); | ||||
BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); | BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); | BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); | ||||
std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0]; | std::pair<size_t, uint256> pair = merkleBlock.vMatchedTxn[0]; | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == | BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == | ||||
uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df" | uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df" | ||||
"5b47aecb93b70")); | "5b47aecb93b70")); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0); | BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0); | ||||
std::vector<uint256> vMatched; | std::vector<uint256> vMatched; | ||||
std::vector<unsigned int> vIndex; | std::vector<size_t> vIndex; | ||||
BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | ||||
block.hashMerkleRoot); | block.hashMerkleRoot); | ||||
BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | ||||
for (unsigned int i = 0; i < vMatched.size(); i++) | for (size_t i = 0; i < vMatched.size(); i++) { | ||||
BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | ||||
} | |||||
// Match an output from the second transaction (the pubkey for address | // Match an output from the second transaction (the pubkey for address | ||||
// 1DZTzaBHUDM7T3QvUKBz4qXMRpkg8jsfB5) | // 1DZTzaBHUDM7T3QvUKBz4qXMRpkg8jsfB5) | ||||
// This should not match the third transaction though it spends the output | // This should not match the third transaction though it spends the output | ||||
// matched | // matched | ||||
// It will match the fourth transaction, which has another pay-to-pubkey | // It will match the fourth transaction, which has another pay-to-pubkey | ||||
// output to the same address | // output to the same address | ||||
filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad" | filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad" | ||||
Show All 15 Lines | BOOST_AUTO_TEST_CASE(merkle_block_2_with_update_none) { | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == | BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == | ||||
uint256S("0x3c1d7e82342158e4109df2e0b6348b6e84e403d8b4046d70076" | uint256S("0x3c1d7e82342158e4109df2e0b6348b6e84e403d8b4046d70076" | ||||
"63ace63cddb23")); | "63ace63cddb23")); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 3); | BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 3); | ||||
BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | ||||
block.hashMerkleRoot); | block.hashMerkleRoot); | ||||
BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | ||||
for (unsigned int i = 0; i < vMatched.size(); i++) | for (size_t i = 0; i < vMatched.size(); i++) { | ||||
BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | ||||
} | } | ||||
} | |||||
BOOST_AUTO_TEST_CASE(merkle_block_3_and_serialize) { | BOOST_AUTO_TEST_CASE(merkle_block_3_and_serialize) { | ||||
// Random real block | // Random real block | ||||
// (000000000000dab0130bbcc991d3d7ae6b81aa6f50a798888dfe62337458dc45) | // (000000000000dab0130bbcc991d3d7ae6b81aa6f50a798888dfe62337458dc45) | ||||
// With one tx | // With one tx | ||||
CBlock block; | CBlock block; | ||||
CDataStream stream( | CDataStream stream( | ||||
ParseHex("0100000079cda856b143d9db2c1caff01d1aecc8630d30625d10e8b4b8b00" | ParseHex("0100000079cda856b143d9db2c1caff01d1aecc8630d30625d10e8b4b8b00" | ||||
Show All 18 Lines | BOOST_AUTO_TEST_CASE(merkle_block_3_and_serialize) { | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); | BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == | BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == | ||||
uint256S("0x63194f18be0af63f2c6bc9dc0f777cbefed3d9415c4af83f3ee" | uint256S("0x63194f18be0af63f2c6bc9dc0f777cbefed3d9415c4af83f3ee" | ||||
"3a3d669c00cb5")); | "3a3d669c00cb5")); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0); | BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0); | ||||
std::vector<uint256> vMatched; | std::vector<uint256> vMatched; | ||||
std::vector<unsigned int> vIndex; | std::vector<size_t> vIndex; | ||||
BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | ||||
block.hashMerkleRoot); | block.hashMerkleRoot); | ||||
BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | ||||
for (unsigned int i = 0; i < vMatched.size(); i++) | for (size_t i = 0; i < vMatched.size(); i++) { | ||||
BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | ||||
} | |||||
CDataStream merkleStream(SER_NETWORK, PROTOCOL_VERSION); | CDataStream merkleStream(SER_NETWORK, PROTOCOL_VERSION); | ||||
merkleStream << merkleBlock; | merkleStream << merkleBlock; | ||||
std::vector<uint8_t> vch = | std::vector<uint8_t> vch = | ||||
ParseHex("0100000079cda856b143d9db2c1caff01d1aecc8630d30625d10e8b4b8b00" | ParseHex("0100000079cda856b143d9db2c1caff01d1aecc8630d30625d10e8b4b8b00" | ||||
"00000000000b50cc069d6a3e33e3ff84a5c41d9d3febe7c770fdcc96b2c3f" | "00000000000b50cc069d6a3e33e3ff84a5c41d9d3febe7c770fdcc96b2c3f" | ||||
"f60abe184f196367291b4d4c86041b8fa45d630100000001b50cc069d6a3e" | "f60abe184f196367291b4d4c86041b8fa45d630100000001b50cc069d6a3e" | ||||
"33e3ff84a5c41d9d3febe7c770fdcc96b2c3ff60abe184f19630101"); | "33e3ff84a5c41d9d3febe7c770fdcc96b2c3ff60abe184f19630101"); | ||||
std::vector<char> expected(vch.size()); | std::vector<char> expected(vch.size()); | ||||
for (unsigned int i = 0; i < vch.size(); i++) | for (size_t i = 0; i < vch.size(); i++) { | ||||
expected[i] = (char)vch[i]; | expected[i] = (char)vch[i]; | ||||
} | |||||
BOOST_CHECK_EQUAL_COLLECTIONS(expected.begin(), expected.end(), | BOOST_CHECK_EQUAL_COLLECTIONS(expected.begin(), expected.end(), | ||||
merkleStream.begin(), merkleStream.end()); | merkleStream.begin(), merkleStream.end()); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(merkle_block_4) { | BOOST_AUTO_TEST_CASE(merkle_block_4) { | ||||
// Random real block | // Random real block | ||||
// (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6dea4) | // (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6dea4) | ||||
▲ Show 20 Lines • Show All 86 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(merkle_block_4) { | ||||
// Match the last transaction | // Match the last transaction | ||||
filter.insert(uint256S( | filter.insert(uint256S( | ||||
"0x0a2a92f0bda4727d0a13eaddf4dd9ac6b5c61a1429e6b2b818f19b15df0ac154")); | "0x0a2a92f0bda4727d0a13eaddf4dd9ac6b5c61a1429e6b2b818f19b15df0ac154")); | ||||
CMerkleBlock merkleBlock(block, filter); | CMerkleBlock merkleBlock(block, filter); | ||||
BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); | BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); | BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); | ||||
std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0]; | std::pair<size_t, uint256> pair = merkleBlock.vMatchedTxn[0]; | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == | BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == | ||||
uint256S("0x0a2a92f0bda4727d0a13eaddf4dd9ac6b5c61a1429e6b2b818f" | uint256S("0x0a2a92f0bda4727d0a13eaddf4dd9ac6b5c61a1429e6b2b818f" | ||||
"19b15df0ac154")); | "19b15df0ac154")); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 6); | BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 6); | ||||
std::vector<uint256> vMatched; | std::vector<uint256> vMatched; | ||||
std::vector<unsigned int> vIndex; | std::vector<size_t> vIndex; | ||||
BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | ||||
block.hashMerkleRoot); | block.hashMerkleRoot); | ||||
BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | ||||
for (unsigned int i = 0; i < vMatched.size(); i++) | for (size_t i = 0; i < vMatched.size(); i++) { | ||||
BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | ||||
} | |||||
// Also match the 4th transaction | // Also match the 4th transaction | ||||
filter.insert(uint256S( | filter.insert(uint256S( | ||||
"0x02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041")); | "0x02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041")); | ||||
merkleBlock = CMerkleBlock(block, filter); | merkleBlock = CMerkleBlock(block, filter); | ||||
BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); | BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 2); | BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 2); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == | BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == | ||||
uint256S("0x02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de673" | uint256S("0x02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de673" | ||||
"26471df5bc041")); | "26471df5bc041")); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 3); | BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 3); | ||||
BOOST_CHECK(merkleBlock.vMatchedTxn[1] == pair); | BOOST_CHECK(merkleBlock.vMatchedTxn[1] == pair); | ||||
BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == | ||||
block.hashMerkleRoot); | block.hashMerkleRoot); | ||||
BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); | ||||
for (unsigned int i = 0; i < vMatched.size(); i++) | for (size_t i = 0; i < vMatched.size(); i++) { | ||||
BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); | ||||
} | } | ||||
} | |||||
BOOST_AUTO_TEST_CASE(merkle_block_4_test_p2pubkey_only) { | BOOST_AUTO_TEST_CASE(merkle_block_4_test_p2pubkey_only) { | ||||
// Random real block | // Random real block | ||||
// (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6dea4) | // (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6dea4) | ||||
// With 7 txes | // With 7 txes | ||||
CBlock block; | CBlock block; | ||||
CDataStream stream( | CDataStream stream( | ||||
ParseHex( | ParseHex( | ||||
▲ Show 20 Lines • Show All 292 Lines • Show Last 20 Lines |