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