fix: register swap listeners before websocket subscribe (#2141)

* fix: register swap listeners before websocket subscribe

* fix: only pay swap invoice when lookup returns not found
This commit is contained in:
Adithya Vardhan 2026-03-13 22:59:57 +05:30 committed by GitHub
parent fd86625984
commit 15ef0fb68e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -856,6 +856,11 @@ func (svc *swapsService) subscribePendingSwaps() {
}
func (svc *swapsService) startSwapInListener(swap *db.Swap) {
updateCh := make(chan boltz.SwapUpdate, 1)
svc.swapListenersLock.Lock()
svc.swapListeners[swap.SwapId] = updateCh
svc.swapListenersLock.Unlock()
for {
err := svc.boltzWs.Subscribe([]string{swap.SwapId})
if err != nil {
@ -868,11 +873,6 @@ func (svc *swapsService) startSwapInListener(swap *db.Swap) {
logger.Logger.WithField("swapId", swap.SwapId).Info("Subscribed to boltz websocket")
updateCh := make(chan boltz.SwapUpdate)
svc.swapListenersLock.Lock()
svc.swapListeners[swap.SwapId] = updateCh
svc.swapListenersLock.Unlock()
var err error
defer func() {
svc.swapListenersLock.Lock()
@ -1024,6 +1024,11 @@ func (svc *swapsService) startSwapInListener(swap *db.Swap) {
}
func (svc *swapsService) startSwapOutListener(swap *db.Swap) {
updateCh := make(chan boltz.SwapUpdate, 1)
svc.swapListenersLock.Lock()
svc.swapListeners[swap.SwapId] = updateCh
svc.swapListenersLock.Unlock()
for {
err := svc.boltzWs.Subscribe([]string{swap.SwapId})
if err != nil {
@ -1036,11 +1041,6 @@ func (svc *swapsService) startSwapOutListener(swap *db.Swap) {
logger.Logger.WithField("swapId", swap.SwapId).Info("Subscribed to boltz websocket")
updateCh := make(chan boltz.SwapUpdate)
svc.swapListenersLock.Lock()
svc.swapListeners[swap.SwapId] = updateCh
svc.swapListenersLock.Unlock()
var err error
defer func() {
svc.swapListenersLock.Lock()
@ -1163,10 +1163,14 @@ func (svc *swapsService) startSwapOutListener(swap *db.Swap) {
logger.Logger.WithField("swapId", swap.SwapId).Info("Paying the swap invoice")
go func() {
_, err := svc.transactionsService.LookupTransaction(svc.ctx, swap.PaymentHash, nil, svc.lnClient, nil)
if err == transactions.NewNotFoundError() {
if err == nil {
logger.Logger.WithField("swapId", swap.SwapId).Info("Already initiated swap invoice payment")
return
}
if !errors.Is(err, transactions.NewNotFoundError()) {
logger.Logger.WithError(err).WithField("swapId", swap.SwapId).Warn("Failed to lookup transaction")
return
}
metadata := map[string]interface{}{
"swap_id": swap.SwapId,
}