chainstatemanager_opts.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_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