From cbf7a14c95b758a2f99090043d284cc87bb0f3ea Mon Sep 17 00:00:00 2001 From: saubyk <39208279+saubyk@users.noreply.github.com> Date: Fri, 17 Jul 2026 11:54:55 -0700 Subject: [PATCH] Guard the LND channel information modal explorer link (#1606 parity) Address review F6 on #1625: the LND channel information modal has the same unguarded selNode.settings.blockExplorerUrl binding as the CLN one, and it is opened without selNode from the active-HTLCs and channel-backup tables, so it can blank out the same way. Guard the explorer link (*ngIf + a no-op click when the url is absent) so a missing selNode can no longer blank the dialog. Eclair's modal doesn't use selNode.settings, so it needs no change. Co-Authored-By: Claude Opus 4.8 (1M context) --- release-notes/Release-notes-0.15.9.md | 6 +++++- .../channel-information.component.html | 2 +- .../channel-information.component.ts | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/release-notes/Release-notes-0.15.9.md b/release-notes/Release-notes-0.15.9.md index d1cf7c8a..213c6f18 100644 --- a/release-notes/Release-notes-0.15.9.md +++ b/release-notes/Release-notes-0.15.9.md @@ -25,7 +25,11 @@ this release should add its entry under the appropriate section below. Connected, Private and the balances all showed no value. Because a disconnected channel moves to the pending/inactive table, this is exactly what was seen on "View Info" for a disconnected channel. The pending table now passes `selNode` (matching the open table), and the modal guards - the explorer link so a missing `selNode` can no longer blank the dialog. + the explorer link so a missing `selNode` can no longer blank the dialog. The LND channel + information modal had the same unguarded `selNode.settings.blockExplorerUrl` binding (reachable + from the active-HTLCs and channel-backup tables, which open it without `selNode`), so the same + guard was applied there for parity. Eclair's modal doesn't use `selNode.settings`, so it is + unaffected. ## Developer Tooling diff --git a/src/app/lnd/peers-channels/channels/channel-information-modal/channel-information.component.html b/src/app/lnd/peers-channels/channels/channel-information-modal/channel-information.component.html index afa7c8f0..700c4b5d 100644 --- a/src/app/lnd/peers-channels/channels/channel-information-modal/channel-information.component.html +++ b/src/app/lnd/peers-channels/channels/channel-information-modal/channel-information.component.html @@ -27,7 +27,7 @@

Channel Point

{{channel.channel_point}} - + diff --git a/src/app/lnd/peers-channels/channels/channel-information-modal/channel-information.component.ts b/src/app/lnd/peers-channels/channels/channel-information-modal/channel-information.component.ts index 56b1b110..9677afcf 100644 --- a/src/app/lnd/peers-channels/channels/channel-information-modal/channel-information.component.ts +++ b/src/app/lnd/peers-channels/channels/channel-information-modal/channel-information.component.ts @@ -52,6 +52,7 @@ export class ChannelInformationComponent implements OnInit { } onExplorerClicked() { + if (!this.selNode?.settings?.blockExplorerUrl) { return; } window.open(this.selNode.settings.blockExplorerUrl + '/tx/' + this.channel.channel_point, '_blank'); }