Inside Bitcoin
Opening the selected file…
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
1// Copyright (c) The Bitcoin Core developers2// Distributed under the MIT software license, see the accompanying3// file COPYING or http://www.opensource.org/licenses/mit-license.php.5#include <node/mining_args.h>7#include <common/args.h>8#include <common/messages.h>9#include <consensus/amount.h>10#include <consensus/consensus.h>11#include <node/mining_types.h>12#include <policy/feerate.h>13#include <policy/policy.h>14#include <tinyformat.h>15#include <util/moneystr.h>16#include <util/result.h>17#include <util/translation.h>19#include <cstdint>20#include <optional>21#include <string>22#include <utility>24using common::AmountErrMsg;25using util::Error;26using util::Result;28namespace node {30Result<void> CheckMiningOptions(BlockCreateOptions options, bool use_argnames)31{32options = FlattenMiningOptions(std::move(options));33if (*options.block_reserved_weight < MINIMUM_BLOCK_RESERVED_WEIGHT) {34return Error{Untranslated(strprintf("%s (%d) is lower than minimum safety value of (%d)",35use_argnames ? "-blockreservedweight" : "block_reserved_weight",36*options.block_reserved_weight, MINIMUM_BLOCK_RESERVED_WEIGHT))};37}38if (*options.block_reserved_weight > MAX_BLOCK_WEIGHT) {39return Error{Untranslated(strprintf("%s (%d) exceeds consensus maximum block weight (%d)",40use_argnames ? "-blockreservedweight" : "block_reserved_weight",41*options.block_reserved_weight, MAX_BLOCK_WEIGHT))};42}43if (*options.block_max_weight > MAX_BLOCK_WEIGHT) {44return Error{Untranslated(strprintf("%s (%d) exceeds consensus maximum block weight (%d)",45use_argnames ? "-blockmaxweight" : "block_max_weight",46*options.block_max_weight, MAX_BLOCK_WEIGHT))};47}48if (*options.block_reserved_weight > *options.block_max_weight) {49return Error{Untranslated(strprintf("%s (%d) exceeds %s (%d)",50use_argnames ? "-blockreservedweight" : "block_reserved_weight",51*options.block_reserved_weight,52use_argnames ? "-blockmaxweight" : "block_max_weight",53*options.block_max_weight))};54}55if (options.coinbase_output_max_additional_sigops > MAX_BLOCK_SIGOPS_COST) {56return Error{Untranslated(strprintf("%s (%zu) exceeds consensus maximum block sigops cost (%d)",57"coinbase_output_max_additional_sigops",58options.coinbase_output_max_additional_sigops, MAX_BLOCK_SIGOPS_COST))};59}60return {};61}63Result<BlockCreateOptions> ReadMiningArgs(const ArgsManager& args)64{65BlockCreateOptions options;66if (const auto arg{args.GetArg("-blockmintxfee")}) {67std::optional<CAmount> block_min_tx_fee{ParseMoney(*arg)};68if (!block_min_tx_fee) return Error{AmountErrMsg("blockmintxfee", *arg)};69options.block_min_fee_rate = CFeeRate{*block_min_tx_fee};70}72if (const auto arg{args.GetBoolArg("-printpriority")}) options.print_modified_fee = *arg;74options.block_reserved_weight = args.GetArg<uint64_t>("-blockreservedweight");75options.block_max_weight = args.GetArg<uint64_t>("-blockmaxweight");77if (auto result{CheckMiningOptions(options, /*use_argnames=*/true)}; !result) return Error{util::ErrorString(result)};78return options;79}81BlockCreateOptions FlattenMiningOptions(BlockCreateOptions options)82{83if (!options.block_min_fee_rate) options.block_min_fee_rate = CFeeRate{DEFAULT_BLOCK_MIN_TX_FEE};84if (!options.print_modified_fee) options.print_modified_fee = DEFAULT_PRINT_MODIFIED_FEE;85if (!options.block_reserved_weight) options.block_reserved_weight = DEFAULT_BLOCK_RESERVED_WEIGHT;86if (!options.block_max_weight) options.block_max_weight = DEFAULT_BLOCK_MAX_WEIGHT;87return options;88}90BlockCreateOptions MergeMiningOptions(BlockCreateOptions x, const BlockCreateOptions& y)91{92if (!x.block_min_fee_rate) x.block_min_fee_rate = y.block_min_fee_rate;93if (!x.print_modified_fee) x.print_modified_fee = y.print_modified_fee;94if (!x.block_reserved_weight) x.block_reserved_weight = y.block_reserved_weight;95if (!x.block_max_weight) x.block_max_weight = y.block_max_weight;96return x;97}99} // namespace node
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.