Skip to content

Commit 00cc90b

Browse files
authored
Merge pull request #1006 from hieblmi/fix-swap-change
staticaddr: ignoreUnknown flag for DepositsForOutpoints
2 parents 7c41ec5 + 55081cd commit 00cc90b

File tree

6 files changed

+32
-8
lines changed

6 files changed

+32
-8
lines changed

loopd/swapclient_server.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1629,7 +1629,10 @@ func (s *swapClientServer) ListUnspentDeposits(ctx context.Context,
16291629
}
16301630

16311631
// Check the spent status of the deposits by looking at their states.
1632-
deposits, err := s.depositManager.DepositsForOutpoints(ctx, outpoints)
1632+
ignoreUnknownOutpoints := false
1633+
deposits, err := s.depositManager.DepositsForOutpoints(
1634+
ctx, outpoints, ignoreUnknownOutpoints,
1635+
)
16331636
if err != nil {
16341637
return nil, err
16351638
}

staticaddr/deposit/manager.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package deposit
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
67
"sort"
78
"sync"
@@ -566,7 +567,7 @@ func (m *Manager) toActiveDeposits(outpoints *[]wire.OutPoint) ([]*FSM,
566567
// DepositsForOutpoints returns all deposits that are behind the given
567568
// outpoints.
568569
func (m *Manager) DepositsForOutpoints(ctx context.Context,
569-
outpoints []string) ([]*Deposit, error) {
570+
outpoints []string, ignoreUnknown bool) ([]*Deposit, error) {
570571

571572
// Check for duplicates.
572573
existingOutpoints := make(map[string]struct{}, len(outpoints))
@@ -587,6 +588,9 @@ func (m *Manager) DepositsForOutpoints(ctx context.Context,
587588

588589
deposit, err := m.cfg.Store.DepositForOutpoint(ctx, op.String())
589590
if err != nil {
591+
if ignoreUnknown && errors.Is(err, ErrDepositNotFound) {
592+
continue
593+
}
590594
return nil, err
591595
}
592596

staticaddr/deposit/sql_store.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,25 @@ import (
55
"context"
66
"database/sql"
77
"encoding/hex"
8+
"errors"
89

910
"github.com/btcsuite/btcd/btcutil"
1011
"github.com/btcsuite/btcd/chaincfg/chainhash"
1112
"github.com/btcsuite/btcd/wire"
13+
"github.com/jackc/pgx/v5"
1214
"github.com/lightninglabs/loop/fsm"
1315
"github.com/lightninglabs/loop/loopdb"
1416
"github.com/lightninglabs/loop/loopdb/sqlc"
1517
"github.com/lightningnetwork/lnd/clock"
1618
"github.com/lightningnetwork/lnd/lntypes"
1719
)
1820

21+
var (
22+
// ErrDepositNotFound is returned when a deposit is not found in the
23+
// database.
24+
ErrDepositNotFound = errors.New("deposit not found")
25+
)
26+
1927
// SqlStore is the backing store for static address deposits.
2028
type SqlStore struct {
2129
baseDB *loopdb.BaseDB
@@ -168,6 +176,12 @@ func (s *SqlStore) DepositForOutpoint(ctx context.Context,
168176
}
169177
row, err := q.DepositForOutpoint(ctx, params)
170178
if err != nil {
179+
if errors.Is(err, sql.ErrNoRows) ||
180+
errors.Is(err, pgx.ErrNoRows) {
181+
182+
return ErrDepositNotFound
183+
}
184+
171185
return err
172186
}
173187

staticaddr/loopin/interface.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,10 @@ type DepositManager interface {
5050
event fsm.EventType, expectedFinalState fsm.StateType) error
5151

5252
// DepositsForOutpoints returns all deposits that behind the given
53-
// outpoints.
54-
DepositsForOutpoints(ctx context.Context, outpoints []string) (
55-
[]*deposit.Deposit, error)
53+
// outpoints. If ignoreUnknown is false, the function returns an error
54+
// if any of the outpoints is not known, no error otherwise.
55+
DepositsForOutpoints(ctx context.Context, outpoints []string,
56+
ignoreUnknown bool) ([]*deposit.Deposit, error)
5657

5758
// GetActiveDepositsInState returns all active deposits in the given
5859
// state.

staticaddr/loopin/manager.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,9 @@ func (m *Manager) handleLoopInSweepReq(ctx context.Context,
289289
return err
290290
}
291291

292+
ignoreUnknownOutpoints := false
292293
deposits, err := m.cfg.DepositManager.DepositsForOutpoints(
293-
ctx, loopIn.DepositOutpoints,
294+
ctx, loopIn.DepositOutpoints, ignoreUnknownOutpoints,
294295
)
295296
if err != nil {
296297
return err
@@ -458,8 +459,9 @@ func (m *Manager) checkChange(ctx context.Context,
458459
prevOuts[i] = in.PreviousOutPoint.String()
459460
}
460461

462+
ignoreUnknownOutpoints := true
461463
deposits, err := m.cfg.DepositManager.DepositsForOutpoints(
462-
ctx, prevOuts,
464+
ctx, prevOuts, ignoreUnknownOutpoints,
463465
)
464466
if err != nil {
465467
return err

staticaddr/loopin/manager_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ func (m *mockDepositManager) TransitionDeposits(_ context.Context,
163163
}
164164

165165
func (m *mockDepositManager) DepositsForOutpoints(_ context.Context,
166-
outpoints []string) ([]*deposit.Deposit, error) {
166+
outpoints []string, ignoreUnknown bool) ([]*deposit.Deposit, error) {
167167

168168
res := make([]*deposit.Deposit, 0, len(outpoints))
169169
for _, op := range outpoints {

0 commit comments

Comments
 (0)