Branch data Line data Source code
1 : : // Copyright (c) 2012-2021 The Bitcoin Core developers
2 : : // Distributed under the MIT software license, see the accompanying
3 : : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 : :
5 : : #include <merkleblock.h>
6 : : #include <test/util/setup_common.h>
7 : : #include <uint256.h>
8 : :
9 : : #include <boost/test/unit_test.hpp>
10 : :
11 : : #include <set>
12 : : #include <vector>
13 : :
14 : : BOOST_AUTO_TEST_SUITE(merkleblock_tests)
15 : :
16 : : /**
17 : : * Create a CMerkleBlock using a list of txids which will be found in the
18 : : * given block.
19 : : */
20 [ + - + - : 7 : BOOST_AUTO_TEST_CASE(merkleblock_construct_from_txids_found)
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - +
- ]
21 : : {
22 : 1 : CBlock block = getBlock13b8a();
23 : :
24 [ + - ]: 1 : std::set<Txid> txids;
25 : :
26 : : // Last txn in block.
27 [ + - ]: 1 : Txid txhash1{Txid::FromHex("74d681e0e03bafa802c8aa084379aa98d9fcd632ddc2ed9782b586ec87451f20").value()};
28 : :
29 : : // Second txn in block.
30 [ + - ]: 1 : Txid txhash2{Txid::FromHex("f9fc751cb7dc372406a9f8d738d5e6f8f63bab71986a39cf36ee70ee17036d07").value()};
31 : :
32 [ + - ]: 1 : txids.insert(txhash1);
33 [ + - ]: 1 : txids.insert(txhash2);
34 : :
35 [ + - ]: 1 : CMerkleBlock merkleBlock(block, txids);
36 : :
37 [ + - + - : 1 : BOOST_CHECK_EQUAL(merkleBlock.header.GetHash().GetHex(), block.GetHash().GetHex());
+ - + - +
- + - ]
38 : :
39 : : // vMatchedTxn is only used when bloom filter is specified.
40 [ + - + - ]: 1 : BOOST_CHECK_EQUAL(merkleBlock.vMatchedTxn.size(), 0U);
41 : :
42 : 1 : std::vector<uint256> vMatched;
43 : 1 : std::vector<unsigned int> vIndex;
44 : :
45 [ + - + - : 1 : BOOST_CHECK_EQUAL(merkleBlock.txn.ExtractMatches(vMatched, vIndex).GetHex(), block.hashMerkleRoot.GetHex());
+ - + - +
- ]
46 [ + - + - ]: 1 : BOOST_CHECK_EQUAL(vMatched.size(), 2U);
47 : :
48 : : // Ordered by occurrence in depth-first tree traversal.
49 [ + - + - : 1 : BOOST_CHECK_EQUAL(vMatched[0].ToString(), txhash2.ToString());
+ - + - ]
50 [ + - + - ]: 1 : BOOST_CHECK_EQUAL(vIndex[0], 1U);
51 : :
52 [ + - + - : 1 : BOOST_CHECK_EQUAL(vMatched[1].ToString(), txhash1.ToString());
+ - + - +
- ]
53 [ + - + - ]: 1 : BOOST_CHECK_EQUAL(vIndex[1], 8U);
54 : 1 : }
55 : :
56 : :
57 : : /**
58 : : * Create a CMerkleBlock using a list of txids which will not be found in the
59 : : * given block.
60 : : */
61 [ + - + - : 7 : BOOST_AUTO_TEST_CASE(merkleblock_construct_from_txids_not_found)
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - +
- ]
62 : : {
63 : 1 : CBlock block = getBlock13b8a();
64 : :
65 [ + - ]: 1 : std::set<Txid> txids2;
66 [ + - + - ]: 2 : txids2.insert(Txid::FromHex("c0ffee00003bafa802c8aa084379aa98d9fcd632ddc2ed9782b586ec87451f20").value());
67 [ + - ]: 1 : CMerkleBlock merkleBlock(block, txids2);
68 : :
69 [ + - + - : 1 : BOOST_CHECK_EQUAL(merkleBlock.header.GetHash().GetHex(), block.GetHash().GetHex());
+ - + - +
- + - ]
70 [ + - + - ]: 1 : BOOST_CHECK_EQUAL(merkleBlock.vMatchedTxn.size(), 0U);
71 : :
72 : 1 : std::vector<uint256> vMatched;
73 : 1 : std::vector<unsigned int> vIndex;
74 : :
75 [ + - + - : 1 : BOOST_CHECK_EQUAL(merkleBlock.txn.ExtractMatches(vMatched, vIndex).GetHex(), block.hashMerkleRoot.GetHex());
+ - + - +
- ]
76 [ + - + - ]: 1 : BOOST_CHECK_EQUAL(vMatched.size(), 0U);
77 [ + - + - ]: 1 : BOOST_CHECK_EQUAL(vIndex.size(), 0U);
78 : 1 : }
79 : :
80 : : BOOST_AUTO_TEST_SUITE_END()
|