mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-03-04 17:55:36 +01:00
feat: add inbound fees to channel notifications
This commit is contained in:
parent
399ea864da
commit
af9858c3ed
4 changed files with 59 additions and 10 deletions
|
@ -301,6 +301,9 @@
|
||||||
maintain a healthy connection to the network by checking the number of
|
maintain a healthy connection to the network by checking the number of
|
||||||
outbound peers if they are below 6.
|
outbound peers if they are below 6.
|
||||||
|
|
||||||
|
* [Add inbound fees](https://github.com/lightningnetwork/lnd/pull/8723) to
|
||||||
|
`subscribeChannelGraph`.
|
||||||
|
|
||||||
### Logging
|
### Logging
|
||||||
* [Add the htlc amount](https://github.com/lightningnetwork/lnd/pull/8156) to
|
* [Add the htlc amount](https://github.com/lightningnetwork/lnd/pull/8156) to
|
||||||
contract court logs in case of timed-out HTLCs in order to easily spot dust
|
contract court logs in case of timed-out HTLCs in order to easily spot dust
|
||||||
|
@ -533,6 +536,7 @@
|
||||||
* BitcoinerCoderBob
|
* BitcoinerCoderBob
|
||||||
* bitromortac
|
* bitromortac
|
||||||
* bota87
|
* bota87
|
||||||
|
* Bufo
|
||||||
* Calvin Zachman
|
* Calvin Zachman
|
||||||
* Carla Kirk-Cohen
|
* Carla Kirk-Cohen
|
||||||
* cristiantroy
|
* cristiantroy
|
||||||
|
|
|
@ -301,6 +301,11 @@ type ChannelEdgeUpdate struct {
|
||||||
// Disabled, if true, signals that the channel is unavailable to relay
|
// Disabled, if true, signals that the channel is unavailable to relay
|
||||||
// payments.
|
// payments.
|
||||||
Disabled bool
|
Disabled bool
|
||||||
|
|
||||||
|
// ExtraOpaqueData is the set of data that was appended to this message
|
||||||
|
// to fill out the full maximum transport message size. These fields can
|
||||||
|
// be used to specify optional data such as custom TLV fields.
|
||||||
|
ExtraOpaqueData lnwire.ExtraOpaqueData
|
||||||
}
|
}
|
||||||
|
|
||||||
// appendTopologyChange appends the passed update message to the passed
|
// appendTopologyChange appends the passed update message to the passed
|
||||||
|
@ -379,6 +384,7 @@ func addToTopologyChange(graph *channeldb.ChannelGraph, update *TopologyChange,
|
||||||
AdvertisingNode: aNode,
|
AdvertisingNode: aNode,
|
||||||
ConnectingNode: cNode,
|
ConnectingNode: cNode,
|
||||||
Disabled: m.ChannelFlags&lnwire.ChanUpdateDisabled != 0,
|
Disabled: m.ChannelFlags&lnwire.ChanUpdateDisabled != 0,
|
||||||
|
ExtraOpaqueData: m.ExtraOpaqueData,
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(roasbeef): add bit to toggle
|
// TODO(roasbeef): add bit to toggle
|
||||||
|
|
|
@ -75,7 +75,18 @@ func createTestNode() (*channeldb.LightningNode, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func randEdgePolicy(chanID *lnwire.ShortChannelID,
|
func randEdgePolicy(chanID *lnwire.ShortChannelID,
|
||||||
node *channeldb.LightningNode) *models.ChannelEdgePolicy {
|
node *channeldb.LightningNode) (*models.ChannelEdgePolicy, error) {
|
||||||
|
|
||||||
|
InboundFee := models.InboundFee{
|
||||||
|
Base: prand.Int31() * -1,
|
||||||
|
Rate: prand.Int31() * -1,
|
||||||
|
}
|
||||||
|
inboundFee := InboundFee.ToWire()
|
||||||
|
|
||||||
|
var extraOpaqueData lnwire.ExtraOpaqueData
|
||||||
|
if err := extraOpaqueData.PackRecords(&inboundFee); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return &models.ChannelEdgePolicy{
|
return &models.ChannelEdgePolicy{
|
||||||
SigBytes: testSig.Serialize(),
|
SigBytes: testSig.Serialize(),
|
||||||
|
@ -87,7 +98,8 @@ func randEdgePolicy(chanID *lnwire.ShortChannelID,
|
||||||
FeeBaseMSat: lnwire.MilliSatoshi(prand.Int31()),
|
FeeBaseMSat: lnwire.MilliSatoshi(prand.Int31()),
|
||||||
FeeProportionalMillionths: lnwire.MilliSatoshi(prand.Int31()),
|
FeeProportionalMillionths: lnwire.MilliSatoshi(prand.Int31()),
|
||||||
ToNode: node.PubKeyBytes,
|
ToNode: node.PubKeyBytes,
|
||||||
}
|
ExtraOpaqueData: extraOpaqueData,
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func createChannelEdge(ctx *testCtx, bitcoinKey1, bitcoinKey2 []byte,
|
func createChannelEdge(ctx *testCtx, bitcoinKey1, bitcoinKey2 []byte,
|
||||||
|
@ -457,9 +469,12 @@ func TestEdgeUpdateNotification(t *testing.T) {
|
||||||
|
|
||||||
// Create random policy edges that are stemmed to the channel id
|
// Create random policy edges that are stemmed to the channel id
|
||||||
// created above.
|
// created above.
|
||||||
edge1 := randEdgePolicy(chanID, node1)
|
edge1, err := randEdgePolicy(chanID, node1)
|
||||||
|
require.NoError(t, err, "unable to create a random chan policy")
|
||||||
edge1.ChannelFlags = 0
|
edge1.ChannelFlags = 0
|
||||||
edge2 := randEdgePolicy(chanID, node2)
|
|
||||||
|
edge2, err := randEdgePolicy(chanID, node2)
|
||||||
|
require.NoError(t, err, "unable to create a random chan policy")
|
||||||
edge2.ChannelFlags = 1
|
edge2.ChannelFlags = 1
|
||||||
|
|
||||||
if err := ctx.router.UpdateEdge(edge1); err != nil {
|
if err := ctx.router.UpdateEdge(edge1); err != nil {
|
||||||
|
@ -511,6 +526,9 @@ func TestEdgeUpdateNotification(t *testing.T) {
|
||||||
"expected %v, got %v", edgeAnn.TimeLockDelta,
|
"expected %v, got %v", edgeAnn.TimeLockDelta,
|
||||||
edgeUpdate.TimeLockDelta)
|
edgeUpdate.TimeLockDelta)
|
||||||
}
|
}
|
||||||
|
require.Equal(
|
||||||
|
t, edgeAnn.ExtraOpaqueData, edgeUpdate.ExtraOpaqueData,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create lookup map for notifications we are intending to receive. Entries
|
// Create lookup map for notifications we are intending to receive. Entries
|
||||||
|
|
31
rpcserver.go
31
rpcserver.go
|
@ -6691,6 +6691,14 @@ func marshallTopologyChange(topChange *routing.TopologyChange) *lnrpc.GraphTopol
|
||||||
|
|
||||||
channelUpdates := make([]*lnrpc.ChannelEdgeUpdate, len(topChange.ChannelEdgeUpdates))
|
channelUpdates := make([]*lnrpc.ChannelEdgeUpdate, len(topChange.ChannelEdgeUpdates))
|
||||||
for i, channelUpdate := range topChange.ChannelEdgeUpdates {
|
for i, channelUpdate := range topChange.ChannelEdgeUpdates {
|
||||||
|
|
||||||
|
customRecords := marshalExtraOpaqueData(
|
||||||
|
channelUpdate.ExtraOpaqueData,
|
||||||
|
)
|
||||||
|
inboundFee := extractInboundFeeSafe(
|
||||||
|
channelUpdate.ExtraOpaqueData,
|
||||||
|
)
|
||||||
|
|
||||||
channelUpdates[i] = &lnrpc.ChannelEdgeUpdate{
|
channelUpdates[i] = &lnrpc.ChannelEdgeUpdate{
|
||||||
ChanId: channelUpdate.ChanID,
|
ChanId: channelUpdate.ChanID,
|
||||||
ChanPoint: &lnrpc.ChannelPoint{
|
ChanPoint: &lnrpc.ChannelPoint{
|
||||||
|
@ -6701,12 +6709,25 @@ func marshallTopologyChange(topChange *routing.TopologyChange) *lnrpc.GraphTopol
|
||||||
},
|
},
|
||||||
Capacity: int64(channelUpdate.Capacity),
|
Capacity: int64(channelUpdate.Capacity),
|
||||||
RoutingPolicy: &lnrpc.RoutingPolicy{
|
RoutingPolicy: &lnrpc.RoutingPolicy{
|
||||||
TimeLockDelta: uint32(channelUpdate.TimeLockDelta),
|
TimeLockDelta: uint32(
|
||||||
MinHtlc: int64(channelUpdate.MinHTLC),
|
channelUpdate.TimeLockDelta,
|
||||||
MaxHtlcMsat: uint64(channelUpdate.MaxHTLC),
|
),
|
||||||
FeeBaseMsat: int64(channelUpdate.BaseFee),
|
MinHtlc: int64(
|
||||||
FeeRateMilliMsat: int64(channelUpdate.FeeRate),
|
channelUpdate.MinHTLC,
|
||||||
|
),
|
||||||
|
MaxHtlcMsat: uint64(
|
||||||
|
channelUpdate.MaxHTLC,
|
||||||
|
),
|
||||||
|
FeeBaseMsat: int64(
|
||||||
|
channelUpdate.BaseFee,
|
||||||
|
),
|
||||||
|
FeeRateMilliMsat: int64(
|
||||||
|
channelUpdate.FeeRate,
|
||||||
|
),
|
||||||
Disabled: channelUpdate.Disabled,
|
Disabled: channelUpdate.Disabled,
|
||||||
|
InboundFeeBaseMsat: inboundFee.BaseFee,
|
||||||
|
InboundFeeRateMilliMsat: inboundFee.FeeRate,
|
||||||
|
CustomRecords: customRecords,
|
||||||
},
|
},
|
||||||
AdvertisingNode: encodeKey(channelUpdate.AdvertisingNode),
|
AdvertisingNode: encodeKey(channelUpdate.AdvertisingNode),
|
||||||
ConnectingNode: encodeKey(channelUpdate.ConnectingNode),
|
ConnectingNode: encodeKey(channelUpdate.ConnectingNode),
|
||||||
|
|
Loading…
Add table
Reference in a new issue