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