Skip to content

Commit ade098a

Browse files
committed
loopd: instantiate static address open channel manager
1 parent 1685847 commit ade098a

File tree

2 files changed

+88
-25
lines changed

2 files changed

+88
-25
lines changed

loopd/daemon.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"github.com/lightninglabs/loop/staticaddr/address"
2525
"github.com/lightninglabs/loop/staticaddr/deposit"
2626
"github.com/lightninglabs/loop/staticaddr/loopin"
27+
"github.com/lightninglabs/loop/staticaddr/openchannel"
2728
"github.com/lightninglabs/loop/staticaddr/withdraw"
2829
loop_swaprpc "github.com/lightninglabs/loop/swapserverrpc"
2930
"github.com/lightninglabs/loop/sweepbatcher"
@@ -573,6 +574,7 @@ func (d *Daemon) initialize(withMacaroonService bool) error {
573574
staticAddressManager *address.Manager
574575
depositManager *deposit.Manager
575576
withdrawalManager *withdraw.Manager
577+
openChannelManager *openchannel.Manager
576578
staticLoopInManager *loopin.Manager
577579
)
578580

@@ -619,6 +621,20 @@ func (d *Daemon) initialize(withMacaroonService bool) error {
619621
}
620622
withdrawalManager = withdraw.NewManager(withdrawalCfg, blockHeight)
621623

624+
// Static address deposit open channel manager setup.
625+
openChannelCfg := &openchannel.Config{
626+
Server: staticAddressClient,
627+
AddressManager: staticAddressManager,
628+
DepositManager: depositManager,
629+
WithdrawalManager: withdrawalManager,
630+
WalletKit: d.lnd.WalletKit,
631+
ChainParams: d.lnd.ChainParams,
632+
ChainNotifier: d.lnd.ChainNotifier,
633+
Signer: d.lnd.Signer,
634+
LightningClient: d.lnd.Client,
635+
}
636+
openChannelManager = openchannel.NewManager(openChannelCfg)
637+
622638
// Static address loop-in manager setup.
623639
staticAddressLoopInStore := loopin.NewSqlStore(
624640
loopdb.NewTypedStore[loopin.Querier](baseDb),
@@ -726,6 +742,7 @@ func (d *Daemon) initialize(withMacaroonService bool) error {
726742
depositManager: depositManager,
727743
withdrawalManager: withdrawalManager,
728744
staticLoopInManager: staticLoopInManager,
745+
openChannelManager: openChannelManager,
729746
assetClient: d.assetClient,
730747
}
731748

@@ -961,6 +978,20 @@ func (d *Daemon) initialize(withMacaroonService bool) error {
961978
cancel()
962979
}
963980
}
981+
// Start the static address open channel manager.
982+
if openChannelManager != nil {
983+
d.wg.Add(1)
984+
go func() {
985+
defer d.wg.Done()
986+
987+
infof("Starting static address open channel manager")
988+
err := openChannelManager.Run(d.mainCtx)
989+
if err != nil && !errors.Is(context.Canceled, err) {
990+
d.internalErrChan <- err
991+
}
992+
infof("Static address open channel manager stopped")
993+
}()
994+
}
964995

