Serialize effective amount #231
5 changed files with 17 additions and 4 deletions
10
src/main.cpp
10
src/main.cpp
|
@ -82,6 +82,7 @@ bool fEnableReplacement = DEFAULT_ENABLE_REPLACEMENT;
|
||||||
|
|
||||||
CFeeRate minRelayTxFee = CFeeRate(DEFAULT_MIN_RELAY_TX_FEE);
|
CFeeRate minRelayTxFee = CFeeRate(DEFAULT_MIN_RELAY_TX_FEE);
|
||||||
CAmount maxTxFee = DEFAULT_TRANSACTION_MAXFEE;
|
CAmount maxTxFee = DEFAULT_TRANSACTION_MAXFEE;
|
||||||
|
CAmount minFeePerNameClaimChar = MIN_FEE_PER_NAMECLAIM_CHAR;
|
||||||
|
|
||||||
CTxMemPool mempool(::minRelayTxFee);
|
CTxMemPool mempool(::minRelayTxFee);
|
||||||
FeeFilterRounder filterRounder(::minRelayTxFee);
|
FeeFilterRounder filterRounder(::minRelayTxFee);
|
||||||
|
@ -1194,6 +1195,14 @@ bool AcceptToMemoryPoolWorker(CTxMemPool& pool, CValidationState& state, const C
|
||||||
return state.DoS(0, false, REJECT_NONSTANDARD, "bad-txns-too-many-sigops", false,
|
return state.DoS(0, false, REJECT_NONSTANDARD, "bad-txns-too-many-sigops", false,
|
||||||
strprintf("%d", nSigOps));
|
strprintf("%d", nSigOps));
|
||||||
|
|
||||||
|
// If a ClaimTrie transaction, it must meet the minimum fee requirement due to
|
||||||
|
// it consuming extra system resources, compared to an ordinary transaction
|
||||||
|
CAmount minClaimTrieFee = CalcMinClaimTrieFee(tx, minFeePerNameClaimChar);
|
||||||
|
if (nModifiedFees < minClaimTrieFee) {
|
||||||
|
return state.DoS(0, false, REJECT_INSUFFICIENTFEE, "minimum claim trie fee not met", false,
|
||||||
|
strprintf("%d < %d", nFees, minClaimTrieFee));
|
||||||
|
}
|
||||||
|
|
||||||
CAmount mempoolRejectFee = pool.GetMinFee(GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000).GetFee(nSize);
|
CAmount mempoolRejectFee = pool.GetMinFee(GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000).GetFee(nSize);
|
||||||
if (mempoolRejectFee > 0 && nModifiedFees < mempoolRejectFee) {
|
if (mempoolRejectFee > 0 && nModifiedFees < mempoolRejectFee) {
|
||||||
return state.DoS(0, false, REJECT_INSUFFICIENTFEE, "mempool min fee not met", false, strprintf("%d < %d", nFees, mempoolRejectFee));
|
return state.DoS(0, false, REJECT_INSUFFICIENTFEE, "mempool min fee not met", false, strprintf("%d < %d", nFees, mempoolRejectFee));
|
||||||
|
@ -1201,7 +1210,6 @@ bool AcceptToMemoryPoolWorker(CTxMemPool& pool, CValidationState& state, const C
|
||||||
// Require that free transactions have sufficient priority to be mined in the next block.
|
// Require that free transactions have sufficient priority to be mined in the next block.
|
||||||
return state.DoS(0, false, REJECT_INSUFFICIENTFEE, "insufficient priority");
|
return state.DoS(0, false, REJECT_INSUFFICIENTFEE, "insufficient priority");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Continuously rate-limit free (really, very-low-fee) transactions
|
// Continuously rate-limit free (really, very-low-fee) transactions
|
||||||
// This mitigates 'penny-flooding' -- sending thousands of free transactions just to
|
// This mitigates 'penny-flooding' -- sending thousands of free transactions just to
|
||||||
// be annoying or make others' transactions take longer to confirm.
|
// be annoying or make others' transactions take longer to confirm.
|
||||||
|
|
|
@ -50,7 +50,7 @@ static const bool DEFAULT_WHITELISTFORCERELAY = true;
|
||||||
/** Default for -minrelaytxfee, minimum relay fee for transactions */
|
/** Default for -minrelaytxfee, minimum relay fee for transactions */
|
||||||
static const unsigned int DEFAULT_MIN_RELAY_TX_FEE = 1000;
|
static const unsigned int DEFAULT_MIN_RELAY_TX_FEE = 1000;
|
||||||
//! -maxtxfee default
|
//! -maxtxfee default
|
||||||
static const CAmount DEFAULT_TRANSACTION_MAXFEE = 0.1 * COIN;
|
static const CAmount DEFAULT_TRANSACTION_MAXFEE = 1 * COIN;
|
||||||
//! Discourage users to set fees higher than this amount (in satoshis) per kB
|
//! Discourage users to set fees higher than this amount (in satoshis) per kB
|
||||||
static const CAmount HIGH_TX_FEE_PER_KB = 0.01 * COIN;
|
static const CAmount HIGH_TX_FEE_PER_KB = 0.01 * COIN;
|
||||||
//! -maxtxfee will warn if called with a higher fee than this amount (in satoshis)
|
//! -maxtxfee will warn if called with a higher fee than this amount (in satoshis)
|
||||||
|
@ -163,6 +163,9 @@ extern size_t nCoinCacheUsage;
|
||||||
extern CFeeRate minRelayTxFee;
|
extern CFeeRate minRelayTxFee;
|
||||||
/** Absolute maximum transaction fee (in satoshis) used by wallet and mempool (rejects high fee in sendrawtransaction) */
|
/** Absolute maximum transaction fee (in satoshis) used by wallet and mempool (rejects high fee in sendrawtransaction) */
|
||||||
extern CAmount maxTxFee;
|
extern CAmount maxTxFee;
|
||||||
|
/** Used to calculate minimum fee for claim trie transactions **/
|
||||||
|
extern CAmount minFeePerNameClaimChar;
|
||||||
|
|
||||||
/** If the tip is older than this (in seconds), the node is considered to be in initial block download. */
|
/** If the tip is older than this (in seconds), the node is considered to be in initial block download. */
|
||||||
extern int64_t nMaxTipAge;
|
extern int64_t nMaxTipAge;
|
||||||
extern bool fEnableReplacement;
|
extern bool fEnableReplacement;
|
||||||
|
|
|
@ -751,6 +751,4 @@ BOOST_AUTO_TEST_CASE(claimtriebranching_expire)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
|
@ -153,6 +153,7 @@ TestChain100Setup::~TestChain100Setup()
|
||||||
RegTestingSetup::RegTestingSetup() : TestingSetup(CBaseChainParams::REGTEST)
|
RegTestingSetup::RegTestingSetup() : TestingSetup(CBaseChainParams::REGTEST)
|
||||||
{
|
{
|
||||||
minRelayTxFee = CFeeRate(0);
|
minRelayTxFee = CFeeRate(0);
|
||||||
|
minFeePerNameClaimChar = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
RegTestingSetup::~RegTestingSetup()
|
RegTestingSetup::~RegTestingSetup()
|
||||||
|
|
|
@ -2279,6 +2279,9 @@ bool CWallet::CreateTransaction(const vector<CRecipient>& vecSend, CWalletTx& wt
|
||||||
if (coinControl && nFeeNeeded > 0 && coinControl->nMinimumTotalFee > nFeeNeeded) {
|
if (coinControl && nFeeNeeded > 0 && coinControl->nMinimumTotalFee > nFeeNeeded) {
|
||||||
nFeeNeeded = coinControl->nMinimumTotalFee;
|
nFeeNeeded = coinControl->nMinimumTotalFee;
|
||||||
}
|
}
|
||||||
|
// Make sure we meet the minimum claimtrie fee, pick which ever one is largest
|
||||||
|
CAmount minClaimTrieFee = CalcMinClaimTrieFee(wtxNew, minFeePerNameClaimChar);
|
||||||
|
nFeeNeeded = std::max(nFeeNeeded, minClaimTrieFee);
|
||||||
|
|
||||||
// If we made it here and we aren't even able to meet the relay fee on the next pass, give up
|
// If we made it here and we aren't even able to meet the relay fee on the next pass, give up
|
||||||
// because we must be at the maximum allowed fee.
|
// because we must be at the maximum allowed fee.
|
||||||
|
|
Loading…
Reference in a new issue