Enforce minimum RBF feerate on counterparty tx_init_rbf#4569
Enforce minimum RBF feerate on counterparty tx_init_rbf#4569wpaulino merged 2 commits intolightningdevkit:mainfrom
tx_init_rbf#4569Conversation
|
👋 Thanks for assigning @wpaulino as a reviewer! |
| // Acceptor-side: a counterparty feerate that satisfies the spec's 25/24 rule (264) is | ||
| // accepted, even though our own RBF floor (+25 sat/kwu = 278) is higher. | ||
| // Acceptor-side: a counterparty feerate that only satisfies the bare 25/24 rule (264) is | ||
| // rejected — the spec requires max(prev + 25, ceil(prev * 25/24)) = 278 at low feerates. |
There was a problem hiding this comment.
Nit: the comment says ceil(prev * 25/24) but the production min_rbf_feerate now uses floor division (* 25 / 24). Should read floor(prev * 25/24).
(The numeric result is the same here since the flat increment dominates at 253 sat/kwu, but the comment is misleading about the rounding direction.)
| // rejected — the spec requires max(prev + 25, ceil(prev * 25/24)) = 278 at low feerates. | |
| // rejected — the spec requires max(prev + 25, floor(prev * 25/24)) = 278 at low feerates. |
|
I've thoroughly reviewed the entire diff. The changes are correct:
No new issues beyond my prior review comment (line 4604 nit about No new issues found. The only issue from this review was already posted in a prior pass ( |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #4569 +/- ##
==========================================
- Coverage 87.09% 87.01% -0.09%
==========================================
Files 163 163
Lines 108856 109002 +146
Branches 108856 109002 +146
==========================================
+ Hits 94808 94844 +36
- Misses 11563 11674 +111
+ Partials 2485 2484 -1
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
The spec's tx_init_rbf recipient requirements now mandate rejecting a feerate below max(prev + 25 sat/kwu, ceil(prev * 25/24)), matching the sender requirement. Previously we only enforced the 25/24 rule on counterparties. Reuse the existing min_rbf_feerate function for both our own and counterparty validation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The spec says the 25/24 multiplicative feerate is "rounded down", but min_rbf_feerate used ceiling division. This made the computed minimum 1 sat/kwu too high when prev * 25 is not evenly divisible by 24, which could reject valid counterparty feerates. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
9ce9405 to
154f06b
Compare
When RBF-ing a splice transaction, the spec requires each
tx_init_rbfto bump the feerate by at least 25/24 of the previous feerate. At low feerates, this multiplicative rule alone can produce absolute fee increases too small for Bitcoin Core to relay the replacement under BIP125's minimum relay fee policy. lightning/bolts#1327 addresses this by adding an additive floor of +25 sat/kwu alongside the multiplicative rule, using whichever produces a higher feerate.We already enforce this combined rule on our own RBF attempts. This enforces it on counterparty
tx_init_rbfmessages too, by reusing the existingmin_rbf_feeratefunction invalidate_tx_init_rbf.Also fixes the 25/24 computation to use floor division per the spec's "rounded down" wording. The prior
div_ceilcould reject valid counterparty feerates by 1 sat/kwu whenprev * 25is not evenly divisible by 24.