chain.h 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 #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
43