Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Accept tx_init_rbf after the peer sent splice_locked

Aperta
#3,386 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
62/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
scala
Ambito
backend

Direzione di ricerca

Start with the SpliceLocked handler, which calls updateRemoteFundingStatus(), and the TxInitRbf handler, which checks getSpliceRbfContext() and the other RBF gates. Check whether d.commitments.lastRemoteLocked_opt holds the latest fundingTxIndex at that point, then reject tx_init_rbf with a Warning and disconnect. Done means a test shows an RBF after the peer's splice_locked is rejected and the normal RBF path still works.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

BOLT 2 requires the receiver of tx_init_rbf to reject it when the sender has already sent splice_locked:

The receiving node:

  • ...
  • If the sender previously sent splice_locked:
    • MUST send a warning and close the connection or send an error
      and fail the channel.

Eclair does not enforce this. When the peer sends splice_locked for a pending splice and then tx_init_rbf, Eclair logs setting remoteFundingStatus=Locked for fundingTxId=<splice txid> fundingTxIndex=1, then accepting rbf, replies tx_ack_rbf and starts a new interactive-tx session.

Where

The SpliceLocked handler records the peer's splice_locked via updateRemoteFundingStatus(), which sets remoteFundingStatus = RemoteFundingStatus.Locked on the splice commitment.

The TxInitRbf handler gates the RBF only on: the channel being quiescent, getSpliceRbfContext() finding an unconfirmed, non zero-conf latest funding tx, the feerate being at least minNextFeerate, the liquidity purchase being kept, the attempt limit and spacing, and the liquidity ads request. It never consults remoteFundingStatus, so an RBF that arrives after the peer's splice_locked is accepted.

Impact

Low. No funds at risk: the RBF still runs through InteractiveTxBuilder and the normal signing flow, and nothing invalid is signed. The peer is contradicting itself (it said a splice was locked, then asked to replace it), which a correct receiver rejects up front; Eclair instead proceeds, wasting a round trip and leaving the channel quiesced longer. This is a spec-compliance / robustness gap.

Fix

In the TxInitRbf handler, if d.commitments.lastRemoteLocked_opt has the latest fundingTxIndex, send a Warning and disconnect instead of proceeding.

Discovery

Found while fuzzing splicing with smite.

Lingua principale
Scala
Stelle
1.3k
Fork
285
Merge medio
20h 22m
PR unite (30g)
28

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di ACINQ/eclair

Tutte le issue di ACINQ/eclair

Issue simili

Altre issue su Scala

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.