staticaddr/loopin: make canceled-invoice timeout unlock recoverable
Los mantenedores suelen responder en 2 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 48/100
Línea de trabajo
Comienza con MonitorInvoiceAndHtlcTxAction y la transición MonitorInvoiceAndHtlcTx en OnSwapTimedOut; después, inspecciona UnlockState, OnRecover y unlockDeposits. Revisa la discusión sobre la recuperación y el ciclo de vida en PR #1161. Se considera terminado cuando un timeout sin confirmación sigue siendo recuperable y alcanza Failed solo después de que los depósitos se hayan desbloqueado o se sepa que no son necesarios.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Go
- Estrellas
- 593
- Forks
- 138
- Merge medio
- 4 d 18 h
- PR fusionados (30 d)
- 20
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de lightninglabs/loop
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
lightninglabs/loop#1246 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 4/5 3-5 días Aptitud para principiantes 50/100
lightninglabs/loop#1208 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
lightninglabs/loop#1196 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 42/100
lightninglabs/loop#1172 ·
Los mantenedores suelen responder en 2 días
-
Track armed static address HTLCs after aborted swapsQuizá libre de nuevo @hieblmi la tomó hace 110 días y no hay ningún pull request abierto. Abierto
lightninglabs/loop#1171 · 1 asignado ·
Los mantenedores suelen responder en 2 días
Todos los issues de lightninglabs/loop
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 1/5 1-3 horas Aptitud para principiantes 76/100
superplanehq/superplane#9007 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
yetone/magpie#3905 · 1 comentario ·
Los mantenedores suelen responder en 1 día