diff options
author | glozow <gloriajzhao@gmail.com> | 2021-08-11 15:51:41 +0100 |
---|---|---|
committer | glozow <gloriajzhao@gmail.com> | 2021-09-02 16:23:27 +0100 |
commit | ac761f0a23c9c469fa00885edf3d5c9ae7c6a2b3 (patch) | |
tree | 02267b82f3a9754be5d06e6769b1f8d70c129af4 /src/validation.cpp | |
parent | 9c2f9f89846264b503d5573341bb78cf609cbc5e (diff) |
MOVEONLY: fee checks (Rules 3 and 4) to policy/rbf
Diffstat (limited to 'src/validation.cpp')
-rw-r--r-- | src/validation.cpp | 25 |
1 files changed, 3 insertions, 22 deletions
diff --git a/src/validation.cpp b/src/validation.cpp index b0403bffd2..e1d218e358 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -798,32 +798,13 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws) } // Check if it's economically rational to mine this transaction rather - // than the ones it replaces. + // than the ones it replaces. Enforce Rules #3 and #4. for (CTxMemPool::txiter it : allConflicting) { nConflictingFees += it->GetModifiedFee(); nConflictingSize += it->GetTxSize(); } - - // The replacement must pay greater fees than the transactions it - // replaces - if we did the bandwidth used by those conflicting - // transactions would not be paid for. - if (nModifiedFees < nConflictingFees) - { - return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "insufficient fee", - strprintf("rejecting replacement %s, less fees than conflicting txs; %s < %s", - hash.ToString(), FormatMoney(nModifiedFees), FormatMoney(nConflictingFees))); - } - - // Finally in addition to paying more fees than the conflicts the - // new transaction must pay for its own bandwidth. - CAmount nDeltaFees = nModifiedFees - nConflictingFees; - if (nDeltaFees < ::incrementalRelayFee.GetFee(nSize)) - { - return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "insufficient fee", - strprintf("rejecting replacement %s, not enough additional fees to relay; %s < %s", - hash.ToString(), - FormatMoney(nDeltaFees), - FormatMoney(::incrementalRelayFee.GetFee(nSize)))); + if (const auto err_string{PaysForRBF(nConflictingFees, nModifiedFees, nSize, hash)}) { + return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "insufficient fee", *err_string); } } return true; |