From 26f06c955ba00a8346f26cdb6adfe4feeff60106 Mon Sep 17 00:00:00 2001 From: Richard Myers Date: Mon, 10 Mar 2025 17:42:05 +0100 Subject: [PATCH] Gate new splice tlvs on remote support for splicing (#3031) We do not send splice TLVs to peers that do not advertise splice support to avoid an issue with CLN using the splice TLVs for testing the (experimental) channel upgrade feature. --- .../src/main/scala/fr/acinq/eclair/channel/fsm/Channel.scala | 3 ++- .../fr/acinq/eclair/channel/states/e/OfflineStateSpec.scala | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/channel/fsm/Channel.scala b/eclair-core/src/main/scala/fr/acinq/eclair/channel/fsm/Channel.scala index a751c15c8..37e7c439e 100644 --- a/eclair-core/src/main/scala/fr/acinq/eclair/channel/fsm/Channel.scala +++ b/eclair-core/src/main/scala/fr/acinq/eclair/channel/fsm/Channel.scala @@ -2275,9 +2275,10 @@ class Channel(val nodeParams: NodeParams, val wallet: OnChainChannelFunder with } case _ => Set.empty } - val lastFundingLockedTlvs: Set[ChannelReestablishTlv] = + val lastFundingLockedTlvs: Set[ChannelReestablishTlv] = if (d.commitments.params.remoteParams.initFeatures.hasFeature(Features.SplicePrototype)) { d.commitments.lastLocalLocked_opt.map(c => ChannelReestablishTlv.MyCurrentFundingLockedTlv(c.fundingTxId)).toSet ++ d.commitments.lastRemoteLocked_opt.map(c => ChannelReestablishTlv.YourLastFundingLockedTlv(c.fundingTxId)).toSet + } else Set.empty val channelReestablish = ChannelReestablish( channelId = d.channelId, diff --git a/eclair-core/src/test/scala/fr/acinq/eclair/channel/states/e/OfflineStateSpec.scala b/eclair-core/src/test/scala/fr/acinq/eclair/channel/states/e/OfflineStateSpec.scala index 470dab124..7766558f8 100644 --- a/eclair-core/src/test/scala/fr/acinq/eclair/channel/states/e/OfflineStateSpec.scala +++ b/eclair-core/src/test/scala/fr/acinq/eclair/channel/states/e/OfflineStateSpec.scala @@ -945,6 +945,7 @@ class OfflineStateSpec extends TestKitBaseClass with FixtureAnyFunSuiteLike with // Alice will resend her channel_ready on reconnection because the channel hasn't been used for any payment yet (pre-splice behavior). alice2bob.expectMsgType[ChannelReady] + bob2alice.expectMsgType[ChannelReady] alice2bob.expectNoMessage(100 millis) // we update the channel @@ -1015,6 +1016,8 @@ class OfflineStateSpec extends TestKitBaseClass with FixtureAnyFunSuiteLike with bob2alice.expectMsgType[ChannelReestablish] bob2alice.forward(alice) alice2bob.forward(bob) + bob2alice.expectMsgType[ChannelReady] + bob2alice.forward(alice) // Alice will NOT resend their channel_ready at reconnection because she has received bob's announcement_signatures (pre-splice behavior). alice2bob.expectNoMessage(100 millis)