mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-13 11:35:20 +01:00
call SignalsOptInRBF instead of checking all inputs
This commit is contained in:
parent
e0df41d7d5
commit
badb9b11a6
2 changed files with 10 additions and 20 deletions
|
@ -11,8 +11,15 @@ class CTransaction;
|
|||
|
||||
static const uint32_t MAX_BIP125_RBF_SEQUENCE = 0xfffffffd;
|
||||
|
||||
// Check whether the sequence numbers on this transaction are signaling
|
||||
// opt-in to replace-by-fee, according to BIP 125
|
||||
/** Check whether the sequence numbers on this transaction are signaling
|
||||
* opt-in to replace-by-fee, according to BIP 125.
|
||||
* Allow opt-out of transaction replacement by setting
|
||||
* nSequence > MAX_BIP125_RBF_SEQUENCE (SEQUENCE_FINAL-2) on all inputs.
|
||||
*
|
||||
* SEQUENCE_FINAL-1 is picked to still allow use of nLockTime by
|
||||
* non-replaceable transactions. All inputs rather than just one
|
||||
* is for the sake of multi-party protocols, where we don't
|
||||
* want a single party to be able to disable replacement. */
|
||||
bool SignalsOptInRBF(const CTransaction &tx);
|
||||
|
||||
#endif // BITCOIN_UTIL_RBF_H
|
||||
|
|
|
@ -605,14 +605,6 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
|
|||
}
|
||||
if (!setConflicts.count(ptxConflicting->GetHash()))
|
||||
{
|
||||
// Allow opt-out of transaction replacement by setting
|
||||
// nSequence > MAX_BIP125_RBF_SEQUENCE (SEQUENCE_FINAL-2) on all inputs.
|
||||
//
|
||||
// SEQUENCE_FINAL-1 is picked to still allow use of nLockTime by
|
||||
// non-replaceable transactions. All inputs rather than just one
|
||||
// is for the sake of multi-party protocols, where we don't
|
||||
// want a single party to be able to disable replacement.
|
||||
//
|
||||
// Transactions that don't explicitly signal replaceability are
|
||||
// *not* replaceable with the current logic, even if one of their
|
||||
// unconfirmed ancestors signals replaceability. This diverges
|
||||
|
@ -620,16 +612,7 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
|
|||
// Applications relying on first-seen mempool behavior should
|
||||
// check all unconfirmed ancestors; otherwise an opt-in ancestor
|
||||
// might be replaced, causing removal of this descendant.
|
||||
bool fReplacementOptOut = true;
|
||||
for (const CTxIn &_txin : ptxConflicting->vin)
|
||||
{
|
||||
if (_txin.nSequence <= MAX_BIP125_RBF_SEQUENCE)
|
||||
{
|
||||
fReplacementOptOut = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (fReplacementOptOut) {
|
||||
if (!SignalsOptInRBF(*ptxConflicting)) {
|
||||
return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "txn-mempool-conflict");
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue