/ src / kernel / chain.cpp
chain.cpp
 1  // Copyright (c) 2022 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 <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  }