AI-generated analysisPublished automatically and not human-verified. Validated context appears in community notes below.
← Watch feed
Moderate 55 Bitcoin

Persist negotiated splice candidates on reload

Public commit record

What the developer wrote

Authored by Wilmer Paulino

68/100 · Adequate
Persist negotiated splice candidates on reload

Prior to supporting RBF, we would avoid persisting
`FundedChannel::pending_splice` when there was a pending funding
negotiation that could not be resumed on channel reestablishment. With
the addition of RBF support, this would cause our previously negotiated
splices (but still pending) to be dropped unintentionally.
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
The short version

What changed, and why it matters

This commit fixes a bug in the Lightning Dev Kit where restarting a node during a certain type of funding negotiation (RBF splice) could accidentally throw away already-agreed splice candidates. Previously, the code avoided saving incomplete negotiations on reload, but with RBF support that also dropped earlier negotiated splice states that the channel monitor was still tracking. The fix separates the live negotiation state from the negotiated candidates during serialization, so reload cancels only the in-flight negotiation while preserving the prior candidate. The bug is a state-consistency/data-loss issue rather than a direct theft vector, but it could disrupt channel operation or funds availability after a restart.

Recommended action

Treat as a state-consistency bugfix worth including in release notes. Users running nodes with splicing/RBF should upgrade to avoid loss of pending splice state across restarts. No immediate emergency response is warranted because exploitation requires a local reload during an active RBF negotiation and the impact is state disruption rather than direct fund loss. Review whether any channels currently have pending splices and, if so, avoid restarting before applying the patch.

Security signals we found

01

State loss on node reload for pending splice candidates

02

Mismatch between in-memory channel state and persisted chain monitor state

03

RBF funding negotiation not resumable across reload

04

Serialization filter dropped entire PendingFunding including already-negotiated candidates

05

Regression test added: test_reload_resets_splice_negotiation_without_dropping_candidates

Risk score

Why this scored 55/100

Our methodology →
Potential impact 18/30
Exploitability 8/25
Stealth signal 7/15
Affected reach 10/15
Confidence 8/10
Evidence quality 4/5
Human-validated context

Community notes

Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.

No validated notes yet.

The AI analysis stands alone for now. Submit a note if you can add evidence or important context.