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_CHAINSTATEMANAGER_OPTS_H
6 #define BITCOIN_KERNEL_CHAINSTATEMANAGER_OPTS_H
7 8 #include <kernel/notifications_interface.h>
9 10 #include <arith_uint256.h>
11 #include <dbwrapper.h>
12 #include <script/sigcache.h>
13 #include <txdb.h>
14 #include <uint256.h>
15 #include <util/time.h>
16 17 #include <cstdint>
18 #include <functional>
19 #include <optional>
20 21 class CChainParams;
22 class ValidationSignals;
23 24 static constexpr auto DEFAULT_MAX_TIP_AGE{24h};
25 static constexpr int32_t DEFAULT_PREVOUTFETCH_THREADS{8};
26 27 namespace kernel {
28 29 /**
30 * An options struct for `ChainstateManager`, more ergonomically referred to as
31 * `ChainstateManager::Options` due to the using-declaration in
32 * `ChainstateManager`.
33 */
34 struct ChainstateManagerOpts {
35 const CChainParams& chainparams;
36 fs::path datadir;
37 std::optional<int32_t> check_block_index{};
38 //! If set, it will override the minimum work we will assume exists on some valid chain.
39 std::optional<arith_uint256> minimum_chain_work{};
40 //! If set, it will override the block hash whose ancestors we will assume to have valid scripts without checking them.
41 std::optional<uint256> assumed_valid_block{};
42 //! If the tip is older than this, the node is considered to be in initial block download.
43 std::chrono::seconds max_tip_age{DEFAULT_MAX_TIP_AGE};
44 DBOptions coins_db{};
45 CoinsViewOptions coins_view{};
46 Notifications& notifications;
47 ValidationSignals* signals{nullptr};
48 //! Number of script check worker threads. Zero means no parallel verification.
49 int worker_threads_num{0};
50 //! Number of worker threads used for prefetching block input prevouts. Zero means no parallel fetching.
51 int32_t prevoutfetch_threads_num{DEFAULT_PREVOUTFETCH_THREADS};
52 size_t script_execution_cache_bytes{DEFAULT_SCRIPT_EXECUTION_CACHE_BYTES};
53 size_t signature_cache_bytes{DEFAULT_SIGNATURE_CACHE_BYTES};
54 };
55 56 } // namespace kernel
57 58 #endif // BITCOIN_KERNEL_CHAINSTATEMANAGER_OPTS_H
59