Bitcoin Core  27.99.0
P2P Digital Currency
chain.cpp
Go to the documentation of this file.
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 {
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 }
Definition: block.h:69
The block chain is a tree shaped structure starting with the genesis block at the root,...
Definition: chain.h:141
CBlockIndex * pprev
pointer to the index of the predecessor of this block
Definition: chain.h:147
int64_t GetBlockTimeMax() const
Definition: chain.h:272
int nHeight
height of the entry in the chain. The genesis block has height 0
Definition: chain.h:153
const uint256 * phashBlock
pointer to the hash of the block, if any. Memory is owned by this CBlockIndex
Definition: chain.h:144
static const uint256 ZERO
Definition: uint256.h:111
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
Definition: cs_main.cpp:8
std::ostream & operator<<(std::ostream &os, const ChainstateRole &role)
Definition: chain.cpp:30
ChainstateRole
This enum describes the various roles a specific Chainstate instance can take.
Definition: chain.h:25
interfaces::BlockInfo MakeBlockInfo(const CBlockIndex *index, const CBlock *data)
Return data from block index.
Definition: chain.cpp:14
Block data sent with blockConnected, blockDisconnected notifications.
Definition: chain.h:84
#define LOCK(cs)
Definition: sync.h:257