Skip to content

Conversation

@ddustin
Copy link
Collaborator

@ddustin ddustin commented Jan 5, 2026

A collection of fixes for interop with Eclair.

  • Clearer logging of splice flow errors.
  • Allowing channel_ready messages to occur during splice reestablish flow.
  • Fixing of splice related RPC user shown errors code -- they could come from multiple places and cause a crash if they do.
  • Implement the triggering of the sending of announcement signatures if requested by new reestablish TLVs.

@ddustin ddustin changed the title reestablish: Send announcement sigs when asked Splice Interop Jan 8, 2026
Update log message to match the behavior of the check its logging about.

Changelog-None
In some situations Eclair sends CHANNEL_READY before resuming the splice in reestablish. This update allows one of these messages to be processed if it comes in during the splice resume process.

Changelog-None
Splice commands can fail because of external reasons, for example our peer rejecting the splice. These external reasons eat the active `splice_command` so we need to stop storing the `splice_command` in callbacks and instead pull it from the `splice_commands` list which automatically removes the object when its consumed.

This corrects a lightningd crash under certain RPC circumstances.

Changelog-None
A new TLV in `channel_reestablish` lets our peer request announcement signatures. This updates CLN to (re)send them when requested.

As per splice spec PR https://github.com/lightning/bolts/pull/1160/changes#diff-ed04ca2c673fd6aabde69389511fa9ee60cb44d6b2ef6c88b549ffaa753d6afeR3303-R3308

Changelog-None
@ddustin ddustin marked this pull request as ready for review January 8, 2026 20:12
@ddustin ddustin requested a review from rustyrussell January 8, 2026 20:29
@t-bast
Copy link

t-bast commented Jan 9, 2026

Implement the triggering of the sending of announcement signatures if requested by new reestablish TLVs.

I believe you've introduced a new bug in your fix. I've tested the following flow:

  • eclair and cln have a confirmed channel
  • eclair creates a splice that confirms and ignores cln's announcement_signatures
  • I restart the eclair node: on reconnection, it asks for a retransmission of announcement_signatures, which cln correctly retransmits (so I initially thought that this was fixed)
  • But if I ignore it again and reconnect a second time (with exactly the same channel_reestablish where eclair asks again for retransmission of announcement_signatures), now cln sends an error and force-closes

Here is the log of the force-close:

2026-01-09T11:08:21.071Z **BROKEN** 0375124ab04a67a5d074833dce3197f733fec624e2200e9bd69e52bbeb5d980a98-chan#1: Internal error CHANNELD_NORMAL: bad channeld_reestablished 044d01
2026-01-09T11:08:21.071Z UNUSUAL 0375124ab04a67a5d074833dce3197f733fec624e2200e9bd69e52bbeb5d980a98-chan#1: Peer permanent failure in CHANNELD_NORMAL: Internal error (reason=local)
2026-01-09T11:08:21.071Z INFO    0375124ab04a67a5d074833dce3197f733fec624e2200e9bd69e52bbeb5d980a98-chan#1: State changed from CHANNELD_NORMAL to AWAITING_UNILATERAL

If you want to reproduce, you can use this custom eclair branch that ignores splice announcement_signatures: https://github.com/ACINQ/eclair/tree/splicing-official-cross-compat-annsigs-retransmit

Allowing channel_ready messages to occur during splice reestablish flow.

This one doesn't seem to be fixed. I still get the following error on reconnection:

Got incorrect message from peer: WIRE_CHANNEL_READY (should be WIRE_COMMITMENT_SIGNED or WIRE_TX_SIGNATURES or WIRE_TX_ABORT of WIRE_CHANNEL_READY) [Invalid ERROR message '0024907bcacf3f172c362443bbbc194d490cdfcf89f4693f8cf2da5a2825e8c9d0600397c01f3c5b332421ce9a8a4f31850eed46837c0e459f3f18af4fc7586b7963090108038bd74d261c9a5b']

Steps to reproduce:

  • use this branch of eclair, which will stop splicing before exchanging commit_sig: https://github.com/ACINQ/eclair/tree/splicing-official-cross-compat-abort-reconnect
  • open a channel between eclair and cln (in my test, opened by eclair with eclair-cli open --nodeId=<cln_node_id> --fundingSatoshis=300000 --fundingFeeBudgetSatoshis=10000 --channelType=anchor_outputs_zero_fee_htlc_tx)
  • wait for the channel to be confirmed
  • initiate a splice from eclair: eclair-cli splicein --channelId=<channel_id> --amountIn=100000
  • restart the eclair node: the logs will show this failure and the tx_abort isn't processed

Sign up for free to 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.

2 participants