mirror of
https://github.com/Retropex/bitcoin.git
synced 2025-05-12 19:20:42 +02:00
add -maxrelaytxfee
option
This commit is contained in:
parent
5f8256608f
commit
76dde29065
@ -703,6 +703,8 @@ void SetupServerArgs(ArgsManager& argsman)
|
|||||||
OptionsCategory::NODE_RELAY);
|
OptionsCategory::NODE_RELAY);
|
||||||
argsman.AddArg("-minrelaytxfee=<amt>", strprintf("Fees (in %s/kvB) smaller than this are considered zero fee for relaying, mining and transaction creation (default: %s)",
|
argsman.AddArg("-minrelaytxfee=<amt>", strprintf("Fees (in %s/kvB) smaller than this are considered zero fee for relaying, mining and transaction creation (default: %s)",
|
||||||
CURRENCY_UNIT, FormatMoney(DEFAULT_MIN_RELAY_TX_FEE)), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
CURRENCY_UNIT, FormatMoney(DEFAULT_MIN_RELAY_TX_FEE)), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
||||||
|
argsman.AddArg("-maxrelaytxfee=<amt>", strprintf("Fees (in %s/kvB) bigger than this are considered zero fee for relaying, mining and transaction creation (set to 0 to disable) (default: %s)",
|
||||||
|
CURRENCY_UNIT, DEFAULT_MAX_RELAY_TX_FEE), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
||||||
argsman.AddArg("-rejectparasites", strprintf("Refuse to relay or mine parasitic overlay protocols (default: %u)", DEFAULT_REJECT_PARASITES), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
argsman.AddArg("-rejectparasites", strprintf("Refuse to relay or mine parasitic overlay protocols (default: %u)", DEFAULT_REJECT_PARASITES), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
||||||
argsman.AddArg("-rejecttokens",
|
argsman.AddArg("-rejecttokens",
|
||||||
strprintf("Refuse to relay or mine transactions involving non-bitcoin tokens (default: %u)",
|
strprintf("Refuse to relay or mine transactions involving non-bitcoin tokens (default: %u)",
|
||||||
|
@ -295,6 +295,9 @@ public:
|
|||||||
//! Relay incremental fee setting (-incrementalrelayfee), reflecting cost of relay.
|
//! Relay incremental fee setting (-incrementalrelayfee), reflecting cost of relay.
|
||||||
virtual CFeeRate relayIncrementalFee() = 0;
|
virtual CFeeRate relayIncrementalFee() = 0;
|
||||||
|
|
||||||
|
//! Relay current maximum fee.
|
||||||
|
virtual CFeeRate relayMaxFee() = 0;
|
||||||
|
|
||||||
//! Relay dust fee setting (-dustrelayfee), reflecting lowest rate it's economical to spend.
|
//! Relay dust fee setting (-dustrelayfee), reflecting lowest rate it's economical to spend.
|
||||||
virtual CFeeRate relayDustFee() = 0;
|
virtual CFeeRate relayDustFee() = 0;
|
||||||
|
|
||||||
|
@ -56,6 +56,7 @@ struct MemPoolOptions {
|
|||||||
CFeeRate incremental_relay_feerate{DEFAULT_INCREMENTAL_RELAY_FEE};
|
CFeeRate incremental_relay_feerate{DEFAULT_INCREMENTAL_RELAY_FEE};
|
||||||
/** A fee rate smaller than this is considered zero fee (for relaying, mining and transaction creation) */
|
/** A fee rate smaller than this is considered zero fee (for relaying, mining and transaction creation) */
|
||||||
CFeeRate min_relay_feerate{DEFAULT_MIN_RELAY_TX_FEE};
|
CFeeRate min_relay_feerate{DEFAULT_MIN_RELAY_TX_FEE};
|
||||||
|
CFeeRate max_relay_feerate{DEFAULT_MAX_RELAY_TX_FEE};
|
||||||
CFeeRate dust_relay_feerate{DUST_RELAY_TX_FEE};
|
CFeeRate dust_relay_feerate{DUST_RELAY_TX_FEE};
|
||||||
CFeeRate dust_relay_feerate_floor{DUST_RELAY_TX_FEE};
|
CFeeRate dust_relay_feerate_floor{DUST_RELAY_TX_FEE};
|
||||||
/** Negative for a target number of blocks, positive for target kB into current mempool. */
|
/** Negative for a target number of blocks, positive for target kB into current mempool. */
|
||||||
|
@ -779,6 +779,11 @@ public:
|
|||||||
if (!m_node.mempool) return CFeeRate{DEFAULT_INCREMENTAL_RELAY_FEE};
|
if (!m_node.mempool) return CFeeRate{DEFAULT_INCREMENTAL_RELAY_FEE};
|
||||||
return m_node.mempool->m_opts.incremental_relay_feerate;
|
return m_node.mempool->m_opts.incremental_relay_feerate;
|
||||||
}
|
}
|
||||||
|
CFeeRate relayMaxFee() override
|
||||||
|
{
|
||||||
|
if (!m_node.mempool) return CFeeRate{DEFAULT_MAX_RELAY_TX_FEE};
|
||||||
|
return m_node.mempool->m_opts.max_relay_feerate;
|
||||||
|
}
|
||||||
CFeeRate relayDustFee() override
|
CFeeRate relayDustFee() override
|
||||||
{
|
{
|
||||||
if (!m_node.mempool) return CFeeRate{DUST_RELAY_TX_FEE};
|
if (!m_node.mempool) return CFeeRate{DUST_RELAY_TX_FEE};
|
||||||
|
@ -122,6 +122,14 @@ util::Result<void> ApplyArgsManOptions(const ArgsManager& argsman, const CChainP
|
|||||||
LogPrintf("Increasing minrelaytxfee to %s to match incrementalrelayfee\n", mempool_opts.min_relay_feerate.ToString());
|
LogPrintf("Increasing minrelaytxfee to %s to match incrementalrelayfee\n", mempool_opts.min_relay_feerate.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (argsman.IsArgSet("-maxrelaytxfee")) {
|
||||||
|
if (std::optional<CAmount> max_relay_feerate = ParseMoney(argsman.GetArg("-maxrelaytxfee", ""))) {
|
||||||
|
mempool_opts.max_relay_feerate = CFeeRate{max_relay_feerate.value()};
|
||||||
|
} else {
|
||||||
|
return util::Error{AmountErrMsg("maxrelayfee", argsman.GetArg("-maxrelaytxfee", ""))};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Feerate used to define dust. Shouldn't be changed lightly as old
|
// Feerate used to define dust. Shouldn't be changed lightly as old
|
||||||
// implementations may inadvertently create non-standard transactions
|
// implementations may inadvertently create non-standard transactions
|
||||||
if (argsman.IsArgSet("-dustrelayfee")) {
|
if (argsman.IsArgSet("-dustrelayfee")) {
|
||||||
|
@ -81,6 +81,8 @@ static const int DEFAULT_DUST_RELAY_MULTIPLIER{3'000};
|
|||||||
static const std::string DEFAULT_SPKREUSE{"allow"};
|
static const std::string DEFAULT_SPKREUSE{"allow"};
|
||||||
/** Default for -minrelaytxfee, minimum relay fee for transactions */
|
/** Default for -minrelaytxfee, minimum relay fee for transactions */
|
||||||
static constexpr unsigned int DEFAULT_MIN_RELAY_TX_FEE{1000};
|
static constexpr unsigned int DEFAULT_MIN_RELAY_TX_FEE{1000};
|
||||||
|
/** Default for -maxrelaytxfee, minimum relay fee for transactions */
|
||||||
|
static constexpr unsigned int DEFAULT_MAX_RELAY_TX_FEE{0};
|
||||||
/** Default for -limitancestorcount, max number of in-mempool ancestors */
|
/** Default for -limitancestorcount, max number of in-mempool ancestors */
|
||||||
static constexpr unsigned int DEFAULT_ANCESTOR_LIMIT{25};
|
static constexpr unsigned int DEFAULT_ANCESTOR_LIMIT{25};
|
||||||
/** Default for -limitancestorsize, maximum kilobytes of tx + all in-mempool ancestors */
|
/** Default for -limitancestorsize, maximum kilobytes of tx + all in-mempool ancestors */
|
||||||
|
@ -1086,6 +1086,12 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
|
|||||||
// feerate later.
|
// feerate later.
|
||||||
if (!args.m_package_feerates && !CheckFeeRate(ws.m_vsize, ws.m_modified_fees, state, args.m_ignore_rejects)) return false;
|
if (!args.m_package_feerates && !CheckFeeRate(ws.m_vsize, ws.m_modified_fees, state, args.m_ignore_rejects)) return false;
|
||||||
|
|
||||||
|
|
||||||
|
if ((ws.m_ptx->version != TRUC_VERSION || m_pool.m_opts.truc_policy != TRUCPolicy::Enforce) && ws.m_modified_fees > m_pool.m_opts.max_relay_feerate.GetFee(ws.m_vsize) && m_pool.m_opts.max_relay_feerate != CFeeRate{0}) {
|
||||||
|
return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "max relay fee met",
|
||||||
|
strprintf("%d < %d", ws.m_modified_fees, m_pool.m_opts.max_relay_feerate.GetFee(ws.m_vsize)));
|
||||||
|
}
|
||||||
|
|
||||||
std::set<Txid> conflicts_as_a_set;
|
std::set<Txid> conflicts_as_a_set;
|
||||||
std::transform(ws.m_conflicts_incl_policy.begin(), ws.m_conflicts_incl_policy.end(),
|
std::transform(ws.m_conflicts_incl_policy.begin(), ws.m_conflicts_incl_policy.end(),
|
||||||
std::inserter(conflicts_as_a_set, conflicts_as_a_set.end()),
|
std::inserter(conflicts_as_a_set, conflicts_as_a_set.end()),
|
||||||
|
Loading…
Reference in New Issue
Block a user