68 std::vector<std::unique_ptr<CBlockFileInfo>> files;
69 files.reserve(files_count);
70 std::vector<std::pair<int, const CBlockFileInfo*>> files_info;
71 files_info.reserve(files_count);
72 for (
int i = 0; i < files_count; i++) {
74 files.push_back(std::make_unique<CBlockFileInfo>(std::move(*file_info)));
75 files_info.emplace_back(i, files.back().get());
83 std::vector<std::unique_ptr<CBlockIndex>> blocks;
84 blocks.reserve(blocks_count);
85 std::vector<const CBlockIndex*> blocks_info;
86 blocks_info.reserve(blocks_count);
87 for (
int i = 0; i < blocks_count; i++) {
89 blocks.push_back(std::make_unique<CBlockIndex>(std::move(header)));
90 blocks.back()->phashBlock = &g_block_hash;
91 blocks_info.push_back(blocks.back().get());
95 block_index.WriteBatchSync(files_info, files_count - 1, blocks_info);
100 for (
const auto& [n, file_info]: files_info) {
101 assert(block_index.ReadBlockFileInfo(n, info));
102 assert(info == *file_info);
107 assert(block_index.ReadLastBlockFile(last_block_file));
108 assert(last_block_file == files_count - 1);
112 block_index.WriteReindexing(
true);
113 block_index.ReadReindexing(reindexing);
115 block_index.WriteReindexing(
false);
116 block_index.ReadReindexing(reindexing);
122 block_index.WriteFlag(flag_name,
true);
123 block_index.ReadFlag(flag_name, flag_value);
125 block_index.WriteFlag(flag_name,
false);
126 block_index.ReadFlag(flag_name, flag_value);
132 const auto inserter = [&](
const uint256&) {
133 return blocks.back().get();
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.