Ensure minimum RBF feerate satisfies BIP125 - #4494

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate
Apr 1, 2026
Merged

Ensure minimum RBF feerate satisfies BIP125#4494
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate

Conversation

@jkczyz

@jkczyzjkczyz commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay requirement of an absolute fee increase at low feerates, while a flat +25 sat/kwu increment falls below the spec's 25/24 rule above 600 sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to satisfy both constraints, while still accepting the bare 25/24 rule from counterparties.

Potential spec change in lightning/bolts#1327.

@ldk-reviews-bot

ldk-reviews-bot commented Mar 18, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 72455fc to 1098cc3CompareMarch 18, 2026 18:57
@jkczyzjkczyz self-assigned this Mar 19, 2026
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 1098cc3 to 9b9c114CompareMarch 30, 2026 22:08
@jkczyz
jkczyz marked this pull request as ready for review March 30, 2026 22:15
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Will need for proper integration testing of LDK Node's rbf_channel API.

@jkczyz
jkczyz requested review from TheBlueMatt and wpaulino and removed request for valentinewallaceMarch 30, 2026 22:19
Comment threadlightning/src/ln/channel.rs
@ldk-claude-review-bot

ldk-claude-review-bot commented Mar 30, 2026

Copy link
Copy Markdown
Collaborator

I have thoroughly reviewed the entire PR diff. All three issues from my prior review have been addressed in this revision:

  1. min_rbf_feerate now uses max(prev + 25, ceil(prev * 25/24)) — correctly satisfying both BIP125 relay and the spec's 25/24 rule at all feerates.
  2. Doc comments on FundingTemplate (lines 221-222, 236-238) accurately describe the dual-rule formula.
  3. Test comment at splicing_tests.rs:6050-6051 now correctly shows the max() computation at 10,000 sat/kwu.

The new test test_splice_rbf_at_high_feerate properly exercises the crossover region (1000 sat/kwu, where 25/24 dominates). The new acceptor-side test block in test_splice_rbf_insufficient_feerate correctly validates that a counterparty feerate satisfying only the bare 25/24 rule (264) is accepted even though our own floor is higher (278).

No issues found.

@jkczyzjkczyz changed the title Use +25 sat/kwu increment for our minimum RBF feerateEnsure minimum RBF feerate satisfies BIP125Mar 30, 2026
Comment threadlightning/src/ln/funding.rs Outdated
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a18dac2 to a8d3bdaCompareMarch 30, 2026 22:52
Comment threadlightning/src/ln/splicing_tests.rs Outdated
@codecov

