Expose current dust exposure in ChannelDetails - #4470

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure
May 1, 2026
Merged

Expose current dust exposure in ChannelDetails#4470
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure

Conversation

@Bortlesboat

Copy link
Copy Markdown
Contributor

Summary

Adds a current_dust_exposure_msat field to ChannelDetails that surfaces the current total dust exposure on a channel.

  • The value is the maximum of the dust exposure across the holder and counterparty commitment transactions
  • Includes both dust HTLC values and the commitment transaction fee component (as noted by @TheBlueMatt in Expose current dust exposure #2264, dust exposure now includes commitment tx fees, not just dust HTLCs)
  • Users can compare this against ChannelConfig::max_dust_htlc_exposure to monitor how close a channel is to its dust limit
  • Field is Option<u64>, None for objects serialized prior to 0.2.1
  • TLV tag 49 for backwards-compatible serialization

Implementation

  1. Added dust_exposure_msat to AvailableBalances — computed as max(local_dust_exposure_msat, remote_dust_exposure_msat) in get_available_balances (tx_builder.rs)
  2. When folding across multiple funding scopes (splices), takes the max dust exposure
  3. Added current_dust_exposure_msat: Option<u64> to ChannelDetails struct, populated from the balance computation in from_channel

Fixes#2264

@ldk-reviews-bot

ldk-reviews-bot commented Mar 8, 2026

Copy link
Copy Markdown

👋 I see @tankyleo was un-assigned.
If you'd like another reviewer assignment, please click here.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 06585ba to c571ad4CompareMarch 9, 2026 01:31
@tankyleo
tankyleo requested review from tankyleo and removed request for valentinewallaceMarch 9, 2026 11:18
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from c571ad4 to 4f9b1e5CompareMarch 9, 2026 18:25
@codecov

codecovBot commented Mar 9, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 75.00000% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 86.19%. Comparing base (4a3aaef) to head (515b244).
⚠️ Report is 97 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel_state.rs66.66%1 Missing ⚠️
lightning/src/routing/router.rs50.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4470 +/- ##
==========================================
+ Coverage 86.01% 86.19% +0.17% 
==========================================
Files 159 160 +1 Lines 105430 107554 +2124 Branches 105430 107554 +2124 ==========================================
+ Hits 90690 92707 +2017 + Misses 12229 12221 -8 - Partials 2511 2626 +115 
FlagCoverage Δ
tests86.19% <75.00%> (+0.17%)⬆️

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.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Quick follow-up from my side: I’m treating review-required PRs as top priority this week. If you want any specific changes, rebase, or split, I can turn them around quickly.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 4f9b1e5 to 03c307dCompareMarch 13, 2026 04:41
@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 03c307d to b856d80CompareMarch 15, 2026 18:19
@ldk-claude-review-bot

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

Copy link
Copy Markdown
Collaborator

I've reviewed the entire PR diff thoroughly, checking all changed files against the codebase context I have from prior reviews.

Prior review status:

  • The #[allow(deprecated)] issue (tx_builder.rs) — fully resolved, the annotation was removed.
  • The version string issue (channel_state.rs:493) — partially resolved. It was changed from "prior to 0.2.1" to "prior to 0.3." but the suggestion was "prior to 0.3.0" to match the three-part version convention used elsewhere (e.g., "prior to 0.2.0" on line 480). This is a minor inconsistency, not a bug.

New issues: None found. The implementation is correct:

  • max(local_dust_exposure_msat, remote_dust_exposure_msat) correctly captures worst-case dust exposure.
  • The fold across funding scopes uses .max() — correct for worst-case across splices.
  • TLV tag 49 (odd, sequential after 47) is correct for backwards-compatible optional serialization.
  • All 4 AvailableBalances construction sites and all ChannelDetails construction sites include the new field.
  • Serialization round-trip test at line 777 covers the new field.
  • Option<u64> in ChannelDetails (with None for old serialized data) vs plain u64 in AvailableBalances is appropriate.
  • Error/fallback paths default dust_exposure_msat to 0, consistent with the existing pattern for other balance fields in those paths.

No issues found.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 3rd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi @tankyleo — no worries if you're busy! Could another maintainer pick this up? Happy to address any feedback quickly.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 4th Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

Comment threadlightning/src/ln/channel.rs
@TheBlueMatt
TheBlueMatt removed the request for review from tankyleoMarch 19, 2026 20:41

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the delay

Comment threadlightning/src/sign/tx_builder.rs
Comment threadlightning/src/ln/channel_state.rs Outdated
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi — tankyleo appears to be unavailable (4 reminders sent). Could another reviewer pick this up? It's a small addition exposing dust exposure values that are already computed internally. Happy to address any feedback.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two small things, one that actually needs fixing, otherwise we'll land this. Thanks!

Comment threadlightning/src/ln/channel_state.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/sign/tx_builder.rs

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please feel free to squash the fixup commits down so that the git history only contains the one main commit

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 40ce774 to 515b244CompareMarch 25, 2026 17:12
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Done — squashed into a single commit.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 515b244 to d660c33CompareApril 12, 2026 16:50
Comment threadlightning/src/sign/tx_builder.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Please address the claude comment - its correct, we should drop that allow i think it snuck in from a back rebase. Also please feel free to squash the fixup commit again.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from d660c33 to cb34df1CompareApril 14, 2026 16:58
Co-authored-by: Codex <codex@openai.com>
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from cb34df1 to 1ee9480CompareApril 14, 2026 17:05
@TheBlueMatt
TheBlueMatt merged commit 8712856 into lightningdevkit:mainMay 1, 2026
21 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

None yet

Development

Successfully merging this pull request may close these issues.

Expose current dust exposure

5 participants

@Bortlesboat@ldk-reviews-bot@ldk-claude-review-bot@TheBlueMatt@tankyleo
, '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

Expose current dust exposure in ChannelDetails - #4470

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure
May 1, 2026
Merged

Expose current dust exposure in ChannelDetails#4470
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure

Conversation

@Bortlesboat

Copy link
Copy Markdown
Contributor

Summary

Adds a current_dust_exposure_msat field to ChannelDetails that surfaces the current total dust exposure on a channel.

  • The value is the maximum of the dust exposure across the holder and counterparty commitment transactions
  • Includes both dust HTLC values and the commitment transaction fee component (as noted by @TheBlueMatt in Expose current dust exposure #2264, dust exposure now includes commitment tx fees, not just dust HTLCs)
  • Users can compare this against ChannelConfig::max_dust_htlc_exposure to monitor how close a channel is to its dust limit
  • Field is Option<u64>, None for objects serialized prior to 0.2.1
  • TLV tag 49 for backwards-compatible serialization

Implementation

  1. Added dust_exposure_msat to AvailableBalances — computed as max(local_dust_exposure_msat, remote_dust_exposure_msat) in get_available_balances (tx_builder.rs)
  2. When folding across multiple funding scopes (splices), takes the max dust exposure
  3. Added current_dust_exposure_msat: Option<u64> to ChannelDetails struct, populated from the balance computation in from_channel

Fixes#2264

@ldk-reviews-bot

ldk-reviews-bot commented Mar 8, 2026

Copy link
Copy Markdown

👋 I see @tankyleo was un-assigned.
If you'd like another reviewer assignment, please click here.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 06585ba to c571ad4CompareMarch 9, 2026 01:31
@tankyleo
tankyleo requested review from tankyleo and removed request for valentinewallaceMarch 9, 2026 11:18
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from c571ad4 to 4f9b1e5CompareMarch 9, 2026 18:25
@codecov

codecovBot commented Mar 9, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 75.00000% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 86.19%. Comparing base (4a3aaef) to head (515b244).
⚠️ Report is 97 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel_state.rs66.66%1 Missing ⚠️
lightning/src/routing/router.rs50.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4470 +/- ##
==========================================
+ Coverage 86.01% 86.19% +0.17% 
==========================================
Files 159 160 +1 Lines 105430 107554 +2124 Branches 105430 107554 +2124 ==========================================
+ Hits 90690 92707 +2017 + Misses 12229 12221 -8 - Partials 2511 2626 +115 
FlagCoverage Δ
tests86.19% <75.00%> (+0.17%)⬆️

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.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Quick follow-up from my side: I’m treating review-required PRs as top priority this week. If you want any specific changes, rebase, or split, I can turn them around quickly.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 4f9b1e5 to 03c307dCompareMarch 13, 2026 04:41
@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 03c307d to b856d80CompareMarch 15, 2026 18:19
@ldk-claude-review-bot

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

Copy link
Copy Markdown
Collaborator

I've reviewed the entire PR diff thoroughly, checking all changed files against the codebase context I have from prior reviews.

Prior review status:

  • The #[allow(deprecated)] issue (tx_builder.rs) — fully resolved, the annotation was removed.
  • The version string issue (channel_state.rs:493) — partially resolved. It was changed from "prior to 0.2.1" to "prior to 0.3." but the suggestion was "prior to 0.3.0" to match the three-part version convention used elsewhere (e.g., "prior to 0.2.0" on line 480). This is a minor inconsistency, not a bug.

New issues: None found. The implementation is correct:

  • max(local_dust_exposure_msat, remote_dust_exposure_msat) correctly captures worst-case dust exposure.
  • The fold across funding scopes uses .max() — correct for worst-case across splices.
  • TLV tag 49 (odd, sequential after 47) is correct for backwards-compatible optional serialization.
  • All 4 AvailableBalances construction sites and all ChannelDetails construction sites include the new field.
  • Serialization round-trip test at line 777 covers the new field.
  • Option<u64> in ChannelDetails (with None for old serialized data) vs plain u64 in AvailableBalances is appropriate.
  • Error/fallback paths default dust_exposure_msat to 0, consistent with the existing pattern for other balance fields in those paths.

No issues found.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 3rd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi @tankyleo — no worries if you're busy! Could another maintainer pick this up? Happy to address any feedback quickly.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 4th Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

Comment threadlightning/src/ln/channel.rs
@TheBlueMatt
TheBlueMatt removed the request for review from tankyleoMarch 19, 2026 20:41

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the delay

Comment threadlightning/src/sign/tx_builder.rs
Comment threadlightning/src/ln/channel_state.rs Outdated
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi — tankyleo appears to be unavailable (4 reminders sent). Could another reviewer pick this up? It's a small addition exposing dust exposure values that are already computed internally. Happy to address any feedback.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two small things, one that actually needs fixing, otherwise we'll land this. Thanks!

Comment threadlightning/src/ln/channel_state.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/sign/tx_builder.rs

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please feel free to squash the fixup commits down so that the git history only contains the one main commit

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 40ce774 to 515b244CompareMarch 25, 2026 17:12
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Done — squashed into a single commit.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 515b244 to d660c33CompareApril 12, 2026 16:50
Comment threadlightning/src/sign/tx_builder.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Please address the claude comment - its correct, we should drop that allow i think it snuck in from a back rebase. Also please feel free to squash the fixup commit again.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from d660c33 to cb34df1CompareApril 14, 2026 16:58
Co-authored-by: Codex <codex@openai.com>
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from cb34df1 to 1ee9480CompareApril 14, 2026 17:05
@TheBlueMatt
TheBlueMatt merged commit 8712856 into lightningdevkit:mainMay 1, 2026
21 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

None yet

Development

Successfully merging this pull request may close these issues.

Expose current dust exposure

5 participants

@Bortlesboat@ldk-reviews-bot@ldk-claude-review-bot@TheBlueMatt@tankyleo
, '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

Expose current dust exposure in ChannelDetails - #4470

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure
May 1, 2026
Merged

Expose current dust exposure in ChannelDetails#4470
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure

Conversation

@Bortlesboat

Copy link
Copy Markdown
Contributor

Summary

Adds a current_dust_exposure_msat field to ChannelDetails that surfaces the current total dust exposure on a channel.

  • The value is the maximum of the dust exposure across the holder and counterparty commitment transactions
  • Includes both dust HTLC values and the commitment transaction fee component (as noted by @TheBlueMatt in Expose current dust exposure #2264, dust exposure now includes commitment tx fees, not just dust HTLCs)
  • Users can compare this against ChannelConfig::max_dust_htlc_exposure to monitor how close a channel is to its dust limit
  • Field is Option<u64>, None for objects serialized prior to 0.2.1
  • TLV tag 49 for backwards-compatible serialization

Implementation

  1. Added dust_exposure_msat to AvailableBalances — computed as max(local_dust_exposure_msat, remote_dust_exposure_msat) in get_available_balances (tx_builder.rs)
  2. When folding across multiple funding scopes (splices), takes the max dust exposure
  3. Added current_dust_exposure_msat: Option<u64> to ChannelDetails struct, populated from the balance computation in from_channel

Fixes#2264

@ldk-reviews-bot

ldk-reviews-bot commented Mar 8, 2026

Copy link
Copy Markdown

👋 I see @tankyleo was un-assigned.
If you'd like another reviewer assignment, please click here.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 06585ba to c571ad4CompareMarch 9, 2026 01:31
@tankyleo
tankyleo requested review from tankyleo and removed request for valentinewallaceMarch 9, 2026 11:18
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from c571ad4 to 4f9b1e5CompareMarch 9, 2026 18:25
@codecov

codecovBot commented Mar 9, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 75.00000% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 86.19%. Comparing base (4a3aaef) to head (515b244).
⚠️ Report is 97 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel_state.rs66.66%1 Missing ⚠️
lightning/src/routing/router.rs50.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4470 +/- ##
==========================================
+ Coverage 86.01% 86.19% +0.17% 
==========================================
Files 159 160 +1 Lines 105430 107554 +2124 Branches 105430 107554 +2124 ==========================================
+ Hits 90690 92707 +2017 + Misses 12229 12221 -8 - Partials 2511 2626 +115 
FlagCoverage Δ
tests86.19% <75.00%> (+0.17%)⬆️

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.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Quick follow-up from my side: I’m treating review-required PRs as top priority this week. If you want any specific changes, rebase, or split, I can turn them around quickly.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 4f9b1e5 to 03c307dCompareMarch 13, 2026 04:41
@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 03c307d to b856d80CompareMarch 15, 2026 18:19
@ldk-claude-review-bot

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

Copy link
Copy Markdown
Collaborator

I've reviewed the entire PR diff thoroughly, checking all changed files against the codebase context I have from prior reviews.

Prior review status:

  • The #[allow(deprecated)] issue (tx_builder.rs) — fully resolved, the annotation was removed.
  • The version string issue (channel_state.rs:493) — partially resolved. It was changed from "prior to 0.2.1" to "prior to 0.3." but the suggestion was "prior to 0.3.0" to match the three-part version convention used elsewhere (e.g., "prior to 0.2.0" on line 480). This is a minor inconsistency, not a bug.

New issues: None found. The implementation is correct:

  • max(local_dust_exposure_msat, remote_dust_exposure_msat) correctly captures worst-case dust exposure.
  • The fold across funding scopes uses .max() — correct for worst-case across splices.
  • TLV tag 49 (odd, sequential after 47) is correct for backwards-compatible optional serialization.
  • All 4 AvailableBalances construction sites and all ChannelDetails construction sites include the new field.
  • Serialization round-trip test at line 777 covers the new field.
  • Option<u64> in ChannelDetails (with None for old serialized data) vs plain u64 in AvailableBalances is appropriate.
  • Error/fallback paths default dust_exposure_msat to 0, consistent with the existing pattern for other balance fields in those paths.

No issues found.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 3rd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi @tankyleo — no worries if you're busy! Could another maintainer pick this up? Happy to address any feedback quickly.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 4th Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

Comment threadlightning/src/ln/channel.rs
@TheBlueMatt
TheBlueMatt removed the request for review from tankyleoMarch 19, 2026 20:41

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the delay

Comment threadlightning/src/sign/tx_builder.rs
Comment threadlightning/src/ln/channel_state.rs Outdated
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi — tankyleo appears to be unavailable (4 reminders sent). Could another reviewer pick this up? It's a small addition exposing dust exposure values that are already computed internally. Happy to address any feedback.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two small things, one that actually needs fixing, otherwise we'll land this. Thanks!

Comment threadlightning/src/ln/channel_state.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/sign/tx_builder.rs

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please feel free to squash the fixup commits down so that the git history only contains the one main commit

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 40ce774 to 515b244CompareMarch 25, 2026 17:12
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Done — squashed into a single commit.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 515b244 to d660c33CompareApril 12, 2026 16:50
Comment threadlightning/src/sign/tx_builder.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Please address the claude comment - its correct, we should drop that allow i think it snuck in from a back rebase. Also please feel free to squash the fixup commit again.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from d660c33 to cb34df1CompareApril 14, 2026 16:58
Co-authored-by: Codex <codex@openai.com>
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from cb34df1 to 1ee9480CompareApril 14, 2026 17:05
@TheBlueMatt
TheBlueMatt merged commit 8712856 into lightningdevkit:mainMay 1, 2026
21 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

None yet

Development

Successfully merging this pull request may close these issues.

Expose current dust exposure

5 participants

@Bortlesboat@ldk-reviews-bot@ldk-claude-review-bot@TheBlueMatt@tankyleo
, '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

Expose current dust exposure in ChannelDetails - #4470

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure
May 1, 2026
Merged

Expose current dust exposure in ChannelDetails#4470
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure

Conversation

@Bortlesboat

Copy link
Copy Markdown
Contributor

Summary

Adds a current_dust_exposure_msat field to ChannelDetails that surfaces the current total dust exposure on a channel.

  • The value is the maximum of the dust exposure across the holder and counterparty commitment transactions
  • Includes both dust HTLC values and the commitment transaction fee component (as noted by @TheBlueMatt in Expose current dust exposure #2264, dust exposure now includes commitment tx fees, not just dust HTLCs)
  • Users can compare this against ChannelConfig::max_dust_htlc_exposure to monitor how close a channel is to its dust limit
  • Field is Option<u64>, None for objects serialized prior to 0.2.1
  • TLV tag 49 for backwards-compatible serialization

Implementation

  1. Added dust_exposure_msat to AvailableBalances — computed as max(local_dust_exposure_msat, remote_dust_exposure_msat) in get_available_balances (tx_builder.rs)
  2. When folding across multiple funding scopes (splices), takes the max dust exposure
  3. Added current_dust_exposure_msat: Option<u64> to ChannelDetails struct, populated from the balance computation in from_channel

Fixes#2264

@ldk-reviews-bot

ldk-reviews-bot commented Mar 8, 2026

Copy link
Copy Markdown

👋 I see @tankyleo was un-assigned.
If you'd like another reviewer assignment, please click here.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 06585ba to c571ad4CompareMarch 9, 2026 01:31
@tankyleo
tankyleo requested review from tankyleo and removed request for valentinewallaceMarch 9, 2026 11:18
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from c571ad4 to 4f9b1e5CompareMarch 9, 2026 18:25
@codecov

codecovBot commented Mar 9, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 75.00000% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 86.19%. Comparing base (4a3aaef) to head (515b244).
⚠️ Report is 97 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel_state.rs66.66%1 Missing ⚠️
lightning/src/routing/router.rs50.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4470 +/- ##
==========================================
+ Coverage 86.01% 86.19% +0.17% 
==========================================
Files 159 160 +1 Lines 105430 107554 +2124 Branches 105430 107554 +2124 ==========================================
+ Hits 90690 92707 +2017 + Misses 12229 12221 -8 - Partials 2511 2626 +115 
FlagCoverage Δ
tests86.19% <75.00%> (+0.17%)⬆️

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.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Quick follow-up from my side: I’m treating review-required PRs as top priority this week. If you want any specific changes, rebase, or split, I can turn them around quickly.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 4f9b1e5 to 03c307dCompareMarch 13, 2026 04:41
@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 03c307d to b856d80CompareMarch 15, 2026 18:19
@ldk-claude-review-bot

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

Copy link
Copy Markdown
Collaborator

I've reviewed the entire PR diff thoroughly, checking all changed files against the codebase context I have from prior reviews.

Prior review status:

  • The #[allow(deprecated)] issue (tx_builder.rs) — fully resolved, the annotation was removed.
  • The version string issue (channel_state.rs:493) — partially resolved. It was changed from "prior to 0.2.1" to "prior to 0.3." but the suggestion was "prior to 0.3.0" to match the three-part version convention used elsewhere (e.g., "prior to 0.2.0" on line 480). This is a minor inconsistency, not a bug.

New issues: None found. The implementation is correct:

  • max(local_dust_exposure_msat, remote_dust_exposure_msat) correctly captures worst-case dust exposure.
  • The fold across funding scopes uses .max() — correct for worst-case across splices.
  • TLV tag 49 (odd, sequential after 47) is correct for backwards-compatible optional serialization.
  • All 4 AvailableBalances construction sites and all ChannelDetails construction sites include the new field.
  • Serialization round-trip test at line 777 covers the new field.
  • Option<u64> in ChannelDetails (with None for old serialized data) vs plain u64 in AvailableBalances is appropriate.
  • Error/fallback paths default dust_exposure_msat to 0, consistent with the existing pattern for other balance fields in those paths.

No issues found.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 3rd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi @tankyleo — no worries if you're busy! Could another maintainer pick this up? Happy to address any feedback quickly.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 4th Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

Comment threadlightning/src/ln/channel.rs
@TheBlueMatt
TheBlueMatt removed the request for review from tankyleoMarch 19, 2026 20:41

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the delay

Comment threadlightning/src/sign/tx_builder.rs
Comment threadlightning/src/ln/channel_state.rs Outdated
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi — tankyleo appears to be unavailable (4 reminders sent). Could another reviewer pick this up? It's a small addition exposing dust exposure values that are already computed internally. Happy to address any feedback.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two small things, one that actually needs fixing, otherwise we'll land this. Thanks!

Comment threadlightning/src/ln/channel_state.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/sign/tx_builder.rs

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please feel free to squash the fixup commits down so that the git history only contains the one main commit

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 40ce774 to 515b244CompareMarch 25, 2026 17:12
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Done — squashed into a single commit.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 515b244 to d660c33CompareApril 12, 2026 16:50
Comment threadlightning/src/sign/tx_builder.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Please address the claude comment - its correct, we should drop that allow i think it snuck in from a back rebase. Also please feel free to squash the fixup commit again.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from d660c33 to cb34df1CompareApril 14, 2026 16:58
Co-authored-by: Codex <codex@openai.com>
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from cb34df1 to 1ee9480CompareApril 14, 2026 17:05
@TheBlueMatt
TheBlueMatt merged commit 8712856 into lightningdevkit:mainMay 1, 2026
21 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

None yet

Development

Successfully merging this pull request may close these issues.

Expose current dust exposure

5 participants

@Bortlesboat@ldk-reviews-bot@ldk-claude-review-bot@TheBlueMatt@tankyleo
, '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

Expose current dust exposure in ChannelDetails - #4470

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure
May 1, 2026
Merged

Expose current dust exposure in ChannelDetails#4470
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure

Conversation

@Bortlesboat

Copy link
Copy Markdown
Contributor

Summary

Adds a current_dust_exposure_msat field to ChannelDetails that surfaces the current total dust exposure on a channel.

  • The value is the maximum of the dust exposure across the holder and counterparty commitment transactions
  • Includes both dust HTLC values and the commitment transaction fee component (as noted by @TheBlueMatt in Expose current dust exposure #2264, dust exposure now includes commitment tx fees, not just dust HTLCs)
  • Users can compare this against ChannelConfig::max_dust_htlc_exposure to monitor how close a channel is to its dust limit
  • Field is Option<u64>, None for objects serialized prior to 0.2.1
  • TLV tag 49 for backwards-compatible serialization

Implementation

  1. Added dust_exposure_msat to AvailableBalances — computed as max(local_dust_exposure_msat, remote_dust_exposure_msat) in get_available_balances (tx_builder.rs)
  2. When folding across multiple funding scopes (splices), takes the max dust exposure
  3. Added current_dust_exposure_msat: Option<u64> to ChannelDetails struct, populated from the balance computation in from_channel

Fixes#2264

@ldk-reviews-bot

ldk-reviews-bot commented Mar 8, 2026

Copy link
Copy Markdown

👋 I see @tankyleo was un-assigned.
If you'd like another reviewer assignment, please click here.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 06585ba to c571ad4CompareMarch 9, 2026 01:31
@tankyleo
tankyleo requested review from tankyleo and removed request for valentinewallaceMarch 9, 2026 11:18
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from c571ad4 to 4f9b1e5CompareMarch 9, 2026 18:25
@codecov

codecovBot commented Mar 9, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 75.00000% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 86.19%. Comparing base (4a3aaef) to head (515b244).
⚠️ Report is 97 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel_state.rs66.66%1 Missing ⚠️
lightning/src/routing/router.rs50.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4470 +/- ##
==========================================
+ Coverage 86.01% 86.19% +0.17% 
==========================================
Files 159 160 +1 Lines 105430 107554 +2124 Branches 105430 107554 +2124 ==========================================
+ Hits 90690 92707 +2017 + Misses 12229 12221 -8 - Partials 2511 2626 +115 
FlagCoverage Δ
tests86.19% <75.00%> (+0.17%)⬆️

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.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Quick follow-up from my side: I’m treating review-required PRs as top priority this week. If you want any specific changes, rebase, or split, I can turn them around quickly.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 4f9b1e5 to 03c307dCompareMarch 13, 2026 04:41
@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 03c307d to b856d80CompareMarch 15, 2026 18:19
@ldk-claude-review-bot

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

Copy link
Copy Markdown
Collaborator

I've reviewed the entire PR diff thoroughly, checking all changed files against the codebase context I have from prior reviews.

Prior review status:

  • The #[allow(deprecated)] issue (tx_builder.rs) — fully resolved, the annotation was removed.
  • The version string issue (channel_state.rs:493) — partially resolved. It was changed from "prior to 0.2.1" to "prior to 0.3." but the suggestion was "prior to 0.3.0" to match the three-part version convention used elsewhere (e.g., "prior to 0.2.0" on line 480). This is a minor inconsistency, not a bug.

New issues: None found. The implementation is correct:

  • max(local_dust_exposure_msat, remote_dust_exposure_msat) correctly captures worst-case dust exposure.
  • The fold across funding scopes uses .max() — correct for worst-case across splices.
  • TLV tag 49 (odd, sequential after 47) is correct for backwards-compatible optional serialization.
  • All 4 AvailableBalances construction sites and all ChannelDetails construction sites include the new field.
  • Serialization round-trip test at line 777 covers the new field.
  • Option<u64> in ChannelDetails (with None for old serialized data) vs plain u64 in AvailableBalances is appropriate.
  • Error/fallback paths default dust_exposure_msat to 0, consistent with the existing pattern for other balance fields in those paths.

No issues found.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 3rd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi @tankyleo — no worries if you're busy! Could another maintainer pick this up? Happy to address any feedback quickly.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 4th Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

Comment threadlightning/src/ln/channel.rs
@TheBlueMatt
TheBlueMatt removed the request for review from tankyleoMarch 19, 2026 20:41

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the delay

Comment threadlightning/src/sign/tx_builder.rs
Comment threadlightning/src/ln/channel_state.rs Outdated
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi — tankyleo appears to be unavailable (4 reminders sent). Could another reviewer pick this up? It's a small addition exposing dust exposure values that are already computed internally. Happy to address any feedback.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two small things, one that actually needs fixing, otherwise we'll land this. Thanks!

Comment threadlightning/src/ln/channel_state.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/sign/tx_builder.rs

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please feel free to squash the fixup commits down so that the git history only contains the one main commit

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 40ce774 to 515b244CompareMarch 25, 2026 17:12
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Done — squashed into a single commit.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 515b244 to d660c33CompareApril 12, 2026 16:50
Comment threadlightning/src/sign/tx_builder.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Please address the claude comment - its correct, we should drop that allow i think it snuck in from a back rebase. Also please feel free to squash the fixup commit again.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from d660c33 to cb34df1CompareApril 14, 2026 16:58
Co-authored-by: Codex <codex@openai.com>
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from cb34df1 to 1ee9480CompareApril 14, 2026 17:05
@TheBlueMatt
TheBlueMatt merged commit 8712856 into lightningdevkit:mainMay 1, 2026
21 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

None yet

Development

Successfully merging this pull request may close these issues.

Expose current dust exposure

5 participants

@Bortlesboat@ldk-reviews-bot@ldk-claude-review-bot@TheBlueMatt@tankyleo
, '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

Expose current dust exposure in ChannelDetails - #4470

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure
May 1, 2026
Merged

Expose current dust exposure in ChannelDetails#4470
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure

Conversation

@Bortlesboat

Copy link
Copy Markdown
Contributor

Summary

Adds a current_dust_exposure_msat field to ChannelDetails that surfaces the current total dust exposure on a channel.

  • The value is the maximum of the dust exposure across the holder and counterparty commitment transactions
  • Includes both dust HTLC values and the commitment transaction fee component (as noted by @TheBlueMatt in Expose current dust exposure #2264, dust exposure now includes commitment tx fees, not just dust HTLCs)
  • Users can compare this against ChannelConfig::max_dust_htlc_exposure to monitor how close a channel is to its dust limit
  • Field is Option<u64>, None for objects serialized prior to 0.2.1
  • TLV tag 49 for backwards-compatible serialization

Implementation

  1. Added dust_exposure_msat to AvailableBalances — computed as max(local_dust_exposure_msat, remote_dust_exposure_msat) in get_available_balances (tx_builder.rs)
  2. When folding across multiple funding scopes (splices), takes the max dust exposure
  3. Added current_dust_exposure_msat: Option<u64> to ChannelDetails struct, populated from the balance computation in from_channel

Fixes#2264

@ldk-reviews-bot

ldk-reviews-bot commented Mar 8, 2026

Copy link
Copy Markdown

👋 I see @tankyleo was un-assigned.
If you'd like another reviewer assignment, please click here.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 06585ba to c571ad4CompareMarch 9, 2026 01:31
@tankyleo
tankyleo requested review from tankyleo and removed request for valentinewallaceMarch 9, 2026 11:18
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from c571ad4 to 4f9b1e5CompareMarch 9, 2026 18:25
@codecov

codecovBot commented Mar 9, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 75.00000% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 86.19%. Comparing base (4a3aaef) to head (515b244).
⚠️ Report is 97 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel_state.rs66.66%1 Missing ⚠️
lightning/src/routing/router.rs50.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4470 +/- ##
==========================================
+ Coverage 86.01% 86.19% +0.17% 
==========================================
Files 159 160 +1 Lines 105430 107554 +2124 Branches 105430 107554 +2124 ==========================================
+ Hits 90690 92707 +2017 + Misses 12229 12221 -8 - Partials 2511 2626 +115 
FlagCoverage Δ
tests86.19% <75.00%> (+0.17%)⬆️

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.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Quick follow-up from my side: I’m treating review-required PRs as top priority this week. If you want any specific changes, rebase, or split, I can turn them around quickly.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 4f9b1e5 to 03c307dCompareMarch 13, 2026 04:41
@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 03c307d to b856d80CompareMarch 15, 2026 18:19
@ldk-claude-review-bot

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

Copy link
Copy Markdown
Collaborator

I've reviewed the entire PR diff thoroughly, checking all changed files against the codebase context I have from prior reviews.

Prior review status:

  • The #[allow(deprecated)] issue (tx_builder.rs) — fully resolved, the annotation was removed.
  • The version string issue (channel_state.rs:493) — partially resolved. It was changed from "prior to 0.2.1" to "prior to 0.3." but the suggestion was "prior to 0.3.0" to match the three-part version convention used elsewhere (e.g., "prior to 0.2.0" on line 480). This is a minor inconsistency, not a bug.

New issues: None found. The implementation is correct:

  • max(local_dust_exposure_msat, remote_dust_exposure_msat) correctly captures worst-case dust exposure.
  • The fold across funding scopes uses .max() — correct for worst-case across splices.
  • TLV tag 49 (odd, sequential after 47) is correct for backwards-compatible optional serialization.
  • All 4 AvailableBalances construction sites and all ChannelDetails construction sites include the new field.
  • Serialization round-trip test at line 777 covers the new field.
  • Option<u64> in ChannelDetails (with None for old serialized data) vs plain u64 in AvailableBalances is appropriate.
  • Error/fallback paths default dust_exposure_msat to 0, consistent with the existing pattern for other balance fields in those paths.

No issues found.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 3rd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi @tankyleo — no worries if you're busy! Could another maintainer pick this up? Happy to address any feedback quickly.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 4th Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

Comment threadlightning/src/ln/channel.rs
@TheBlueMatt
TheBlueMatt removed the request for review from tankyleoMarch 19, 2026 20:41

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the delay

Comment threadlightning/src/sign/tx_builder.rs
Comment threadlightning/src/ln/channel_state.rs Outdated
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi — tankyleo appears to be unavailable (4 reminders sent). Could another reviewer pick this up? It's a small addition exposing dust exposure values that are already computed internally. Happy to address any feedback.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two small things, one that actually needs fixing, otherwise we'll land this. Thanks!

Comment threadlightning/src/ln/channel_state.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/sign/tx_builder.rs

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please feel free to squash the fixup commits down so that the git history only contains the one main commit

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 40ce774 to 515b244CompareMarch 25, 2026 17:12
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Done — squashed into a single commit.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 515b244 to d660c33CompareApril 12, 2026 16:50
Comment threadlightning/src/sign/tx_builder.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Please address the claude comment - its correct, we should drop that allow i think it snuck in from a back rebase. Also please feel free to squash the fixup commit again.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from d660c33 to cb34df1CompareApril 14, 2026 16:58
Co-authored-by: Codex <codex@openai.com>
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from cb34df1 to 1ee9480CompareApril 14, 2026 17:05
@TheBlueMatt
TheBlueMatt merged commit 8712856 into lightningdevkit:mainMay 1, 2026
21 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

None yet

Development

Successfully merging this pull request may close these issues.

Expose current dust exposure

5 participants

@Bortlesboat@ldk-reviews-bot@ldk-claude-review-bot@TheBlueMatt@tankyleo
, '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

Expose current dust exposure in ChannelDetails - #4470

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure
May 1, 2026
Merged

Expose current dust exposure in ChannelDetails#4470
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure

Conversation

@Bortlesboat

Copy link
Copy Markdown
Contributor

Summary

Adds a current_dust_exposure_msat field to ChannelDetails that surfaces the current total dust exposure on a channel.

  • The value is the maximum of the dust exposure across the holder and counterparty commitment transactions
  • Includes both dust HTLC values and the commitment transaction fee component (as noted by @TheBlueMatt in Expose current dust exposure #2264, dust exposure now includes commitment tx fees, not just dust HTLCs)
  • Users can compare this against ChannelConfig::max_dust_htlc_exposure to monitor how close a channel is to its dust limit
  • Field is Option<u64>, None for objects serialized prior to 0.2.1
  • TLV tag 49 for backwards-compatible serialization

Implementation

  1. Added dust_exposure_msat to AvailableBalances — computed as max(local_dust_exposure_msat, remote_dust_exposure_msat) in get_available_balances (tx_builder.rs)
  2. When folding across multiple funding scopes (splices), takes the max dust exposure
  3. Added current_dust_exposure_msat: Option<u64> to ChannelDetails struct, populated from the balance computation in from_channel

Fixes#2264

@ldk-reviews-bot

ldk-reviews-bot commented Mar 8, 2026

Copy link
Copy Markdown

👋 I see @tankyleo was un-assigned.
If you'd like another reviewer assignment, please click here.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 06585ba to c571ad4CompareMarch 9, 2026 01:31
@tankyleo
tankyleo requested review from tankyleo and removed request for valentinewallaceMarch 9, 2026 11:18
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from c571ad4 to 4f9b1e5CompareMarch 9, 2026 18:25
@codecov

codecovBot commented Mar 9, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 75.00000% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 86.19%. Comparing base (4a3aaef) to head (515b244).
⚠️ Report is 97 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel_state.rs66.66%1 Missing ⚠️
lightning/src/routing/router.rs50.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4470 +/- ##
==========================================
+ Coverage 86.01% 86.19% +0.17% 
==========================================
Files 159 160 +1 Lines 105430 107554 +2124 Branches 105430 107554 +2124 ==========================================
+ Hits 90690 92707 +2017 + Misses 12229 12221 -8 - Partials 2511 2626 +115 
FlagCoverage Δ
tests86.19% <75.00%> (+0.17%)⬆️

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.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Quick follow-up from my side: I’m treating review-required PRs as top priority this week. If you want any specific changes, rebase, or split, I can turn them around quickly.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 4f9b1e5 to 03c307dCompareMarch 13, 2026 04:41
@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 03c307d to b856d80CompareMarch 15, 2026 18:19
@ldk-claude-review-bot

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

Copy link
Copy Markdown
Collaborator

I've reviewed the entire PR diff thoroughly, checking all changed files against the codebase context I have from prior reviews.

Prior review status:

  • The #[allow(deprecated)] issue (tx_builder.rs) — fully resolved, the annotation was removed.
  • The version string issue (channel_state.rs:493) — partially resolved. It was changed from "prior to 0.2.1" to "prior to 0.3." but the suggestion was "prior to 0.3.0" to match the three-part version convention used elsewhere (e.g., "prior to 0.2.0" on line 480). This is a minor inconsistency, not a bug.

New issues: None found. The implementation is correct:

  • max(local_dust_exposure_msat, remote_dust_exposure_msat) correctly captures worst-case dust exposure.
  • The fold across funding scopes uses .max() — correct for worst-case across splices.
  • TLV tag 49 (odd, sequential after 47) is correct for backwards-compatible optional serialization.
  • All 4 AvailableBalances construction sites and all ChannelDetails construction sites include the new field.
  • Serialization round-trip test at line 777 covers the new field.
  • Option<u64> in ChannelDetails (with None for old serialized data) vs plain u64 in AvailableBalances is appropriate.
  • Error/fallback paths default dust_exposure_msat to 0, consistent with the existing pattern for other balance fields in those paths.

No issues found.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 3rd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi @tankyleo — no worries if you're busy! Could another maintainer pick this up? Happy to address any feedback quickly.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 4th Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

Comment threadlightning/src/ln/channel.rs
@TheBlueMatt
TheBlueMatt removed the request for review from tankyleoMarch 19, 2026 20:41

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the delay

Comment threadlightning/src/sign/tx_builder.rs
Comment threadlightning/src/ln/channel_state.rs Outdated
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi — tankyleo appears to be unavailable (4 reminders sent). Could another reviewer pick this up? It's a small addition exposing dust exposure values that are already computed internally. Happy to address any feedback.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two small things, one that actually needs fixing, otherwise we'll land this. Thanks!

Comment threadlightning/src/ln/channel_state.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/sign/tx_builder.rs

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please feel free to squash the fixup commits down so that the git history only contains the one main commit

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 40ce774 to 515b244CompareMarch 25, 2026 17:12
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Done — squashed into a single commit.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 515b244 to d660c33CompareApril 12, 2026 16:50
Comment threadlightning/src/sign/tx_builder.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Please address the claude comment - its correct, we should drop that allow i think it snuck in from a back rebase. Also please feel free to squash the fixup commit again.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from d660c33 to cb34df1CompareApril 14, 2026 16:58
Co-authored-by: Codex <codex@openai.com>
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from cb34df1 to 1ee9480CompareApril 14, 2026 17:05
@TheBlueMatt
TheBlueMatt merged commit 8712856 into lightningdevkit:mainMay 1, 2026
21 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

None yet

Development

Successfully merging this pull request may close these issues.

Expose current dust exposure

5 participants

@Bortlesboat@ldk-reviews-bot@ldk-claude-review-bot@TheBlueMatt@tankyleo
, '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

Expose current dust exposure in ChannelDetails - #4470

Merged
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure
May 1, 2026
Merged

Expose current dust exposure in ChannelDetails#4470
TheBlueMatt merged 1 commit into
lightningdevkit:mainfrom
Bortlesboat:feat/expose-dust-exposure

Conversation

@Bortlesboat

Copy link
Copy Markdown
Contributor

Summary

Adds a current_dust_exposure_msat field to ChannelDetails that surfaces the current total dust exposure on a channel.

  • The value is the maximum of the dust exposure across the holder and counterparty commitment transactions
  • Includes both dust HTLC values and the commitment transaction fee component (as noted by @TheBlueMatt in Expose current dust exposure #2264, dust exposure now includes commitment tx fees, not just dust HTLCs)
  • Users can compare this against ChannelConfig::max_dust_htlc_exposure to monitor how close a channel is to its dust limit
  • Field is Option<u64>, None for objects serialized prior to 0.2.1
  • TLV tag 49 for backwards-compatible serialization

Implementation

  1. Added dust_exposure_msat to AvailableBalances — computed as max(local_dust_exposure_msat, remote_dust_exposure_msat) in get_available_balances (tx_builder.rs)
  2. When folding across multiple funding scopes (splices), takes the max dust exposure
  3. Added current_dust_exposure_msat: Option<u64> to ChannelDetails struct, populated from the balance computation in from_channel

Fixes#2264

@ldk-reviews-bot

ldk-reviews-bot commented Mar 8, 2026

Copy link
Copy Markdown

👋 I see @tankyleo was un-assigned.
If you'd like another reviewer assignment, please click here.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 06585ba to c571ad4CompareMarch 9, 2026 01:31
@tankyleo
tankyleo requested review from tankyleo and removed request for valentinewallaceMarch 9, 2026 11:18
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from c571ad4 to 4f9b1e5CompareMarch 9, 2026 18:25
@codecov

codecovBot commented Mar 9, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 75.00000% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 86.19%. Comparing base (4a3aaef) to head (515b244).
⚠️ Report is 97 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channel_state.rs66.66%1 Missing ⚠️
lightning/src/routing/router.rs50.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4470 +/- ##
==========================================
+ Coverage 86.01% 86.19% +0.17% 
==========================================
Files 159 160 +1 Lines 105430 107554 +2124 Branches 105430 107554 +2124 ==========================================
+ Hits 90690 92707 +2017 + Misses 12229 12221 -8 - Partials 2511 2626 +115 
FlagCoverage Δ
tests86.19% <75.00%> (+0.17%)⬆️

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.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Quick follow-up from my side: I’m treating review-required PRs as top priority this week. If you want any specific changes, rebase, or split, I can turn them around quickly.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 4f9b1e5 to 03c307dCompareMarch 13, 2026 04:41
@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 03c307d to b856d80CompareMarch 15, 2026 18:19
@ldk-claude-review-bot

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

Copy link
Copy Markdown
Collaborator

I've reviewed the entire PR diff thoroughly, checking all changed files against the codebase context I have from prior reviews.

Prior review status:

  • The #[allow(deprecated)] issue (tx_builder.rs) — fully resolved, the annotation was removed.
  • The version string issue (channel_state.rs:493) — partially resolved. It was changed from "prior to 0.2.1" to "prior to 0.3." but the suggestion was "prior to 0.3.0" to match the three-part version convention used elsewhere (e.g., "prior to 0.2.0" on line 480). This is a minor inconsistency, not a bug.

New issues: None found. The implementation is correct:

  • max(local_dust_exposure_msat, remote_dust_exposure_msat) correctly captures worst-case dust exposure.
  • The fold across funding scopes uses .max() — correct for worst-case across splices.
  • TLV tag 49 (odd, sequential after 47) is correct for backwards-compatible optional serialization.
  • All 4 AvailableBalances construction sites and all ChannelDetails construction sites include the new field.
  • Serialization round-trip test at line 777 covers the new field.
  • Option<u64> in ChannelDetails (with None for old serialized data) vs plain u64 in AvailableBalances is appropriate.
  • Error/fallback paths default dust_exposure_msat to 0, consistent with the existing pattern for other balance fields in those paths.

No issues found.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 3rd Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi @tankyleo — no worries if you're busy! Could another maintainer pick this up? Happy to address any feedback quickly.

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 4th Reminder

Hey @tankyleo! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

Comment threadlightning/src/ln/channel.rs
@TheBlueMatt
TheBlueMatt removed the request for review from tankyleoMarch 19, 2026 20:41

@tankyleotankyleo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the delay

Comment threadlightning/src/sign/tx_builder.rs
Comment threadlightning/src/ln/channel_state.rs Outdated
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Hi — tankyleo appears to be unavailable (4 reminders sent). Could another reviewer pick this up? It's a small addition exposing dust exposure values that are already computed internally. Happy to address any feedback.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two small things, one that actually needs fixing, otherwise we'll land this. Thanks!

Comment threadlightning/src/ln/channel_state.rs Outdated
Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/sign/tx_builder.rs

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please feel free to squash the fixup commits down so that the git history only contains the one main commit

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 40ce774 to 515b244CompareMarch 25, 2026 17:12
@Bortlesboat

Copy link
Copy Markdown
ContributorAuthor

Done — squashed into a single commit.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from 515b244 to d660c33CompareApril 12, 2026 16:50
Comment threadlightning/src/sign/tx_builder.rs Outdated
@TheBlueMatt

Copy link
Copy Markdown
Collaborator

Please address the claude comment - its correct, we should drop that allow i think it snuck in from a back rebase. Also please feel free to squash the fixup commit again.

@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from d660c33 to cb34df1CompareApril 14, 2026 16:58
Co-authored-by: Codex <codex@openai.com>
@Bortlesboat
Bortlesboatforce-pushed the feat/expose-dust-exposure branch from cb34df1 to 1ee9480CompareApril 14, 2026 17:05
@TheBlueMatt
TheBlueMatt merged commit 8712856 into lightningdevkit:mainMay 1, 2026
21 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

None yet

Development

Successfully merging this pull request may close these issues.

Expose current dust exposure

5 participants

@Bortlesboat@ldk-reviews-bot@ldk-claude-review-bot@TheBlueMatt@tankyleo