diff --git a/network/backend/lnd/lnd.go b/network/backend/lnd/lnd.go index 21da274..6b554b0 100644 --- a/network/backend/lnd/lnd.go +++ b/network/backend/lnd/lnd.go @@ -204,8 +204,17 @@ func (l Backend) ListChannels(ctx context.Context, opt ...options.Channel) ([]*m channels := listChannelsProtoToChannels(resp) - fields := make([]logging.Field, len(channels)) + if opts.Pending { + req := &lnrpc.PendingChannelsRequest{} + resp, err := clt.PendingChannels(ctx, req) + if err != nil { + return nil, errors.WithStack(err) + } + channels = append(channels, pendingChannelsProtoToChannels(resp)...) + } + + fields := make([]logging.Field, len(channels)) for i := range channels { fields[i] = logging.Object(fmt.Sprintf("channel_%d", i), channels[i]) } diff --git a/network/backend/lnd/proto.go b/network/backend/lnd/proto.go index a03c737..da93e44 100644 --- a/network/backend/lnd/proto.go +++ b/network/backend/lnd/proto.go @@ -102,6 +102,23 @@ func htlcProtoToHTLC(h *lnrpc.HTLC) *models.HTLC { } } +func pendingChannelsProtoToChannels(r *lnrpc.PendingChannelsResponse) []*models.Channel { + resp := r.GetPendingOpenChannels() + channels := make([]*models.Channel, len(resp)) + for i := range resp { + channels[i] = openingProtoToChannel(resp[i]) + } + + return channels +} + +func openingProtoToChannel(c *lnrpc.PendingChannelsResponse_PendingOpenChannel) *models.Channel { + return &models.Channel{ + CommitWeight: c.GetCommitWeight(), + FeePerKiloWeight: c.GetFeePerKw(), + } +} + func payreqProtoToPayReq(h *lnrpc.PayReq, payreq string) *models.PayReq { if h == nil { return nil diff --git a/network/options/channels.go b/network/options/channels.go index b9422a0..d9bde35 100644 --- a/network/options/channels.go +++ b/network/options/channels.go @@ -7,6 +7,11 @@ type ChannelOptions struct { Inactive bool Public bool Private bool + Pending bool +} + +func WithChannelPending() Channel { + return func(c *ChannelOptions) { c.Pending = true } } func WithChannelPublic(v bool) Channel {