965996
// Start the static address loop-in manager.
966997
if staticLoopInManager != nil {

loopd/swapclient_server.go

Lines changed: 57 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ import (
3232
"github.com/lightninglabs/loop/staticaddr/address"
3333
"github.com/lightninglabs/loop/staticaddr/deposit"
3434
"github.com/lightninglabs/loop/staticaddr/loopin"
35+
"github.com/lightninglabs/loop/staticaddr/openchannel"
36+
"github.com/lightninglabs/loop/staticaddr/staticutil"
3537
"github.com/lightninglabs/loop/staticaddr/withdraw"
3638
"github.com/lightninglabs/loop/swap"
3739
"github.com/lightninglabs/loop/swapserverrpc"
@@ -97,6 +99,7 @@ type swapClientServer struct {
9799
depositManager *deposit.Manager
98100
withdrawalManager *withdraw.Manager
99101
staticLoopInManager *loopin.Manager
102+
openChannelManager *openchannel.Manager
100103
assetClient *assets.TapdClient
101104
swaps map[lntypes.Hash]loop.SwapInfo
102105
subscribers map[int]chan<- interface{}
@@ -1733,7 +1736,7 @@ func (s *swapClientServer) WithdrawDeposits(ctx context.Context,
17331736
}
17341737

17351738
case isUtxoSelected:
1736-
outpoints, err = toServerOutpoints(req.Outpoints)
1739+
outpoints, err = staticutil.ToWireOutpoints(req.Outpoints)
17371740
if err != nil {
17381741
return nil, err
17391742
}
@@ -1978,13 +1981,14 @@ func (s *swapClientServer) GetStaticAddressSummary(ctx context.Context,
19781981
}
19791982

19801983
var (
1981-
totalNumDeposits = len(allDeposits)
1982-
valueUnconfirmed int64
1983-
valueDeposited int64
1984-
valueExpired int64
1985-
valueWithdrawn int64
1986-
valueLoopedIn int64
1987-
htlcTimeoutSwept int64
1984+
totalNumDeposits = len(allDeposits)
1985+
valueUnconfirmed int64
1986+
valueDeposited int64
1987+
valueExpired int64
1988+
valueWithdrawn int64
1989+
valueLoopedIn int64
1990+
valueChannelsOpened int64
1991+
htlcTimeoutSwept int64
19881992
)
19891993

19901994
// Value unconfirmed.
@@ -2016,6 +2020,9 @@ func (s *swapClientServer) GetStaticAddressSummary(ctx context.Context,
20162020

20172021
case deposit.HtlcTimeoutSwept:
20182022
htlcTimeoutSwept += value
2023+
2024+
case deposit.ChannelPublished:
2025+
valueChannelsOpened += value
20192026
}
20202027
}
20212028

@@ -2040,6 +2047,7 @@ func (s *swapClientServer) GetStaticAddressSummary(ctx context.Context,
20402047
ValueExpiredSatoshis: valueExpired,
20412048
ValueWithdrawnSatoshis: valueWithdrawn,
20422049
ValueLoopedInSatoshis: valueLoopedIn,
2050+
ValueChannelsOpened: valueChannelsOpened,
20432051
ValueHtlcTimeoutSweepsSatoshis: htlcTimeoutSwept,
20442052
}, nil
20452053
}
@@ -2149,6 +2157,35 @@ func (s *swapClientServer) populateBlocksUntilExpiry(ctx context.Context,
21492157
return nil
21502158
}
21512159

2160+
// StaticOpenChannel initiates an open channel request using static address
2161+
// deposits.
2162+
func (s *swapClientServer) StaticOpenChannel(ctx context.Context,
2163+
req *looprpc.StaticOpenChannelRequest) (*looprpc.StaticOpenChannelResponse,
2164+
error) {
2165+
2166+
infof("Static open channel request received")
2167+
2168+
if req == nil || req.OpenChannelRequest == nil {
2169+
return &looprpc.StaticOpenChannelResponse{},
2170+
fmt.Errorf("missing open channel request")
2171+
}
2172+
2173+
chanOpenTxHash, err := s.openChannelManager.DeliverOpenChannelRequest(
2174+
ctx, req.OpenChannelRequest,
2175+
)
2176+
2177+
var (
2178+
txHash string
2179+
)
2180+
if chanOpenTxHash != nil {
2181+
txHash = chanOpenTxHash.String()
2182+
}
2183+
2184+
return &looprpc.StaticOpenChannelResponse{
2185+
ChannelOpenTxHash: txHash,
2186+
}, err
2187+
}
2188+
21522189
type filterFunc func(deposits *deposit.Deposit) bool
21532190

21542191
func filter(deposits []*deposit.Deposit, f filterFunc) []*looprpc.Deposit {
@@ -2202,6 +2239,12 @@ func toClientDepositState(state fsm.StateType) looprpc.DepositState {
22022239
case deposit.LoopedIn:
22032240
return looprpc.DepositState_LOOPED_IN
22042241

2242+
case deposit.OpeningChannel:
2243+
return looprpc.DepositState_OPENING_CHANNEL
2244+
2245+
case deposit.ChannelPublished:
2246+
return looprpc.DepositState_CHANNEL_PUBLISHED
2247+
22052248
case deposit.SweepHtlcTimeout:
22062249
return looprpc.DepositState_SWEEP_HTLC_TIMEOUT
22072250

@@ -2281,6 +2324,12 @@ func toServerState(state looprpc.DepositState) fsm.StateType {
22812324
case looprpc.DepositState_LOOPED_IN:
22822325
return deposit.LoopedIn
22832326

2327+
case looprpc.DepositState_OPENING_CHANNEL:
2328+
return deposit.OpeningChannel
2329+
2330+
case looprpc.DepositState_CHANNEL_PUBLISHED:
2331+
return deposit.ChannelPublished
2332+
22842333
case looprpc.DepositState_SWEEP_HTLC_TIMEOUT:
22852334
return deposit.SweepHtlcTimeout
22862335

@@ -2298,23 +2347,6 @@ func toServerState(state looprpc.DepositState) fsm.StateType {
22982347
}
22992348
}
23002349

2301-
func toServerOutpoints(outpoints []*looprpc.OutPoint) ([]wire.OutPoint,
2302-
error) {
2303-
2304-
var serverOutpoints []wire.OutPoint
2305-
for _, o := range outpoints {
2306-
outpointStr := fmt.Sprintf("%s:%d", o.TxidStr, o.OutputIndex)
2307-
newOutpoint, err := wire.NewOutPointFromString(outpointStr)
2308-
if err != nil {
2309-
return nil, err
2310-
}
2311-
2312-
serverOutpoints = append(serverOutpoints, *newOutpoint)
2313-
}
2314-
2315-
return serverOutpoints, nil
2316-
}
2317-
23182350
func rpcAutoloopReason(reason liquidity.Reason) (looprpc.AutoReason, error) {
23192351
switch reason {
23202352
case liquidity.ReasonNone:

0 commit comments

Comments
 (0)