@@ -11,6 +11,7 @@ import (
1111 "github.com/btcsuite/btcd/wire"
1212 "github.com/lightninglabs/lndclient"
1313 "github.com/lightninglabs/loop"
14+ "github.com/lightninglabs/loop/fsm"
1415 staticaddressrpc "github.com/lightninglabs/loop/swapserverrpc"
1516 "github.com/lightningnetwork/lnd/lnrpc/walletrpc"
1617 "github.com/lightningnetwork/lnd/lnwallet"
@@ -419,3 +420,67 @@ func (m *Manager) finalizeDeposit(outpoint wire.OutPoint) {
419420 delete (m .deposits , outpoint )
420421 m .Unlock ()
421422}
423+
424+ // GetActiveOutpoints returns all active outpoints.
425+ func (m * Manager ) GetActiveOutpoints () ([]wire.OutPoint , error ) {
426+ m .Lock ()
427+ defer m .Unlock ()
428+
429+ var outpoints []wire.OutPoint
430+ for o , _ := range m .activeDeposits {
431+ outpoints = append (outpoints , o )
432+ }
433+
434+ return outpoints , nil
435+ }
436+
437+ // AllDepositsActive checks if all deposits referenced by the outpoints are
438+ // deposited and active and returns them if so.
439+ func (m * Manager ) AllDepositsActive (outpoints []wire.OutPoint ) ([]* Deposit ,
440+ bool ) {
441+
442+ m .Lock ()
443+ defer m .Unlock ()
444+
445+ var deposits []* Deposit
446+ for _ , o := range outpoints {
447+ if _ , ok := m .activeDeposits [o ]; ! ok {
448+ return nil , false
449+ }
450+
451+ deposit := m .deposits [o ]
452+ if deposit .State != Deposited {
453+ return nil , false
454+ }
455+
456+ deposits = append (deposits , m .deposits [o ])
457+ }
458+
459+ return deposits , true
460+ }
461+
462+ // TransitionDeposits allows a caller to transition a set of deposits to a new
463+ // state.
464+ func (m * Manager ) TransitionDeposits (outpoints []wire.OutPoint ,
465+ event fsm.EventType , expectedFinalState fsm.StateType ) error {
466+
467+ for _ , o := range outpoints {
468+ sm , ok := m .activeDeposits [o ]
469+ if ! ok {
470+ return fmt .Errorf ("deposit not found" )
471+ }
472+
473+ err := sm .SendEvent (event , nil )
474+ if err != nil {
475+ return err
476+ }
477+ err = sm .DefaultObserver .WaitForState (
478+ m .runCtx , time .Minute , expectedFinalState ,
479+ )
480+ if err != nil {
481+ return err
482+ }
483+ }
484+
485+ return nil
486+ }
0 commit comments