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 #ifndef LIMENKA_KERNEL_CHAIN_H
6 #define LIMENKA_KERNEL_CHAIN_H
7 8 #include<iostream>
9 10 class CBlock;
11 class CBlockIndex;
12 namespace interfaces {
13 struct BlockInfo;
14 } // namespace interfaces
15 16 namespace kernel {
17 //! Return data from block index.
18 interfaces::BlockInfo MakeBlockInfo(const CBlockIndex* block_index, const CBlock* data = nullptr);
19 20 } // namespace kernel
21 22 //! This enum describes the various roles a specific Chainstate instance can take.
23 //! Other parts of the system sometimes need to vary in behavior depending on the
24 //! existence of a background validation chainstate, e.g. when building indexes.
25 enum class ChainstateRole {
26 // Single chainstate in use, "normal" IBD mode.
27 NORMAL,
28 29 // Doing IBD-style validation in the background. Implies use of an assumed-valid
30 // chainstate.
31 BACKGROUND,
32 33 // Active assumed-valid chainstate. Implies use of a background IBD chainstate.
34 ASSUMEDVALID,
35 };
36 37 std::ostream& operator<<(std::ostream& os, const ChainstateRole& role);
38 39 #endif // LIMENKA_KERNEL_CHAIN_H
40