codecovBot commented Mar 30, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.44444% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 87.12%. Comparing base (8d00139) to head (1ff1bb4).
⚠️ Report is 117 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel.rs90.90%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4494 +/- ##
==========================================
+ Coverage 86.24% 87.12% +0.88% 
==========================================
Files 160 163 +3 Lines 107909 108740 +831 Branches 107909 108740 +831 ==========================================
+ Hits 93061 94735 +1674 + Misses 12212 11520 -692 + Partials 2636 2485 -151 
FlagCoverage Δ
fuzzing40.21% <9.09%> (?)
tests86.21% <94.44%> (-0.03%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a8d3bda to f56d3c8CompareMarch 31, 2026 00:16
@wpaulino

Copy link
Copy Markdown
Contributor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay
requirement of an absolute fee increase at low feerates, while a flat
+25 sat/kwu increment falls below the spec's 25/24 rule above 600
sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to
satisfy both constraints, while still accepting the bare 25/24 rule
from counterparties.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from f56d3c8 to 1ff1bb4CompareMarch 31, 2026 22:25
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

Squashed. Yeah, we can move forward. We still enforce the spec as it is currently written against our counterparty.

@jkczyz
jkczyz requested a review from TheBlueMattMarch 31, 2026 22:32
@TheBlueMatt
TheBlueMatt merged commit 27a8dbb into lightningdevkit:mainApr 1, 2026
22 of 23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jkczyz@ldk-reviews-bot@ldk-claude-review-bot@wpaulino@TheBlueMatt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Ensure minimum RBF feerate satisfies BIP125 - #4494

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate
Apr 1, 2026
Merged

Ensure minimum RBF feerate satisfies BIP125#4494
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate

Conversation

@jkczyz

@jkczyzjkczyz commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay requirement of an absolute fee increase at low feerates, while a flat +25 sat/kwu increment falls below the spec's 25/24 rule above 600 sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to satisfy both constraints, while still accepting the bare 25/24 rule from counterparties.

Potential spec change in lightning/bolts#1327.

@ldk-reviews-bot

ldk-reviews-bot commented Mar 18, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 72455fc to 1098cc3CompareMarch 18, 2026 18:57
@jkczyzjkczyz self-assigned this Mar 19, 2026
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 1098cc3 to 9b9c114CompareMarch 30, 2026 22:08
@jkczyz
jkczyz marked this pull request as ready for review March 30, 2026 22:15
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Will need for proper integration testing of LDK Node's rbf_channel API.

@jkczyz
jkczyz requested review from TheBlueMatt and wpaulino and removed request for valentinewallaceMarch 30, 2026 22:19
Comment threadlightning/src/ln/channel.rs
@ldk-claude-review-bot

ldk-claude-review-bot commented Mar 30, 2026

Copy link
Copy Markdown
Collaborator

I have thoroughly reviewed the entire PR diff. All three issues from my prior review have been addressed in this revision:

  1. min_rbf_feerate now uses max(prev + 25, ceil(prev * 25/24)) — correctly satisfying both BIP125 relay and the spec's 25/24 rule at all feerates.
  2. Doc comments on FundingTemplate (lines 221-222, 236-238) accurately describe the dual-rule formula.
  3. Test comment at splicing_tests.rs:6050-6051 now correctly shows the max() computation at 10,000 sat/kwu.

The new test test_splice_rbf_at_high_feerate properly exercises the crossover region (1000 sat/kwu, where 25/24 dominates). The new acceptor-side test block in test_splice_rbf_insufficient_feerate correctly validates that a counterparty feerate satisfying only the bare 25/24 rule (264) is accepted even though our own floor is higher (278).

No issues found.

@jkczyzjkczyz changed the title Use +25 sat/kwu increment for our minimum RBF feerateEnsure minimum RBF feerate satisfies BIP125Mar 30, 2026
Comment threadlightning/src/ln/funding.rs Outdated
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a18dac2 to a8d3bdaCompareMarch 30, 2026 22:52
Comment threadlightning/src/ln/splicing_tests.rs Outdated
@codecov

codecovBot commented Mar 30, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.44444% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 87.12%. Comparing base (8d00139) to head (1ff1bb4).
⚠️ Report is 117 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel.rs90.90%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4494 +/- ##
==========================================
+ Coverage 86.24% 87.12% +0.88% 
==========================================
Files 160 163 +3 Lines 107909 108740 +831 Branches 107909 108740 +831 ==========================================
+ Hits 93061 94735 +1674 + Misses 12212 11520 -692 + Partials 2636 2485 -151 
FlagCoverage Δ
fuzzing40.21% <9.09%> (?)
tests86.21% <94.44%> (-0.03%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a8d3bda to f56d3c8CompareMarch 31, 2026 00:16
@wpaulino

Copy link
Copy Markdown
Contributor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay
requirement of an absolute fee increase at low feerates, while a flat
+25 sat/kwu increment falls below the spec's 25/24 rule above 600
sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to
satisfy both constraints, while still accepting the bare 25/24 rule
from counterparties.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from f56d3c8 to 1ff1bb4CompareMarch 31, 2026 22:25
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

Squashed. Yeah, we can move forward. We still enforce the spec as it is currently written against our counterparty.

@jkczyz
jkczyz requested a review from TheBlueMattMarch 31, 2026 22:32
@TheBlueMatt
TheBlueMatt merged commit 27a8dbb into lightningdevkit:mainApr 1, 2026
22 of 23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jkczyz@ldk-reviews-bot@ldk-claude-review-bot@wpaulino@TheBlueMatt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Ensure minimum RBF feerate satisfies BIP125 - #4494

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate
Apr 1, 2026
Merged

Ensure minimum RBF feerate satisfies BIP125#4494
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate

Conversation

@jkczyz

@jkczyzjkczyz commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay requirement of an absolute fee increase at low feerates, while a flat +25 sat/kwu increment falls below the spec's 25/24 rule above 600 sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to satisfy both constraints, while still accepting the bare 25/24 rule from counterparties.

Potential spec change in lightning/bolts#1327.

@ldk-reviews-bot

ldk-reviews-bot commented Mar 18, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 72455fc to 1098cc3CompareMarch 18, 2026 18:57
@jkczyzjkczyz self-assigned this Mar 19, 2026
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 1098cc3 to 9b9c114CompareMarch 30, 2026 22:08
@jkczyz
jkczyz marked this pull request as ready for review March 30, 2026 22:15
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Will need for proper integration testing of LDK Node's rbf_channel API.

@jkczyz
jkczyz requested review from TheBlueMatt and wpaulino and removed request for valentinewallaceMarch 30, 2026 22:19
Comment threadlightning/src/ln/channel.rs
@ldk-claude-review-bot

ldk-claude-review-bot commented Mar 30, 2026

Copy link
Copy Markdown
Collaborator

I have thoroughly reviewed the entire PR diff. All three issues from my prior review have been addressed in this revision:

  1. min_rbf_feerate now uses max(prev + 25, ceil(prev * 25/24)) — correctly satisfying both BIP125 relay and the spec's 25/24 rule at all feerates.
  2. Doc comments on FundingTemplate (lines 221-222, 236-238) accurately describe the dual-rule formula.
  3. Test comment at splicing_tests.rs:6050-6051 now correctly shows the max() computation at 10,000 sat/kwu.

The new test test_splice_rbf_at_high_feerate properly exercises the crossover region (1000 sat/kwu, where 25/24 dominates). The new acceptor-side test block in test_splice_rbf_insufficient_feerate correctly validates that a counterparty feerate satisfying only the bare 25/24 rule (264) is accepted even though our own floor is higher (278).

No issues found.

@jkczyzjkczyz changed the title Use +25 sat/kwu increment for our minimum RBF feerateEnsure minimum RBF feerate satisfies BIP125Mar 30, 2026
Comment threadlightning/src/ln/funding.rs Outdated
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a18dac2 to a8d3bdaCompareMarch 30, 2026 22:52
Comment threadlightning/src/ln/splicing_tests.rs Outdated
@codecov

codecovBot commented Mar 30, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.44444% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 87.12%. Comparing base (8d00139) to head (1ff1bb4).
⚠️ Report is 117 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel.rs90.90%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4494 +/- ##
==========================================
+ Coverage 86.24% 87.12% +0.88% 
==========================================
Files 160 163 +3 Lines 107909 108740 +831 Branches 107909 108740 +831 ==========================================
+ Hits 93061 94735 +1674 + Misses 12212 11520 -692 + Partials 2636 2485 -151 
FlagCoverage Δ
fuzzing40.21% <9.09%> (?)
tests86.21% <94.44%> (-0.03%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a8d3bda to f56d3c8CompareMarch 31, 2026 00:16
@wpaulino

Copy link
Copy Markdown
Contributor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay
requirement of an absolute fee increase at low feerates, while a flat
+25 sat/kwu increment falls below the spec's 25/24 rule above 600
sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to
satisfy both constraints, while still accepting the bare 25/24 rule
from counterparties.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from f56d3c8 to 1ff1bb4CompareMarch 31, 2026 22:25
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

Squashed. Yeah, we can move forward. We still enforce the spec as it is currently written against our counterparty.

@jkczyz
jkczyz requested a review from TheBlueMattMarch 31, 2026 22:32
@TheBlueMatt
TheBlueMatt merged commit 27a8dbb into lightningdevkit:mainApr 1, 2026
22 of 23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jkczyz@ldk-reviews-bot@ldk-claude-review-bot@wpaulino@TheBlueMatt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Ensure minimum RBF feerate satisfies BIP125 - #4494

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate
Apr 1, 2026
Merged

Ensure minimum RBF feerate satisfies BIP125#4494
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate

Conversation

@jkczyz

@jkczyzjkczyz commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay requirement of an absolute fee increase at low feerates, while a flat +25 sat/kwu increment falls below the spec's 25/24 rule above 600 sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to satisfy both constraints, while still accepting the bare 25/24 rule from counterparties.

Potential spec change in lightning/bolts#1327.

@ldk-reviews-bot

ldk-reviews-bot commented Mar 18, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 72455fc to 1098cc3CompareMarch 18, 2026 18:57
@jkczyzjkczyz self-assigned this Mar 19, 2026
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 1098cc3 to 9b9c114CompareMarch 30, 2026 22:08
@jkczyz
jkczyz marked this pull request as ready for review March 30, 2026 22:15
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Will need for proper integration testing of LDK Node's rbf_channel API.

@jkczyz
jkczyz requested review from TheBlueMatt and wpaulino and removed request for valentinewallaceMarch 30, 2026 22:19
Comment threadlightning/src/ln/channel.rs
@ldk-claude-review-bot

ldk-claude-review-bot commented Mar 30, 2026

Copy link
Copy Markdown
Collaborator

I have thoroughly reviewed the entire PR diff. All three issues from my prior review have been addressed in this revision:

  1. min_rbf_feerate now uses max(prev + 25, ceil(prev * 25/24)) — correctly satisfying both BIP125 relay and the spec's 25/24 rule at all feerates.
  2. Doc comments on FundingTemplate (lines 221-222, 236-238) accurately describe the dual-rule formula.
  3. Test comment at splicing_tests.rs:6050-6051 now correctly shows the max() computation at 10,000 sat/kwu.

The new test test_splice_rbf_at_high_feerate properly exercises the crossover region (1000 sat/kwu, where 25/24 dominates). The new acceptor-side test block in test_splice_rbf_insufficient_feerate correctly validates that a counterparty feerate satisfying only the bare 25/24 rule (264) is accepted even though our own floor is higher (278).

No issues found.

@jkczyzjkczyz changed the title Use +25 sat/kwu increment for our minimum RBF feerateEnsure minimum RBF feerate satisfies BIP125Mar 30, 2026
Comment threadlightning/src/ln/funding.rs Outdated
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a18dac2 to a8d3bdaCompareMarch 30, 2026 22:52
Comment threadlightning/src/ln/splicing_tests.rs Outdated
@codecov

codecovBot commented Mar 30, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.44444% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 87.12%. Comparing base (8d00139) to head (1ff1bb4).
⚠️ Report is 117 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel.rs90.90%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4494 +/- ##
==========================================
+ Coverage 86.24% 87.12% +0.88% 
==========================================
Files 160 163 +3 Lines 107909 108740 +831 Branches 107909 108740 +831 ==========================================
+ Hits 93061 94735 +1674 + Misses 12212 11520 -692 + Partials 2636 2485 -151 
FlagCoverage Δ
fuzzing40.21% <9.09%> (?)
tests86.21% <94.44%> (-0.03%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a8d3bda to f56d3c8CompareMarch 31, 2026 00:16
@wpaulino

Copy link
Copy Markdown
Contributor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay
requirement of an absolute fee increase at low feerates, while a flat
+25 sat/kwu increment falls below the spec's 25/24 rule above 600
sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to
satisfy both constraints, while still accepting the bare 25/24 rule
from counterparties.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from f56d3c8 to 1ff1bb4CompareMarch 31, 2026 22:25
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

Squashed. Yeah, we can move forward. We still enforce the spec as it is currently written against our counterparty.

@jkczyz
jkczyz requested a review from TheBlueMattMarch 31, 2026 22:32
@TheBlueMatt
TheBlueMatt merged commit 27a8dbb into lightningdevkit:mainApr 1, 2026
22 of 23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jkczyz@ldk-reviews-bot@ldk-claude-review-bot@wpaulino@TheBlueMatt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Ensure minimum RBF feerate satisfies BIP125 - #4494

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate
Apr 1, 2026
Merged

Ensure minimum RBF feerate satisfies BIP125#4494
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate

Conversation

@jkczyz

@jkczyzjkczyz commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay requirement of an absolute fee increase at low feerates, while a flat +25 sat/kwu increment falls below the spec's 25/24 rule above 600 sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to satisfy both constraints, while still accepting the bare 25/24 rule from counterparties.

Potential spec change in lightning/bolts#1327.

@ldk-reviews-bot

ldk-reviews-bot commented Mar 18, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 72455fc to 1098cc3CompareMarch 18, 2026 18:57
@jkczyzjkczyz self-assigned this Mar 19, 2026
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 1098cc3 to 9b9c114CompareMarch 30, 2026 22:08
@jkczyz
jkczyz marked this pull request as ready for review March 30, 2026 22:15
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Will need for proper integration testing of LDK Node's rbf_channel API.

@jkczyz
jkczyz requested review from TheBlueMatt and wpaulino and removed request for valentinewallaceMarch 30, 2026 22:19
Comment threadlightning/src/ln/channel.rs
@ldk-claude-review-bot

ldk-claude-review-bot commented Mar 30, 2026

Copy link
Copy Markdown
Collaborator

I have thoroughly reviewed the entire PR diff. All three issues from my prior review have been addressed in this revision:

  1. min_rbf_feerate now uses max(prev + 25, ceil(prev * 25/24)) — correctly satisfying both BIP125 relay and the spec's 25/24 rule at all feerates.
  2. Doc comments on FundingTemplate (lines 221-222, 236-238) accurately describe the dual-rule formula.
  3. Test comment at splicing_tests.rs:6050-6051 now correctly shows the max() computation at 10,000 sat/kwu.

The new test test_splice_rbf_at_high_feerate properly exercises the crossover region (1000 sat/kwu, where 25/24 dominates). The new acceptor-side test block in test_splice_rbf_insufficient_feerate correctly validates that a counterparty feerate satisfying only the bare 25/24 rule (264) is accepted even though our own floor is higher (278).

No issues found.

@jkczyzjkczyz changed the title Use +25 sat/kwu increment for our minimum RBF feerateEnsure minimum RBF feerate satisfies BIP125Mar 30, 2026
Comment threadlightning/src/ln/funding.rs Outdated
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a18dac2 to a8d3bdaCompareMarch 30, 2026 22:52
Comment threadlightning/src/ln/splicing_tests.rs Outdated
@codecov

codecovBot commented Mar 30, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.44444% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 87.12%. Comparing base (8d00139) to head (1ff1bb4).
⚠️ Report is 117 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel.rs90.90%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4494 +/- ##
==========================================
+ Coverage 86.24% 87.12% +0.88% 
==========================================
Files 160 163 +3 Lines 107909 108740 +831 Branches 107909 108740 +831 ==========================================
+ Hits 93061 94735 +1674 + Misses 12212 11520 -692 + Partials 2636 2485 -151 
FlagCoverage Δ
fuzzing40.21% <9.09%> (?)
tests86.21% <94.44%> (-0.03%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a8d3bda to f56d3c8CompareMarch 31, 2026 00:16
@wpaulino

Copy link
Copy Markdown
Contributor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay
requirement of an absolute fee increase at low feerates, while a flat
+25 sat/kwu increment falls below the spec's 25/24 rule above 600
sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to
satisfy both constraints, while still accepting the bare 25/24 rule
from counterparties.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from f56d3c8 to 1ff1bb4CompareMarch 31, 2026 22:25
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

Squashed. Yeah, we can move forward. We still enforce the spec as it is currently written against our counterparty.

@jkczyz
jkczyz requested a review from TheBlueMattMarch 31, 2026 22:32
@TheBlueMatt
TheBlueMatt merged commit 27a8dbb into lightningdevkit:mainApr 1, 2026
22 of 23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jkczyz@ldk-reviews-bot@ldk-claude-review-bot@wpaulino@TheBlueMatt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Ensure minimum RBF feerate satisfies BIP125 - #4494

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate
Apr 1, 2026
Merged

Ensure minimum RBF feerate satisfies BIP125#4494
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate

Conversation

@jkczyz

@jkczyzjkczyz commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay requirement of an absolute fee increase at low feerates, while a flat +25 sat/kwu increment falls below the spec's 25/24 rule above 600 sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to satisfy both constraints, while still accepting the bare 25/24 rule from counterparties.

Potential spec change in lightning/bolts#1327.

@ldk-reviews-bot

ldk-reviews-bot commented Mar 18, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 72455fc to 1098cc3CompareMarch 18, 2026 18:57
@jkczyzjkczyz self-assigned this Mar 19, 2026
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 1098cc3 to 9b9c114CompareMarch 30, 2026 22:08
@jkczyz
jkczyz marked this pull request as ready for review March 30, 2026 22:15
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Will need for proper integration testing of LDK Node's rbf_channel API.

@jkczyz
jkczyz requested review from TheBlueMatt and wpaulino and removed request for valentinewallaceMarch 30, 2026 22:19
Comment threadlightning/src/ln/channel.rs
@ldk-claude-review-bot

ldk-claude-review-bot commented Mar 30, 2026

Copy link
Copy Markdown
Collaborator

I have thoroughly reviewed the entire PR diff. All three issues from my prior review have been addressed in this revision:

  1. min_rbf_feerate now uses max(prev + 25, ceil(prev * 25/24)) — correctly satisfying both BIP125 relay and the spec's 25/24 rule at all feerates.
  2. Doc comments on FundingTemplate (lines 221-222, 236-238) accurately describe the dual-rule formula.
  3. Test comment at splicing_tests.rs:6050-6051 now correctly shows the max() computation at 10,000 sat/kwu.

The new test test_splice_rbf_at_high_feerate properly exercises the crossover region (1000 sat/kwu, where 25/24 dominates). The new acceptor-side test block in test_splice_rbf_insufficient_feerate correctly validates that a counterparty feerate satisfying only the bare 25/24 rule (264) is accepted even though our own floor is higher (278).

No issues found.

@jkczyzjkczyz changed the title Use +25 sat/kwu increment for our minimum RBF feerateEnsure minimum RBF feerate satisfies BIP125Mar 30, 2026
Comment threadlightning/src/ln/funding.rs Outdated
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a18dac2 to a8d3bdaCompareMarch 30, 2026 22:52
Comment threadlightning/src/ln/splicing_tests.rs Outdated
@codecov

codecovBot commented Mar 30, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.44444% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 87.12%. Comparing base (8d00139) to head (1ff1bb4).
⚠️ Report is 117 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel.rs90.90%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4494 +/- ##
==========================================
+ Coverage 86.24% 87.12% +0.88% 
==========================================
Files 160 163 +3 Lines 107909 108740 +831 Branches 107909 108740 +831 ==========================================
+ Hits 93061 94735 +1674 + Misses 12212 11520 -692 + Partials 2636 2485 -151 
FlagCoverage Δ
fuzzing40.21% <9.09%> (?)
tests86.21% <94.44%> (-0.03%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a8d3bda to f56d3c8CompareMarch 31, 2026 00:16
@wpaulino

Copy link
Copy Markdown
Contributor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay
requirement of an absolute fee increase at low feerates, while a flat
+25 sat/kwu increment falls below the spec's 25/24 rule above 600
sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to
satisfy both constraints, while still accepting the bare 25/24 rule
from counterparties.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from f56d3c8 to 1ff1bb4CompareMarch 31, 2026 22:25
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

Squashed. Yeah, we can move forward. We still enforce the spec as it is currently written against our counterparty.

@jkczyz
jkczyz requested a review from TheBlueMattMarch 31, 2026 22:32
@TheBlueMatt
TheBlueMatt merged commit 27a8dbb into lightningdevkit:mainApr 1, 2026
22 of 23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jkczyz@ldk-reviews-bot@ldk-claude-review-bot@wpaulino@TheBlueMatt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Ensure minimum RBF feerate satisfies BIP125 - #4494

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate
Apr 1, 2026
Merged

Ensure minimum RBF feerate satisfies BIP125#4494
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate

Conversation

@jkczyz

@jkczyzjkczyz commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay requirement of an absolute fee increase at low feerates, while a flat +25 sat/kwu increment falls below the spec's 25/24 rule above 600 sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to satisfy both constraints, while still accepting the bare 25/24 rule from counterparties.

Potential spec change in lightning/bolts#1327.

@ldk-reviews-bot

ldk-reviews-bot commented Mar 18, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 72455fc to 1098cc3CompareMarch 18, 2026 18:57
@jkczyzjkczyz self-assigned this Mar 19, 2026
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 1098cc3 to 9b9c114CompareMarch 30, 2026 22:08
@jkczyz
jkczyz marked this pull request as ready for review March 30, 2026 22:15
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Will need for proper integration testing of LDK Node's rbf_channel API.

@jkczyz
jkczyz requested review from TheBlueMatt and wpaulino and removed request for valentinewallaceMarch 30, 2026 22:19
Comment threadlightning/src/ln/channel.rs
@ldk-claude-review-bot

ldk-claude-review-bot commented Mar 30, 2026

Copy link
Copy Markdown
Collaborator

I have thoroughly reviewed the entire PR diff. All three issues from my prior review have been addressed in this revision:

  1. min_rbf_feerate now uses max(prev + 25, ceil(prev * 25/24)) — correctly satisfying both BIP125 relay and the spec's 25/24 rule at all feerates.
  2. Doc comments on FundingTemplate (lines 221-222, 236-238) accurately describe the dual-rule formula.
  3. Test comment at splicing_tests.rs:6050-6051 now correctly shows the max() computation at 10,000 sat/kwu.

The new test test_splice_rbf_at_high_feerate properly exercises the crossover region (1000 sat/kwu, where 25/24 dominates). The new acceptor-side test block in test_splice_rbf_insufficient_feerate correctly validates that a counterparty feerate satisfying only the bare 25/24 rule (264) is accepted even though our own floor is higher (278).

No issues found.

@jkczyzjkczyz changed the title Use +25 sat/kwu increment for our minimum RBF feerateEnsure minimum RBF feerate satisfies BIP125Mar 30, 2026
Comment threadlightning/src/ln/funding.rs Outdated
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a18dac2 to a8d3bdaCompareMarch 30, 2026 22:52
Comment threadlightning/src/ln/splicing_tests.rs Outdated
@codecov

codecovBot commented Mar 30, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.44444% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 87.12%. Comparing base (8d00139) to head (1ff1bb4).
⚠️ Report is 117 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel.rs90.90%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4494 +/- ##
==========================================
+ Coverage 86.24% 87.12% +0.88% 
==========================================
Files 160 163 +3 Lines 107909 108740 +831 Branches 107909 108740 +831 ==========================================
+ Hits 93061 94735 +1674 + Misses 12212 11520 -692 + Partials 2636 2485 -151 
FlagCoverage Δ
fuzzing40.21% <9.09%> (?)
tests86.21% <94.44%> (-0.03%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a8d3bda to f56d3c8CompareMarch 31, 2026 00:16
@wpaulino

Copy link
Copy Markdown
Contributor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay
requirement of an absolute fee increase at low feerates, while a flat
+25 sat/kwu increment falls below the spec's 25/24 rule above 600
sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to
satisfy both constraints, while still accepting the bare 25/24 rule
from counterparties.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from f56d3c8 to 1ff1bb4CompareMarch 31, 2026 22:25
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

Squashed. Yeah, we can move forward. We still enforce the spec as it is currently written against our counterparty.

@jkczyz
jkczyz requested a review from TheBlueMattMarch 31, 2026 22:32
@TheBlueMatt
TheBlueMatt merged commit 27a8dbb into lightningdevkit:mainApr 1, 2026
22 of 23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jkczyz@ldk-reviews-bot@ldk-claude-review-bot@wpaulino@TheBlueMatt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Ensure minimum RBF feerate satisfies BIP125 - #4494

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate
Apr 1, 2026
Merged

Ensure minimum RBF feerate satisfies BIP125#4494
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
jkczyz:2026-03-rbf-feerate

Conversation

@jkczyz

@jkczyzjkczyz commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay requirement of an absolute fee increase at low feerates, while a flat +25 sat/kwu increment falls below the spec's 25/24 rule above 600 sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to satisfy both constraints, while still accepting the bare 25/24 rule from counterparties.

Potential spec change in lightning/bolts#1327.

@ldk-reviews-bot

ldk-reviews-bot commented Mar 18, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 72455fc to 1098cc3CompareMarch 18, 2026 18:57
@jkczyzjkczyz self-assigned this Mar 19, 2026
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from 1098cc3 to 9b9c114CompareMarch 30, 2026 22:08
@jkczyz
jkczyz marked this pull request as ready for review March 30, 2026 22:15
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Will need for proper integration testing of LDK Node's rbf_channel API.

@jkczyz
jkczyz requested review from TheBlueMatt and wpaulino and removed request for valentinewallaceMarch 30, 2026 22:19
Comment threadlightning/src/ln/channel.rs
@ldk-claude-review-bot

ldk-claude-review-bot commented Mar 30, 2026

Copy link
Copy Markdown
Collaborator

I have thoroughly reviewed the entire PR diff. All three issues from my prior review have been addressed in this revision:

  1. min_rbf_feerate now uses max(prev + 25, ceil(prev * 25/24)) — correctly satisfying both BIP125 relay and the spec's 25/24 rule at all feerates.
  2. Doc comments on FundingTemplate (lines 221-222, 236-238) accurately describe the dual-rule formula.
  3. Test comment at splicing_tests.rs:6050-6051 now correctly shows the max() computation at 10,000 sat/kwu.

The new test test_splice_rbf_at_high_feerate properly exercises the crossover region (1000 sat/kwu, where 25/24 dominates). The new acceptor-side test block in test_splice_rbf_insufficient_feerate correctly validates that a counterparty feerate satisfying only the bare 25/24 rule (264) is accepted even though our own floor is higher (278).

No issues found.

@jkczyzjkczyz changed the title Use +25 sat/kwu increment for our minimum RBF feerateEnsure minimum RBF feerate satisfies BIP125Mar 30, 2026
Comment threadlightning/src/ln/funding.rs Outdated
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a18dac2 to a8d3bdaCompareMarch 30, 2026 22:52
Comment threadlightning/src/ln/splicing_tests.rs Outdated
@codecov

codecovBot commented Mar 30, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.44444% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 87.12%. Comparing base (8d00139) to head (1ff1bb4).
⚠️ Report is 117 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel.rs90.90%0 Missing and 1 partial ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4494 +/- ##
==========================================
+ Coverage 86.24% 87.12% +0.88% 
==========================================
Files 160 163 +3 Lines 107909 108740 +831 Branches 107909 108740 +831 ==========================================
+ Hits 93061 94735 +1674 + Misses 12212 11520 -692 + Partials 2636 2485 -151 
FlagCoverage Δ
fuzzing40.21% <9.09%> (?)
tests86.21% <94.44%> (-0.03%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from a8d3bda to f56d3c8CompareMarch 31, 2026 00:16
@wpaulino

Copy link
Copy Markdown
Contributor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

The spec's 25/24 multiplier doesn't always satisfy BIP125's relay
requirement of an absolute fee increase at low feerates, while a flat
+25 sat/kwu increment falls below the spec's 25/24 rule above 600
sat/kwu. Use max(prev + 25, ceil(prev * 25/24)) for our own RBFs to
satisfy both constraints, while still accepting the bare 25/24 rule
from counterparties.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jkczyz
jkczyzforce-pushed the 2026-03-rbf-feerate branch from f56d3c8 to 1ff1bb4CompareMarch 31, 2026 22:25
@jkczyz

Copy link
Copy Markdown
ContributorAuthor

Needs a squash. Can we move forward with this yet or is there still more spec discussion to be had?

Squashed. Yeah, we can move forward. We still enforce the spec as it is currently written against our counterparty.

@jkczyz
jkczyz requested a review from TheBlueMattMarch 31, 2026 22:32
@TheBlueMatt
TheBlueMatt merged commit 27a8dbb into lightningdevkit:mainApr 1, 2026
22 of 23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jkczyz@ldk-reviews-bot@ldk-claude-review-bot@wpaulino@TheBlueMatt