chainstatemanager_args.cpp
1 // Copyright (c) 2022 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 #include <node/chainstatemanager_args.h> 6 7 #include <arith_uint256.h> 8 #include <common/args.h> 9 #include <common/system.h> 10 #include <logging.h> 11 #include <node/coins_view_args.h> 12 #include <node/database_args.h> 13 #include <tinyformat.h> 14 #include <uint256.h> 15 #include <util/result.h> 16 #include <util/strencodings.h> 17 #include <util/translation.h> 18 #include <validation.h> 19 20 #include <algorithm> 21 #include <chrono> 22 #include <string> 23 24 namespace node { 25 util::Result<void> ApplyArgsManOptions(const ArgsManager& args, ChainstateManager::Options& opts) 26 { 27 if (auto value{args.GetBoolArg("-checkblockindex")}) opts.check_block_index = *value; 28 29 if (auto value{args.GetBoolArg("-checkpoints")}) opts.checkpoints_enabled = *value; 30 31 if (auto value{args.GetArg("-minimumchainwork")}) { 32 if (!IsHexNumber(*value)) { 33 return util::Error{strprintf(Untranslated("Invalid non-hex (%s) minimum chain work value specified"), *value)}; 34 } 35 opts.minimum_chain_work = UintToArith256(uint256S(*value)); 36 } 37 38 if (auto value{args.GetArg("-assumevalid")}) opts.assumed_valid_block = uint256S(*value); 39 40 if (auto value{args.GetIntArg("-maxtipage")}) opts.max_tip_age = std::chrono::seconds{*value}; 41 42 ReadDatabaseArgs(args, opts.block_tree_db); 43 ReadDatabaseArgs(args, opts.coins_db); 44 ReadCoinsViewArgs(args, opts.coins_view); 45 46 int script_threads = args.GetIntArg("-par", DEFAULT_SCRIPTCHECK_THREADS); 47 if (script_threads <= 0) { 48 // -par=0 means autodetect (number of cores - 1 script threads) 49 // -par=-n means "leave n cores free" (number of cores - n - 1 script threads) 50 script_threads += GetNumCores(); 51 } 52 // Subtract 1 because the main thread counts towards the par threads. 53 opts.worker_threads_num = std::clamp(script_threads - 1, 0, MAX_SCRIPTCHECK_THREADS); 54 LogPrintf("Script verification uses %d additional threads\n", opts.worker_threads_num); 55 56 return {}; 57 } 58 } // namespace node