You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Alternate strategy for unhandled exceptions (#2037)
This PRs adds an alternate strategy to handle unhandled exceptions. The goal is to avoid unnecessary mass force-close, but it is reserved to advanced users who closely monitor the node.
Available strategies are:
- local force close of the channel (default)
- log an error message and stop the node
Default settings maintain the same behavior as before.
Copy file name to clipboardExpand all lines: docs/release-notes/eclair-vnext.md
+6Lines changed: 6 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,12 @@
4
4
5
5
## Major changes
6
6
7
+
### Alternate strategy to avoid mass force-close of channels in certain cases
8
+
9
+
The default strategy, when an unhandled exception or internal error happens, is to locally force-close the channel. Not only is there a delay before the channel balance gets refunded, but if the exception was due to some misconfiguration or bug in eclair that affects all channels, we risk force-closing all channels.
10
+
11
+
This is why an alternative behavior is to simply log an error and stop the node. Note that if you don't closely monitor your node, there is a risk that your peers take advantage of the downtime to try and cheat by publishing a revoked commitment. Additionally, while there is no known way of triggering an internal error in eclair from the outside, there may very well be a bug that allows just that, which could be used as a way to remotely stop the node (with the default behavior, it would "only" cause a local force-close of the channel).
12
+
7
13
### Separate log for important notifications
8
14
9
15
Eclair added a new log file (`notifications.log`) for important notifications that require an action from the node operator.
@@ -1669,6 +1680,7 @@ class Channel(val nodeParams: NodeParams, val wallet: OnChainChannelFunder, remo
1669
1680
casesyncSuccess: SyncResult.Success=>
1670
1681
varsendQueue=Queue.empty[LightningMessage]
1671
1682
// normal case, our data is up-to-date
1683
+
1672
1684
if (channelReestablish.nextLocalCommitmentNumber ==1&& d.commitments.localCommit.index ==0) {
1673
1685
// If next_local_commitment_number is 1 in both the channel_reestablish it sent and received, then the node MUST retransmit funding_locked, otherwise it MUST NOT
1674
1686
log.debug("re-sending fundingLocked")
@@ -2288,7 +2300,8 @@ class Channel(val nodeParams: NodeParams, val wallet: OnChainChannelFunder, remo
0 commit comments