diff --git a/src/init.cpp b/src/init.cpp --- a/src/init.cpp +++ b/src/init.cpp @@ -724,6 +724,11 @@ "block download (default: %u)", DEFAULT_MAX_TIP_AGE)); } + strUsage += HelpMessageOpt( + "-excesseutxocharge=", + strprintf(_("Fees (in %s/kB) to charge per utxo created for" + "relaying, and mining (default: %s)"), + CURRENCY_UNIT, FormatMoney(DEFAULT_UTXO_FEE))); strUsage += HelpMessageOpt( "-minrelaytxfee=", strprintf( @@ -1481,6 +1486,17 @@ nConnectTimeout = GetArg("-timeout", DEFAULT_CONNECT_TIMEOUT); if (nConnectTimeout <= 0) nConnectTimeout = DEFAULT_CONNECT_TIMEOUT; + // Obtain the amount to charge excess UTXO + if (IsArgSet("-excesseutxocharge")) { + Amount n(0); + auto parsed = ParseMoney(GetArg("-excesseutxocharge", ""), n); + if (!parsed || Amount(0) > n) + return InitError(AmountErrMsg("excesseutxocharge", + GetArg("-excesseutxocharge", ""))); + // High fee check is done afterward in CWallet::ParameterInteraction() + ::excessUTXOCharge = n; + } + // Fee-per-kilobyte amount considered the same as "free". If you are mining, // be careful setting this: if you set it to zero then a transaction spammer // can cheaply fill blocks using 1-satoshi-fee transactions. It should be diff --git a/src/validation.h b/src/validation.h --- a/src/validation.h +++ b/src/validation.h @@ -56,6 +56,8 @@ static const bool DEFAULT_WHITELISTFORCERELAY = true; /** Default for -minrelaytxfee, minimum relay fee for transactions */ static const Amount DEFAULT_MIN_RELAY_TX_FEE(1000); +/** Default for -excesseutxocharge for transactions transactions */ +static const Amount DEFAULT_UTXO_FEE(0); //! -maxtxfee default static const Amount DEFAULT_TRANSACTION_MAXFEE(COIN / 10); //! Discourage users to set fees higher than this amount (in satoshis) per kB @@ -185,6 +187,9 @@ extern bool fCheckpointsEnabled; extern size_t nCoinCacheUsage; +/** Amount to charge for creation of excessive utxos */ +extern Amount excessUTXOCharge; + /** A fee rate smaller than this is considered zero fee (for relaying, mining * and transaction creation) */ extern CFeeRate minRelayTxFee; diff --git a/src/validation.cpp b/src/validation.cpp --- a/src/validation.cpp +++ b/src/validation.cpp @@ -82,6 +82,7 @@ uint256 hashAssumeValid; CFeeRate minRelayTxFee = CFeeRate(DEFAULT_MIN_RELAY_TX_FEE); +Amount excessUTXOCharge = Amount(DEFAULT_UTXO_FEE); Amount maxTxFee = DEFAULT_TRANSACTION_MAXFEE; CTxMemPool mempool(::minRelayTxFee);