staticaddr/loopin: make canceled-invoice timeout unlock recoverable
I maintainer di solito rispondono entro 2 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 48/100
Direzione di ricerca
Inizia con MonitorInvoiceAndHtlcTxAction e la transizione MonitorInvoiceAndHtlcTx su OnSwapTimedOut, quindi esamina UnlockState, OnRecover e unlockDeposits. Esamina la discussione sul recupero e sul ciclo di vita in PR #1161. Il lavoro è completo quando un timeout senza conferma rimane recuperabile e raggiunge Failed solo dopo che i depositi sono stati sbloccati o si è stabilito che non sono necessari.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Problem
A static-address loop-in can reach the canceled-invoice recovery path without a durable guarantee that its deposits were unlocked.
Current monitor flow:
-
the payment deadline path cancels the invoice and then unlocks deposits:
cancelInvoice() err = f.unlockDeposits(ctx) -
those are separate side effects. If
loopdshuts down, crashes, or the deposit transition fails after invoice cancellation succeeds but before deposits are moved back toDeposited, recovery seesLookupInvoicereturnContractCanceled; -
in that recovered state no new
deadlineChanis created, so the deadline unlock path is not retried; -
if the HTLC never confirmed and the CLTV height arrives,
MonitorInvoiceAndHtlcTxActionreturnsOnSwapTimedOutand the loop-in moves toFailed, while deposits may remain stuck inLoopingIn.
This was discussed during PR #1161: https://github.com/lightninglabs/loop/pull/1161#discussion_r3539797010
The issue appears to predate PR #1161, but that PR touched the surrounding recovery/lifecycle code and made the invariant visible.
Potential fix
Route the no-HTLC-confirmation timeout path through a recoverable state-machine unlock state instead of transitioning directly to Failed.
One possible shape:
- add a success event such as
OnDepositsUnlocked; - route
MonitorInvoiceAndHtlcTx -> OnSwapTimedOut -> UnlockState(or a more specificUnlockDepositsBeforeFailstate); - make
UnlockStateretry onOnRecover; - only transition
UnlockState -> OnDepositsUnlocked -> FailedafterunlockDepositssucceeds; - if
unlockDepositsfails, keep the loop-in in the unlock state so restart/recovery retries cleanup rather than marking the swap failed with deposits possibly still locked.
The important invariant is: a no-confirmation timeout should not become final Failed until deposit unlock has succeeded or is known to be unnecessary.
- Lingua principale
- Go
- Stelle
- 593
- Fork
- 138
- Merge medio
- 4g 18h
- PR unite (30g)
- 20
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di lightninglabs/loop
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
lightninglabs/loop#1246 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 50/100
lightninglabs/loop#1208 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
lightninglabs/loop#1196 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 42/100
lightninglabs/loop#1172 ·
I maintainer di solito rispondono entro 2 giorni
-
Track armed static address HTLCs after aborted swapsForse di nuovo libera @hieblmi l’ha presa 108 giorni fa e non c’è nessuna pull request aperta. Aperta
lightninglabs/loop#1171 · 1 assegnatario ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di lightninglabs/loop
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
bug good first issue help wanted
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
SimonWaldherr/golang-examples#109 ·
-
Missing strings in en.tsApertaarea: localization needs-triage
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
bug ready-for-pr
Difficoltà 2/5 1-3 ore Idoneità per principianti 71/100
kunchenguid/no-mistakes#1615 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno