What changed, and why it matters
This commit removes a technical rule that required a specific Lightning feature flag (simple close) to be enabled whenever another experimental taproot feature flag (taproot staging) was enabled. Some lnd nodes were setting taproot staging without also setting simple close, causing Eclair nodes to disconnect from them. The change makes Eclair more tolerant of this behavior for the staging feature bit, while keeping the stricter rule for the final taproot feature bit. It is a compatibility/interoperability fix, not a security patch.
Treat as a routine compatibility fix. Review whether relaxing the staging dependency changes any assumptions used elsewhere in channel negotiation logic, but the diff itself does not indicate a security vulnerability.
Security signals we found
Feature-bit dependency relaxation
Interoperability fix for peer disconnection
No cryptographic, authorization, or consensus safety change visible in diff
Evidence from the diff
In Features.scala, the dependency map entry SimpleTaprootChannelsStaging -> (ChannelType :: SimpleClose :: Nil) is removed. This dependency previously caused Eclair to reject or disconnect peers that advertised taproot_staging without also advertising option_simple_close. The commit relaxes that requirement only for the staging bit; the official taproot feature bit will continue to enforce the dependency. The change is a one-line removal motivated by observed interoperability issues with lnd.
Changed components
eclair-core/src/main/scala/fr/acinq/eclair/Features.scalaInspect captured patch +0 / −1
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/Features.scala b/eclair-core/src/main/scala/fr/acinq/eclair/Features.scala
index 2716434..5104f77 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/Features.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/Features.scala
@@ -416,7 +416,6 @@ object Features {
KeySend -> (VariableLengthOnion :: Nil),
SimpleClose -> (ShutdownAnySegwit :: Nil),
SimpleTaprootChannelsPhoenix -> (ChannelType :: SimpleClose :: Nil),
- SimpleTaprootChannelsStaging -> (ChannelType :: SimpleClose :: Nil),
AsyncPaymentPrototype -> (TrampolinePaymentPrototype :: Nil),
OnTheFlyFunding -> (SplicePrototype :: Nil),
FundingFeeCredit -> (OnTheFlyFunding :: Nil)
Why this scored 24/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.