/Users/eugenesiegel/btc/bitcoin/src/node/chainstatemanager_args.cpp
| Line | Count | Source (jump to first uncovered line) | 
| 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 | 51.2k | { | 
| 27 | 51.2k |     if (auto value{args.GetIntArg("-checkblockindex")}) { | 
| 28 |  |         // Interpret bare -checkblockindex argument as 1 instead of 0. | 
| 29 | 0 |         opts.check_block_index = args.GetArg("-checkblockindex")->empty() ? 1 : *value; | 
| 30 | 0 |     } | 
| 31 |  |  | 
| 32 | 51.2k |     if (auto value{args.GetArg("-minimumchainwork")}) { | 
| 33 | 0 |         if (auto min_work{uint256::FromUserHex(*value)}) { | 
| 34 | 0 |             opts.minimum_chain_work = UintToArith256(*min_work); | 
| 35 | 0 |         } else { | 
| 36 | 0 |             return util::Error{Untranslated(strprintf("Invalid minimum work specified (%s), must be up to %d hex digits", *value, uint256::size() * 2))};| Line | Count | Source |  | 1172 | 0 | #define strprintf tfm::format | 
 | 
| 37 | 0 |         } | 
| 38 | 0 |     } | 
| 39 |  |  | 
| 40 | 51.2k |     if (auto value{args.GetArg("-assumevalid")}) { | 
| 41 | 0 |         if (auto block_hash{uint256::FromUserHex(*value)}) { | 
| 42 | 0 |             opts.assumed_valid_block = *block_hash; | 
| 43 | 0 |         } else { | 
| 44 | 0 |             return util::Error{Untranslated(strprintf("Invalid assumevalid block hash specified (%s), must be up to %d hex digits (or 0 to disable)", *value, uint256::size() * 2))};| Line | Count | Source |  | 1172 | 0 | #define strprintf tfm::format | 
 | 
| 45 | 0 |         } | 
| 46 | 0 |     } | 
| 47 |  |  | 
| 48 | 51.2k |     if (auto value{args.GetIntArg("-maxtipage")}) opts.max_tip_age = std::chrono::seconds{*value}0; | 
| 49 |  |  | 
| 50 | 51.2k |     ReadDatabaseArgs(args, opts.coins_db); | 
| 51 | 51.2k |     ReadCoinsViewArgs(args, opts.coins_view); | 
| 52 |  |  | 
| 53 | 51.2k |     int script_threads = args.GetIntArg("-par", DEFAULT_SCRIPTCHECK_THREADS); | 
| 54 | 51.2k |     if (script_threads <= 0) { | 
| 55 |  |         // -par=0 means autodetect (number of cores - 1 script threads) | 
| 56 |  |         // -par=-n means "leave n cores free" (number of cores - n - 1 script threads) | 
| 57 | 51.2k |         script_threads += GetNumCores(); | 
| 58 | 51.2k |     } | 
| 59 |  |     // Subtract 1 because the main thread counts towards the par threads. | 
| 60 | 51.2k |     opts.worker_threads_num = script_threads - 1; | 
| 61 |  |  | 
| 62 | 51.2k |     if (auto max_size = args.GetIntArg("-maxsigcachesize")) { | 
| 63 |  |         // 1. When supplied with a max_size of 0, both the signature cache and | 
| 64 |  |         //    script execution cache create the minimum possible cache (2 | 
| 65 |  |         //    elements). Therefore, we can use 0 as a floor here. | 
| 66 |  |         // 2. Multiply first, divide after to avoid integer truncation. | 
| 67 | 0 |         size_t clamped_size_each = std::max<int64_t>(*max_size, 0) * (1 << 20) / 2; | 
| 68 | 0 |         opts.script_execution_cache_bytes = clamped_size_each; | 
| 69 | 0 |         opts.signature_cache_bytes = clamped_size_each; | 
| 70 | 0 |     } | 
| 71 |  |  | 
| 72 | 51.2k |     return {}; | 
| 73 | 51.2k | } | 
| 74 |  | } // namespace node |