From 2eb0eeda39cab997f9a5f817f7c12e7fffeaf35a Mon Sep 17 00:00:00 2001 From: Antoine Riard Date: Thu, 13 May 2021 12:35:33 -0400 Subject: validation: document lack of inherited signaling in RBF policy --- src/validation.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/validation.cpp b/src/validation.cpp index 4f9b8687b7..9826616cb2 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -625,10 +625,13 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws) // is for the sake of multi-party protocols, where we don't // want a single party to be able to disable replacement. // - // The opt-out ignores descendants as anyone relying on - // first-seen mempool behavior should be checking all - // unconfirmed ancestors anyway; doing otherwise is hopelessly - // insecure. + // 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 + // from BIP125's inherited signaling description (see CVE-2021-31876). + // 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) { -- cgit v1.2.3