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