diff --git a/network/backend/lnd/lnd.go b/network/backend/lnd/lnd.go index 4253528..21da274 100644 --- a/network/backend/lnd/lnd.go +++ b/network/backend/lnd/lnd.go @@ -235,6 +235,8 @@ func (l Backend) GetChannelInfo(ctx context.Context, channel *models.Channel) er t := time.Unix(int64(uint64(resp.LastUpdate)), 0) channel.LastUpdate = &t + channel.Policy1 = protoToRoutingPolicy(resp.Node1Policy) + channel.Policy2 = protoToRoutingPolicy(resp.Node2Policy) return nil } diff --git a/network/backend/lnd/proto.go b/network/backend/lnd/proto.go index 0f3c529..a03c737 100644 --- a/network/backend/lnd/proto.go +++ b/network/backend/lnd/proto.go @@ -185,3 +185,16 @@ func nodeProtoToNode(resp *lnrpc.NodeInfo) *models.Node { Addresses: addresses, } } + +func protoToRoutingPolicy(resp *lnrpc.RoutingPolicy) *models.RoutingPolicy { + if resp == nil { + return nil + } + return &models.RoutingPolicy{ + TimeLockDelta: resp.TimeLockDelta, + MinHtlc: resp.MinHtlc, + FeeBaseMsat: resp.FeeBaseMsat, + FeeRateMilliMsat: resp.FeeRateMilliMsat, + Disabled: resp.Disabled, + } +} diff --git a/network/models/channel.go b/network/models/channel.go index 22da178..567af6b 100644 --- a/network/models/channel.go +++ b/network/models/channel.go @@ -38,6 +38,8 @@ type Channel struct { PendingHTLC []*HTLC LastUpdate *time.Time Node *Node + Policy1 *RoutingPolicy + Policy2 *RoutingPolicy } func (m Channel) MarshalLogObject(enc logging.ObjectEncoder) error { @@ -61,3 +63,11 @@ func (m Channel) MarshalLogObject(enc logging.ObjectEncoder) error { type ChannelUpdate struct { } + +type RoutingPolicy struct { + TimeLockDelta uint32 + MinHtlc int64 + FeeBaseMsat int64 + FeeRateMilliMsat int64 + Disabled bool +} diff --git a/ui/models/channels.go b/ui/models/channels.go index 435712c..977deb4 100644 --- a/ui/models/channels.go +++ b/ui/models/channels.go @@ -59,6 +59,14 @@ func (c *Channels) Update(newChannel *models.Channel) { if newChannel.LastUpdate != nil { oldChannel.LastUpdate = newChannel.LastUpdate } + + if newChannel.Policy1 != nil { + oldChannel.Policy1 = newChannel.Policy1 + } + + if newChannel.Policy2 != nil { + oldChannel.Policy2 = newChannel.Policy2 + } } func NewChannels() *Channels { diff --git a/ui/views/channels.go b/ui/views/channels.go index 4f74ebe..2fa0a38 100644 --- a/ui/views/channels.go +++ b/ui/views/channels.go @@ -247,6 +247,38 @@ func (c *Channel) display(v *gocui.View) { fmt.Fprintln(v, p.Sprintf("%s %d", color.Cyan(" Total Channels:"), channel.Node.NumChannels)) } + + if channel.Policy1 != nil { + fmt.Fprintln(v, "") + fmt.Fprintln(v, color.Green(" [ Forward Policy Node1 ]")) + if channel.Policy1.Disabled { + fmt.Fprintln(v, color.Red("disabled")) + } + fmt.Fprintln(v, p.Sprintf("%s %d", + color.Cyan(" Time lock delta:"), channel.Policy1.TimeLockDelta)) + fmt.Fprintln(v, p.Sprintf("%s %d", + color.Cyan(" Min htlc:"), channel.Policy1.MinHtlc)) + fmt.Fprintln(v, p.Sprintf("%s %d", + color.Cyan(" Fee base msat:"), channel.Policy1.FeeBaseMsat)) + fmt.Fprintln(v, p.Sprintf("%s %d", + color.Cyan("Fee rate milli msat:"), channel.Policy1.FeeRateMilliMsat)) + } + + if channel.Policy2 != nil { + fmt.Fprintln(v, "") + fmt.Fprintln(v, color.Green(" [ Forward Policy Node 2 ]")) + if channel.Policy2.Disabled { + fmt.Fprintln(v, color.Red("disabled")) + } + fmt.Fprintln(v, p.Sprintf("%s %d", + color.Cyan(" Time lock delta:"), channel.Policy2.TimeLockDelta)) + fmt.Fprintln(v, p.Sprintf("%s %d", + color.Cyan(" Min htlc:"), channel.Policy2.MinHtlc)) + fmt.Fprintln(v, p.Sprintf("%s %d", + color.Cyan(" Fee base msat:"), channel.Policy2.FeeBaseMsat)) + fmt.Fprintln(v, p.Sprintf("%s %d", + color.Cyan("Fee rate milli msat:"), channel.Policy2.FeeRateMilliMsat)) + } } func NewChannel(channel *models.Channel) *Channel {