43 if (!
ComputeFilter(filter_index.GetFilterType(), *block_index, expected_filter, blockman)) {
44 BOOST_ERROR(
"ComputeFilter failed on block " << block_index->nHeight);
50 std::vector<BlockFilter> filters;
51 std::vector<uint256> filter_hashes;
53 BOOST_CHECK(filter_index.LookupFilter(block_index, filter));
54 BOOST_CHECK(filter_index.LookupFilterHeader(block_index, filter_header));
55 BOOST_CHECK(filter_index.LookupFilterRange(block_index->nHeight, block_index, filters));
56 BOOST_CHECK(filter_index.LookupFilterHashRange(block_index->nHeight, block_index,
68 filter_hashes.clear();
69 last_header = filter_header;
76 BOOST_REQUIRE(filter_index.
Init());
86 std::vector<BlockFilter> filters;
87 std::vector<uint256> filter_hashes;
89 for (
const CBlockIndex* block_index = m_node.chainman->ActiveChain().Genesis();
90 block_index !=
nullptr;
91 block_index = m_node.chainman->ActiveChain().Next(*block_index)) {
101 BOOST_CHECK(!filter_index.BlockUntilSyncedToCurrentChain());
109 for (block_index = m_node.chainman->ActiveChain().Genesis();
110 block_index !=
nullptr;
111 block_index = m_node.chainman->ActiveChain().Next(*block_index)) {
112 CheckFilterLookups(filter_index, block_index, last_header, m_node.chainman->m_blockman);
120 tip = m_node.chainman->ActiveChain().Tip();
126 std::vector<std::shared_ptr<CBlock>> chainA, chainB;
127 BOOST_REQUIRE(
BuildChain(m_node, tip, coinbase_script_pub_key_A, 10, chainA));
128 BOOST_REQUIRE(
BuildChain(m_node, tip, coinbase_script_pub_key_B, 10, chainB));
131 uint256 chainA_last_header = last_header;
132 for (
size_t i = 0; i < 2; i++) {
133 const auto& block = chainA[i];
134 BOOST_REQUIRE(
Assert(m_node.chainman)->ProcessNewBlock(block,
true,
true,
nullptr));
136 for (
size_t i = 0; i < 2; i++) {
137 const auto& block = chainA[i];
141 block_index = m_node.chainman->m_blockman.LookupBlockIndex(block->GetHash());
144 BOOST_CHECK(filter_index.BlockUntilSyncedToCurrentChain());
145 CheckFilterLookups(filter_index, block_index, chainA_last_header, m_node.chainman->m_blockman);
149 uint256 chainB_last_header = last_header;
150 for (
size_t i = 0; i < 3; i++) {
151 const auto& block = chainB[i];
152 BOOST_REQUIRE(
Assert(m_node.chainman)->ProcessNewBlock(block,
true,
true,
nullptr));
154 for (
size_t i = 0; i < 3; i++) {
155 const auto& block = chainB[i];
159 block_index = m_node.chainman->m_blockman.LookupBlockIndex(block->GetHash());
162 BOOST_CHECK(filter_index.BlockUntilSyncedToCurrentChain());
163 CheckFilterLookups(filter_index, block_index, chainB_last_header, m_node.chainman->m_blockman);
167 chainA_last_header = last_header;
168 for (
size_t i = 0; i < 2; i++) {
169 const auto& block = chainA[i];
173 block_index = m_node.chainman->m_blockman.LookupBlockIndex(block->GetHash());
176 BOOST_CHECK(filter_index.BlockUntilSyncedToCurrentChain());
177 CheckFilterLookups(filter_index, block_index, chainA_last_header, m_node.chainman->m_blockman);
181 for (
size_t i = 2; i < 4; i++) {
182 const auto& block = chainA[i];
183 BOOST_REQUIRE(
Assert(m_node.chainman)->ProcessNewBlock(block,
true,
true,
nullptr));
187 chainA_last_header = last_header;
188 chainB_last_header = last_header;
189 for (
size_t i = 0; i < 3; i++) {
194 block_index = m_node.chainman->m_blockman.LookupBlockIndex(chainA[i]->GetHash());
196 BOOST_CHECK(filter_index.BlockUntilSyncedToCurrentChain());
197 CheckFilterLookups(filter_index, block_index, chainA_last_header, m_node.chainman->m_blockman);
201 block_index = m_node.chainman->m_blockman.LookupBlockIndex(chainB[i]->GetHash());
203 BOOST_CHECK(filter_index.BlockUntilSyncedToCurrentChain());
204 CheckFilterLookups(filter_index, block_index, chainB_last_header, m_node.chainman->m_blockman);
208 std::vector<BlockFilter> filters;
209 std::vector<uint256> filter_hashes;
213 tip = m_node.chainman->ActiveChain().Tip();
223 filter_hashes.clear();
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
bool BuildChain(const NodeContext &node, const CBlockIndex *pindex, const CScript &coinbase_script_pub_key, size_t length, std::vector< std::shared_ptr< CBlock > > &chain)
Build a chain of length coinbase-only blocks on top of pindex (which need not be the active tip,...