chain.cpp raw
1 // Copyright (c) 2022-present 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 <kernel/chain.h>
6
7 #include <chain.h>
8 #include <kernel/cs_main.h>
9 #include <kernel/types.h>
10 #include <sync.h>
11 #include <uint256.h>
12
13 class CBlock;
14
15 using kernel::ChainstateRole;
16
17 namespace kernel {
18 interfaces::BlockInfo MakeBlockInfo(const CBlockIndex* index, const CBlock* data)
19 {
20 interfaces::BlockInfo info{index ? *index->phashBlock : uint256::ZERO};
21 if (index) {
22 info.prev_hash = index->pprev ? index->pprev->phashBlock : nullptr;
23 info.height = index->nHeight;
24 info.chain_time_max = index->GetBlockTimeMax();
25 LOCK(::cs_main);
26 info.file_number = index->nFile;
27 info.data_pos = index->nDataPos;
28 }
29 info.data = data;
30 return info;
31 }
32
33 std::ostream& operator<<(std::ostream& os, const ChainstateRole& role) {
34 if (!role.validated) {
35 os << "assumedvalid";
36 } else if (role.historical) {
37 os << "background";
38 } else {
39 os << "normal";
40 }
41 return os;
42 }
43 } // namespace kernel
44