aboutsummaryrefslogtreecommitdiff
path: root/src/validation.cpp
diff options
context:
space:
mode:
authorglozow <gloriajzhao@gmail.com>2021-08-11 15:51:41 +0100
committerglozow <gloriajzhao@gmail.com>2021-09-02 16:23:27 +0100
commitac761f0a23c9c469fa00885edf3d5c9ae7c6a2b3 (patch)
tree02267b82f3a9754be5d06e6769b1f8d70c129af4 /src/validation.cpp
parent9c2f9f89846264b503d5573341bb78cf609cbc5e (diff)
downloadbitcoin-ac761f0a23c9c469fa00885edf3d5c9ae7c6a2b3.tar.xz
MOVEONLY: fee checks (Rules 3 and 4) to policy/rbf
Diffstat (limited to 'src/validation.cpp')
-rw-r--r--src/validation.cpp25
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;