Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

staticaddr/deposit: separate generic OnError from caller-held rollback events

Abierto
#1,168 0 comentarios 0 reacciones 0 asignados Ver en GitHub

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
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
go
Área
backend

Línea de trabajo

Empieza rastreando updateDeposit, lockedEvents y TransitionDeposits, y después inspecciona las acciones de la FSM de depósitos PublishDepositExpirySweepAction y WaitForExpirySweepAction. Separa el evento de rollback retenido por el llamador de fsm.OnError genérico, para que los errores generados internamente adquieran el bloqueo del depósito, mientras que el rollback impulsado por el manager evite un doble bloqueo. La tarea estará terminada cuando ambas rutas conserven el estado previsto y las actualizaciones del store sin depender de una suposición incorrecta sobre el bloqueo.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Problem

The static-address deposit FSM currently treats fsm.OnError as if it always arrives while the caller already holds the deposit lock.

That assumption is not reliable. Some fsm.OnError transitions do come from TransitionDeposits, where the manager locks deposits before sending the event. But deposit FSM actions can also emit fsm.OnError internally. Examples include:

  • PublishDepositExpirySweepAction returning fsm.OnError after expiry sweep publish failures;
  • WaitForExpirySweepAction returning fsm.OnError after notifier or context errors.

Those internal paths originate from the deposit FSM's own block handling, so no external deposit lock is held.

Because fsm.OnError is in lockedEvents, updateDeposit can skip acquiring the deposit lock, call no-lock state mutation helpers, and update the store under an assumption that is false for internally generated errors.

This was discussed during PR #1161: https://github.com/lightninglabs/loop/pull/1161#discussion_r3539803146

The issue appears to predate PR #1161, but that PR touched the surrounding deposit locking/lifecycle code and made the invariant visible.

Potential fix

Do not use the generic fsm.OnError event to also mean "caller-held rollback/unlock to Deposited".

One possible shape:

  • introduce a deposit-specific rollback event, for example OnReleaseDeposit or OnDepositRollback;
  • use that event from manager-driven TransitionDeposits callers that already hold deposit locks and need to move selected deposits back to Deposited;
  • include that specific rollback event in lockedEvents;
  • remove generic fsm.OnError from lockedEvents, so internally generated errors acquire the deposit lock inside updateDeposit;
  • keep fsm.OnError as the generic action-error transition in the deposit FSM, not as an implicit lock-state signal.

That separates event meaning from caller locking context: events sent by TransitionDeposits can still avoid double-locking, while internally generated fsm.OnError paths no longer run no-lock state/store updates without a held deposit lock.

Lenguaje dominante
Go
Estrellas
593
Forks
137
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

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de lightninglabs/loop

Todos los issues de lightninglabs/loop

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.