/ src / kernel / chain.h
chain.h
 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  #ifndef BITCOIN_KERNEL_CHAIN_H
 6  #define BITCOIN_KERNEL_CHAIN_H
 7  
 8  #include <attributes.h>
 9  
10  #include <iostream>
11  
12  class CBlock;
13  class CBlockIndex;
14  class CBlockUndo;
15  class uint256;
16  
17  namespace interfaces {
18  //! Block data sent with blockConnected, blockDisconnected notifications.
19  struct BlockInfo {
20      const uint256& hash;
21      const uint256* prev_hash = nullptr;
22      int height = -1;
23      int file_number = -1;
24      unsigned data_pos = 0;
25      const CBlock* data = nullptr;
26      const CBlockUndo* undo_data = nullptr;
27      // The maximum time in the chain up to and including this block.
28      // A timestamp that can only move forward.
29      unsigned int chain_time_max{0};
30  
31      BlockInfo(const uint256& hash LIFETIMEBOUND) : hash(hash) {}
32  };
33  } // namespace interfaces
34  
35  namespace kernel {
36  struct ChainstateRole;
37  //! Return data from block index.
38  interfaces::BlockInfo MakeBlockInfo(const CBlockIndex* block_index, const CBlock* data = nullptr);
39  std::ostream& operator<<(std::ostream& os, const ChainstateRole& role);
40  } // namespace kernel
41  
42  #endif // BITCOIN_KERNEL_CHAIN_H