loopd: instantiate static address open channel manager

This commit is contained in:
Slyghtning 2025-05-21 14:08:54 +02:00
parent 63097ee220
commit b74dab8af4
No known key found for this signature in database
GPG key ID: F82D456EA023C9BF
3 changed files with 102 additions and 22 deletions

View file

@ -24,6 +24,7 @@ import (
"github.com/lightninglabs/loop/staticaddr/address"
"github.com/lightninglabs/loop/staticaddr/deposit"
"github.com/lightninglabs/loop/staticaddr/loopin"
"github.com/lightninglabs/loop/staticaddr/openchannel"
"github.com/lightninglabs/loop/staticaddr/withdraw"
loop_swaprpc "github.com/lightninglabs/loop/swapserverrpc"
"github.com/lightninglabs/loop/sweepbatcher"
@ -584,6 +585,7 @@ func (d *Daemon) initialize(withMacaroonService bool) error {
staticAddressManager *address.Manager
depositManager *deposit.Manager
withdrawalManager *withdraw.Manager
openChannelManager *openchannel.Manager
staticLoopInManager *loopin.Manager
)
@ -642,6 +644,20 @@ func (d *Daemon) initialize(withMacaroonService bool) error {
err)
}
// Static address deposit open channel manager setup.
openChannelCfg := &openchannel.Config{
Server: staticAddressClient,
AddressManager: staticAddressManager,
DepositManager: depositManager,
WithdrawalManager: withdrawalManager,
WalletKit: d.lnd.WalletKit,
ChainParams: d.lnd.ChainParams,
ChainNotifier: d.lnd.ChainNotifier,
Signer: d.lnd.Signer,
LightningClient: d.lnd.Client,
}
openChannelManager = openchannel.NewManager(openChannelCfg)
// Static address loop-in manager setup.
staticAddressLoopInStore := loopin.NewSqlStore(
loopdb.NewTypedStore[loopin.Querier](baseDb),
@ -752,6 +768,7 @@ func (d *Daemon) initialize(withMacaroonService bool) error {
depositManager: depositManager,
withdrawalManager: withdrawalManager,
staticLoopInManager: staticLoopInManager,
openChannelManager: openChannelManager,
assetClient: d.assetClient,
stopDaemon: d.Stop,
}
@ -988,6 +1005,20 @@ func (d *Daemon) initialize(withMacaroonService bool) error {
cancel()
}
}
// Start the static address open channel manager.
if openChannelManager != nil {
d.wg.Add(1)
go func() {
defer d.wg.Done()
infof("Starting static address open channel manager")
err := openChannelManager.Run(d.mainCtx)
if err != nil && !errors.Is(context.Canceled, err) {
d.internalErrChan <- err
}
infof("Static address open channel manager stopped")
}()
}
// Start the static address loop-in manager.
if staticLoopInManager != nil {

View file

@ -32,6 +32,7 @@ import (
"github.com/lightninglabs/loop/staticaddr/address"
"github.com/lightninglabs/loop/staticaddr/deposit"
"github.com/lightninglabs/loop/staticaddr/loopin"
"github.com/lightninglabs/loop/staticaddr/openchannel"
"github.com/lightninglabs/loop/staticaddr/staticutil"
"github.com/lightninglabs/loop/staticaddr/withdraw"
"github.com/lightninglabs/loop/swap"
@ -98,6 +99,7 @@ type swapClientServer struct {
depositManager *deposit.Manager
withdrawalManager *withdraw.Manager
staticLoopInManager *loopin.Manager
openChannelManager *openchannel.Manager
assetClient *assets.TapdClient
swaps map[lntypes.Hash]loop.SwapInfo
subscribers map[int]chan<- interface{}
@ -2009,13 +2011,14 @@ func (s *swapClientServer) GetStaticAddressSummary(ctx context.Context,
}
var (
totalNumDeposits = len(allDeposits)
valueUnconfirmed int64
valueDeposited int64
valueExpired int64
valueWithdrawn int64
valueLoopedIn int64
htlcTimeoutSwept int64
totalNumDeposits = len(allDeposits)
valueUnconfirmed int64
valueDeposited int64
valueExpired int64
valueWithdrawn int64
valueLoopedIn int64
valueChannelsOpened int64
htlcTimeoutSwept int64
)
// Value unconfirmed.
@ -2047,6 +2050,9 @@ func (s *swapClientServer) GetStaticAddressSummary(ctx context.Context,
case deposit.HtlcTimeoutSwept:
htlcTimeoutSwept += value
case deposit.ChannelPublished:
valueChannelsOpened += value
}
}
@ -2071,6 +2077,7 @@ func (s *swapClientServer) GetStaticAddressSummary(ctx context.Context,
ValueExpiredSatoshis: valueExpired,
ValueWithdrawnSatoshis: valueWithdrawn,
ValueLoopedInSatoshis: valueLoopedIn,
ValueChannelsOpened: valueChannelsOpened,
ValueHtlcTimeoutSweepsSatoshis: htlcTimeoutSwept,
}, nil
}
@ -2180,6 +2187,33 @@ func (s *swapClientServer) populateBlocksUntilExpiry(ctx context.Context,
return nil
}
// StaticOpenChannel initiates an open channel request using static address
// deposits.
func (s *swapClientServer) StaticOpenChannel(ctx context.Context,
req *looprpc.StaticOpenChannelRequest) (*looprpc.StaticOpenChannelResponse,
error) {
infof("Static open channel request received")
if req == nil || req.OpenChannelRequest == nil {
return &looprpc.StaticOpenChannelResponse{},
fmt.Errorf("missing open channel request")
}
chanOutpoint, err := s.openChannelManager.DeliverOpenChannelRequest(
ctx, req.OpenChannelRequest,
)
var outpointStr string
if chanOutpoint != nil {
outpointStr = chanOutpoint.String()
}
return &looprpc.StaticOpenChannelResponse{
ChannelOpenOutpoint: outpointStr,
}, err
}
type filterFunc func(deposits *deposit.Deposit) bool
func filter(deposits []*deposit.Deposit, f filterFunc) []*looprpc.Deposit {
@ -2233,6 +2267,12 @@ func toClientDepositState(state fsm.StateType) looprpc.DepositState {
case deposit.LoopedIn:
return looprpc.DepositState_LOOPED_IN
case deposit.OpeningChannel:
return looprpc.DepositState_OPENING_CHANNEL
case deposit.ChannelPublished:
return looprpc.DepositState_CHANNEL_PUBLISHED
case deposit.SweepHtlcTimeout:
return looprpc.DepositState_SWEEP_HTLC_TIMEOUT
@ -2312,6 +2352,12 @@ func toServerState(state looprpc.DepositState) fsm.StateType {
case looprpc.DepositState_LOOPED_IN:
return deposit.LoopedIn
case looprpc.DepositState_OPENING_CHANNEL:
return deposit.OpeningChannel
case looprpc.DepositState_CHANNEL_PUBLISHED:
return deposit.ChannelPublished
case looprpc.DepositState_SWEEP_HTLC_TIMEOUT:
return deposit.SweepHtlcTimeout