multi: use minimal policy in cache
This commit is contained in:
19 files changed
+629
-227
No files matched your search
+1
-1
@@ -39,7 +39,7 @@ type nodeWithDist struct {
|
||||
weight int64
|
||||
|
||||
// nextHop is the edge this route comes from.
|
||||
nextHop *channeldb.ChannelEdgePolicy
|
||||
nextHop *channeldb.CachedEdgePolicy
|
||||
|
||||
// routingInfoSize is the total size requirement for the payloads field
|
||||
// in the onion packet from this hop towards the final destination.
|
||||
|
||||
@@ -186,20 +186,13 @@ func (m *mockGraph) forEachNodeChannel(nodePub route.Vertex,
|
||||
IsNode1: nodePub == node1,
|
||||
OtherNode: peer,
|
||||
Capacity: channel.capacity,
|
||||
OutPolicy: &channeldb.ChannelEdgePolicy{
|
||||
OutPolicySet: true,
|
||||
InPolicy: &channeldb.CachedEdgePolicy{
|
||||
ChannelID: channel.id,
|
||||
Node: &channeldb.LightningNode{
|
||||
PubKeyBytes: peer,
|
||||
Features: lnwire.EmptyFeatureVector(),
|
||||
},
|
||||
FeeBaseMSat: node.baseFee,
|
||||
},
|
||||
InPolicy: &channeldb.ChannelEdgePolicy{
|
||||
ChannelID: channel.id,
|
||||
Node: &channeldb.LightningNode{
|
||||
PubKeyBytes: nodePub,
|
||||
Features: lnwire.EmptyFeatureVector(),
|
||||
ToNodePubKey: func() route.Vertex {
|
||||
return nodePub
|
||||
},
|
||||
ToNodeFeatures: lnwire.EmptyFeatureVector(),
|
||||
FeeBaseMSat: peerNode.baseFee,
|
||||
},
|
||||
},
|
||||
|
||||
@@ -173,13 +173,13 @@ func (m *mockPaymentSessionOld) RequestRoute(_, _ lnwire.MilliSatoshi,
|
||||
}
|
||||
|
||||
func (m *mockPaymentSessionOld) UpdateAdditionalEdge(_ *lnwire.ChannelUpdate,
|
||||
_ *btcec.PublicKey, _ *channeldb.ChannelEdgePolicy) bool {
|
||||
_ *btcec.PublicKey, _ *channeldb.CachedEdgePolicy) bool {
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (m *mockPaymentSessionOld) GetAdditionalEdgePolicy(_ *btcec.PublicKey,
|
||||
_ uint64) *channeldb.ChannelEdgePolicy {
|
||||
_ uint64) *channeldb.CachedEdgePolicy {
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -637,17 +637,17 @@ func (m *mockPaymentSession) RequestRoute(maxAmt, feeLimit lnwire.MilliSatoshi,
|
||||
}
|
||||
|
||||
func (m *mockPaymentSession) UpdateAdditionalEdge(msg *lnwire.ChannelUpdate,
|
||||
pubKey *btcec.PublicKey, policy *channeldb.ChannelEdgePolicy) bool {
|
||||
pubKey *btcec.PublicKey, policy *channeldb.CachedEdgePolicy) bool {
|
||||
|
||||
args := m.Called(msg, pubKey, policy)
|
||||
return args.Bool(0)
|
||||
}
|
||||
|
||||
func (m *mockPaymentSession) GetAdditionalEdgePolicy(pubKey *btcec.PublicKey,
|
||||
channelID uint64) *channeldb.ChannelEdgePolicy {
|
||||
channelID uint64) *channeldb.CachedEdgePolicy {
|
||||
|
||||
args := m.Called(pubKey, channelID)
|
||||
return args.Get(0).(*channeldb.ChannelEdgePolicy)
|
||||
return args.Get(0).(*channeldb.CachedEdgePolicy)
|
||||
}
|
||||
|
||||
type mockControlTower struct {
|
||||
|
||||
+14
-14
@@ -42,7 +42,7 @@ const (
|
||||
type pathFinder = func(g *graphParams, r *RestrictParams,
|
||||
cfg *PathFindingConfig, source, target route.Vertex,
|
||||
amt lnwire.MilliSatoshi, finalHtlcExpiry int32) (
|
||||
[]*channeldb.ChannelEdgePolicy, error)
|
||||
[]*channeldb.CachedEdgePolicy, error)
|
||||
|
||||
var (
|
||||
// DefaultAttemptCost is the default fixed virtual cost in path finding
|
||||
@@ -76,7 +76,7 @@ var (
|
||||
// of the edge.
|
||||
type edgePolicyWithSource struct {
|
||||
sourceNode route.Vertex
|
||||
edge *channeldb.ChannelEdgePolicy
|
||||
edge *channeldb.CachedEdgePolicy
|
||||
}
|
||||
|
||||
// finalHopParams encapsulates various parameters for route construction that
|
||||
@@ -102,7 +102,7 @@ type finalHopParams struct {
|
||||
// any feature vectors on all hops have been validated for transitive
|
||||
// dependencies.
|
||||
func newRoute(sourceVertex route.Vertex,
|
||||
pathEdges []*channeldb.ChannelEdgePolicy, currentHeight uint32,
|
||||
pathEdges []*channeldb.CachedEdgePolicy, currentHeight uint32,
|
||||
finalHop finalHopParams) (*route.Route, error) {
|
||||
|
||||
var (
|
||||
@@ -147,10 +147,10 @@ func newRoute(sourceVertex route.Vertex,
|
||||
supports := func(feature lnwire.FeatureBit) bool {
|
||||
// If this edge comes from router hints, the features
|
||||
// could be nil.
|
||||
if edge.Node.Features == nil {
|
||||
if edge.ToNodeFeatures == nil {
|
||||
return false
|
||||
}
|
||||
return edge.Node.Features.HasFeature(feature)
|
||||
return edge.ToNodeFeatures.HasFeature(feature)
|
||||
}
|
||||
|
||||
// We start by assuming the node doesn't support TLV. We'll now
|
||||
@@ -225,7 +225,7 @@ func newRoute(sourceVertex route.Vertex,
|
||||
// each new hop such that, the final slice of hops will be in
|
||||
// the forwards order.
|
||||
currentHop := &route.Hop{
|
||||
PubKeyBytes: edge.Node.PubKeyBytes,
|
||||
PubKeyBytes: edge.ToNodePubKey(),
|
||||
ChannelID: edge.ChannelID,
|
||||
AmtToForward: amtToForward,
|
||||
OutgoingTimeLock: outgoingTimeLock,
|
||||
@@ -280,7 +280,7 @@ type graphParams struct {
|
||||
// additionalEdges is an optional set of edges that should be
|
||||
// considered during path finding, that is not already found in the
|
||||
// channel graph.
|
||||
additionalEdges map[route.Vertex][]*channeldb.ChannelEdgePolicy
|
||||
additionalEdges map[route.Vertex][]*channeldb.CachedEdgePolicy
|
||||
|
||||
// bandwidthHints is an optional map from channels to bandwidths that
|
||||
// can be populated if the caller has a better estimate of the current
|
||||
@@ -360,7 +360,7 @@ func getOutgoingBalance(node route.Vertex, outgoingChans map[uint64]struct{},
|
||||
|
||||
var max, total lnwire.MilliSatoshi
|
||||
cb := func(channel *channeldb.DirectedChannel) error {
|
||||
if channel.OutPolicy == nil {
|
||||
if !channel.OutPolicySet {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -412,7 +412,7 @@ func getOutgoingBalance(node route.Vertex, outgoingChans map[uint64]struct{},
|
||||
// available bandwidth.
|
||||
func findPath(g *graphParams, r *RestrictParams, cfg *PathFindingConfig,
|
||||
source, target route.Vertex, amt lnwire.MilliSatoshi,
|
||||
finalHtlcExpiry int32) ([]*channeldb.ChannelEdgePolicy, error) {
|
||||
finalHtlcExpiry int32) ([]*channeldb.CachedEdgePolicy, error) {
|
||||
|
||||
// Pathfinding can be a significant portion of the total payment
|
||||
// latency, especially on low-powered devices. Log several metrics to
|
||||
@@ -519,7 +519,7 @@ func findPath(g *graphParams, r *RestrictParams, cfg *PathFindingConfig,
|
||||
// Build reverse lookup to find incoming edges. Needed because
|
||||
// search is taken place from target to source.
|
||||
for _, outgoingEdgePolicy := range outgoingEdgePolicies {
|
||||
toVertex := outgoingEdgePolicy.Node.PubKeyBytes
|
||||
toVertex := outgoingEdgePolicy.ToNodePubKey()
|
||||
incomingEdgePolicy := &edgePolicyWithSource{
|
||||
sourceNode: vertex,
|
||||
edge: outgoingEdgePolicy,
|
||||
@@ -583,7 +583,7 @@ func findPath(g *graphParams, r *RestrictParams, cfg *PathFindingConfig,
|
||||
// satisfy our specific requirements.
|
||||
processEdge := func(fromVertex route.Vertex,
|
||||
fromFeatures *lnwire.FeatureVector,
|
||||
edge *channeldb.ChannelEdgePolicy, toNodeDist *nodeWithDist) {
|
||||
edge *channeldb.CachedEdgePolicy, toNodeDist *nodeWithDist) {
|
||||
|
||||
edgesExpanded++
|
||||
|
||||
@@ -879,7 +879,7 @@ func findPath(g *graphParams, r *RestrictParams, cfg *PathFindingConfig,
|
||||
|
||||
// Use the distance map to unravel the forward path from source to
|
||||
// target.
|
||||
var pathEdges []*channeldb.ChannelEdgePolicy
|
||||
var pathEdges []*channeldb.CachedEdgePolicy
|
||||
currentNode := source
|
||||
for {
|
||||
// Determine the next hop forward using the next map.
|
||||
@@ -894,7 +894,7 @@ func findPath(g *graphParams, r *RestrictParams, cfg *PathFindingConfig,
|
||||
pathEdges = append(pathEdges, currentNodeWithDist.nextHop)
|
||||
|
||||
// Advance current node.
|
||||
currentNode = currentNodeWithDist.nextHop.Node.PubKeyBytes
|
||||
currentNode = currentNodeWithDist.nextHop.ToNodePubKey()
|
||||
|
||||
// Check stop condition at the end of this loop. This prevents
|
||||
// breaking out too soon for self-payments that have target set
|
||||
@@ -915,7 +915,7 @@ func findPath(g *graphParams, r *RestrictParams, cfg *PathFindingConfig,
|
||||
// route construction does not care where the features are actually
|
||||
// taken from. In the future we may wish to do route construction within
|
||||
// findPath, and avoid using ChannelEdgePolicy altogether.
|
||||
pathEdges[len(pathEdges)-1].Node.Features = features
|
||||
pathEdges[len(pathEdges)-1].ToNodeFeatures = features
|
||||
|
||||
log.Debugf("Found route: probability=%v, hops=%v, fee=%v",
|
||||
distance[source].probability, len(pathEdges),
|
||||
|
||||
+31
-27
@@ -1099,20 +1099,23 @@ func TestPathFindingWithAdditionalEdges(t *testing.T) {
|
||||
|
||||
// Create the channel edge going from songoku to doge and include it in
|
||||
// our map of additional edges.
|
||||
songokuToDoge := &channeldb.ChannelEdgePolicy{
|
||||
Node: doge,
|
||||
songokuToDoge := &channeldb.CachedEdgePolicy{
|
||||
ToNodePubKey: func() route.Vertex {
|
||||
return doge.PubKeyBytes
|
||||
},
|
||||
ToNodeFeatures: lnwire.EmptyFeatureVector(),
|
||||
ChannelID: 1337,
|
||||
FeeBaseMSat: 1,
|
||||
FeeProportionalMillionths: 1000,
|
||||
TimeLockDelta: 9,
|
||||
}
|
||||
|
||||
additionalEdges := map[route.Vertex][]*channeldb.ChannelEdgePolicy{
|
||||
additionalEdges := map[route.Vertex][]*channeldb.CachedEdgePolicy{
|
||||
graph.aliasMap["songoku"]: {songokuToDoge},
|
||||
}
|
||||
|
||||
find := func(r *RestrictParams) (
|
||||
[]*channeldb.ChannelEdgePolicy, error) {
|
||||
[]*channeldb.CachedEdgePolicy, error) {
|
||||
|
||||
return dbFindPath(
|
||||
graph.graph, additionalEdges, nil,
|
||||
@@ -1179,14 +1182,13 @@ func TestNewRoute(t *testing.T) {
|
||||
createHop := func(baseFee lnwire.MilliSatoshi,
|
||||
feeRate lnwire.MilliSatoshi,
|
||||
bandwidth lnwire.MilliSatoshi,
|
||||
timeLockDelta uint16) *channeldb.ChannelEdgePolicy {
|
||||
timeLockDelta uint16) *channeldb.CachedEdgePolicy {
|
||||
|
||||
return &channeldb.ChannelEdgePolicy{
|
||||
Node: &channeldb.LightningNode{
|
||||
Features: lnwire.NewFeatureVector(
|
||||
nil, nil,
|
||||
),
|
||||
return &channeldb.CachedEdgePolicy{
|
||||
ToNodePubKey: func() route.Vertex {
|
||||
return route.Vertex{}
|
||||
},
|
||||
ToNodeFeatures: lnwire.NewFeatureVector(nil, nil),
|
||||
FeeProportionalMillionths: feeRate,
|
||||
FeeBaseMSat: baseFee,
|
||||
TimeLockDelta: timeLockDelta,
|
||||
@@ -1199,7 +1201,7 @@ func TestNewRoute(t *testing.T) {
|
||||
|
||||
// hops is the list of hops (the route) that gets passed into
|
||||
// the call to newRoute.
|
||||
hops []*channeldb.ChannelEdgePolicy
|
||||
hops []*channeldb.CachedEdgePolicy
|
||||
|
||||
// paymentAmount is the amount that is send into the route
|
||||
// indicated by hops.
|
||||
@@ -1248,7 +1250,7 @@ func TestNewRoute(t *testing.T) {
|
||||
// For a single hop payment, no fees are expected to be paid.
|
||||
name: "single hop",
|
||||
paymentAmount: 100000,
|
||||
hops: []*channeldb.ChannelEdgePolicy{
|
||||
hops: []*channeldb.CachedEdgePolicy{
|
||||
createHop(100, 1000, 1000000, 10),
|
||||
},
|
||||
expectedFees: []lnwire.MilliSatoshi{0},
|
||||
@@ -1261,7 +1263,7 @@ func TestNewRoute(t *testing.T) {
|
||||
// a fee to receive the payment.
|
||||
name: "two hop",
|
||||
paymentAmount: 100000,
|
||||
hops: []*channeldb.ChannelEdgePolicy{
|
||||
hops: []*channeldb.CachedEdgePolicy{
|
||||
createHop(0, 1000, 1000000, 10),
|
||||
createHop(30, 1000, 1000000, 5),
|
||||
},
|
||||
@@ -1276,7 +1278,7 @@ func TestNewRoute(t *testing.T) {
|
||||
name: "two hop tlv onion feature",
|
||||
destFeatures: tlvFeatures,
|
||||
paymentAmount: 100000,
|
||||
hops: []*channeldb.ChannelEdgePolicy{
|
||||
hops: []*channeldb.CachedEdgePolicy{
|
||||
createHop(0, 1000, 1000000, 10),
|
||||
createHop(30, 1000, 1000000, 5),
|
||||
},
|
||||
@@ -1293,7 +1295,7 @@ func TestNewRoute(t *testing.T) {
|
||||
destFeatures: tlvPayAddrFeatures,
|
||||
paymentAddr: &testPaymentAddr,
|
||||
paymentAmount: 100000,
|
||||
hops: []*channeldb.ChannelEdgePolicy{
|
||||
hops: []*channeldb.CachedEdgePolicy{
|
||||
createHop(0, 1000, 1000000, 10),
|
||||
createHop(30, 1000, 1000000, 5),
|
||||
},
|
||||
@@ -1313,7 +1315,7 @@ func TestNewRoute(t *testing.T) {
|
||||
// gets rounded down to 1.
|
||||
name: "three hop",
|
||||
paymentAmount: 100000,
|
||||
hops: []*channeldb.ChannelEdgePolicy{
|
||||
hops: []*channeldb.CachedEdgePolicy{
|
||||
createHop(0, 10, 1000000, 10),
|
||||
createHop(0, 10, 1000000, 5),
|
||||
createHop(0, 10, 1000000, 3),
|
||||
@@ -1328,7 +1330,7 @@ func TestNewRoute(t *testing.T) {
|
||||
// because of the increase amount to forward.
|
||||
name: "three hop with fee carry over",
|
||||
paymentAmount: 100000,
|
||||
hops: []*channeldb.ChannelEdgePolicy{
|
||||
hops: []*channeldb.CachedEdgePolicy{
|
||||
createHop(0, 10000, 1000000, 10),
|
||||
createHop(0, 10000, 1000000, 5),
|
||||
createHop(0, 10000, 1000000, 3),
|
||||
@@ -1343,7 +1345,7 @@ func TestNewRoute(t *testing.T) {
|
||||
// effect.
|
||||
name: "three hop with minimal fees for carry over",
|
||||
paymentAmount: 100000,
|
||||
hops: []*channeldb.ChannelEdgePolicy{
|
||||
hops: []*channeldb.CachedEdgePolicy{
|
||||
createHop(0, 10000, 1000000, 10),
|
||||
|
||||
// First hop charges 0.1% so the second hop fee
|
||||
@@ -1367,7 +1369,7 @@ func TestNewRoute(t *testing.T) {
|
||||
// custom feature vector.
|
||||
if testCase.destFeatures != nil {
|
||||
finalHop := testCase.hops[len(testCase.hops)-1]
|
||||
finalHop.Node.Features = testCase.destFeatures
|
||||
finalHop.ToNodeFeatures = testCase.destFeatures
|
||||
}
|
||||
|
||||
assertRoute := func(t *testing.T, route *route.Route) {
|
||||
@@ -1594,7 +1596,7 @@ func TestDestTLVGraphFallback(t *testing.T) {
|
||||
}
|
||||
|
||||
find := func(r *RestrictParams,
|
||||
target route.Vertex) ([]*channeldb.ChannelEdgePolicy, error) {
|
||||
target route.Vertex) ([]*channeldb.CachedEdgePolicy, error) {
|
||||
|
||||
return dbFindPath(
|
||||
ctx.graph, nil, nil,
|
||||
@@ -2325,16 +2327,16 @@ func TestPathFindSpecExample(t *testing.T) {
|
||||
}
|
||||
|
||||
func assertExpectedPath(t *testing.T, aliasMap map[string]route.Vertex,
|
||||
path []*channeldb.ChannelEdgePolicy, nodeAliases ...string) {
|
||||
path []*channeldb.CachedEdgePolicy, nodeAliases ...string) {
|
||||
|
||||
if len(path) != len(nodeAliases) {
|
||||
t.Fatal("number of hops and number of aliases do not match")
|
||||
}
|
||||
|
||||
for i, hop := range path {
|
||||
if hop.Node.PubKeyBytes != aliasMap[nodeAliases[i]] {
|
||||
if hop.ToNodePubKey() != aliasMap[nodeAliases[i]] {
|
||||
t.Fatalf("expected %v to be pos #%v in hop, instead "+
|
||||
"%v was", nodeAliases[i], i, hop.Node.Alias)
|
||||
"%v was", nodeAliases[i], i, hop.ToNodePubKey())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2985,7 +2987,7 @@ func (c *pathFindingTestContext) cleanup() {
|
||||
}
|
||||
|
||||
func (c *pathFindingTestContext) findPath(target route.Vertex,
|
||||
amt lnwire.MilliSatoshi) ([]*channeldb.ChannelEdgePolicy,
|
||||
amt lnwire.MilliSatoshi) ([]*channeldb.CachedEdgePolicy,
|
||||
error) {
|
||||
|
||||
return dbFindPath(
|
||||
@@ -2994,7 +2996,9 @@ func (c *pathFindingTestContext) findPath(target route.Vertex,
|
||||
)
|
||||
}
|
||||
|
||||
func (c *pathFindingTestContext) assertPath(path []*channeldb.ChannelEdgePolicy, expected []uint64) {
|
||||
func (c *pathFindingTestContext) assertPath(path []*channeldb.CachedEdgePolicy,
|
||||
expected []uint64) {
|
||||
|
||||
if len(path) != len(expected) {
|
||||
c.t.Fatalf("expected path of length %v, but got %v",
|
||||
len(expected), len(path))
|
||||
@@ -3011,11 +3015,11 @@ func (c *pathFindingTestContext) assertPath(path []*channeldb.ChannelEdgePolicy,
|
||||
// dbFindPath calls findPath after getting a db transaction from the database
|
||||
// graph.
|
||||
func dbFindPath(graph *channeldb.ChannelGraph,
|
||||
additionalEdges map[route.Vertex][]*channeldb.ChannelEdgePolicy,
|
||||
additionalEdges map[route.Vertex][]*channeldb.CachedEdgePolicy,
|
||||
bandwidthHints map[uint64]lnwire.MilliSatoshi,
|
||||
r *RestrictParams, cfg *PathFindingConfig,
|
||||
source, target route.Vertex, amt lnwire.MilliSatoshi,
|
||||
finalHtlcExpiry int32) ([]*channeldb.ChannelEdgePolicy, error) {
|
||||
finalHtlcExpiry int32) ([]*channeldb.CachedEdgePolicy, error) {
|
||||
|
||||
routingTx, err := newDbRoutingTx(graph)
|
||||
if err != nil {
|
||||
|
||||
@@ -898,7 +898,7 @@ func (p *shardHandler) handleFailureMessage(rt *route.Route,
|
||||
|
||||
var (
|
||||
isAdditionalEdge bool
|
||||
policy *channeldb.ChannelEdgePolicy
|
||||
policy *channeldb.CachedEdgePolicy
|
||||
)
|
||||
|
||||
// Before we apply the channel update, we need to decide whether the
|
||||
|
||||
@@ -144,13 +144,13 @@ type PaymentSession interface {
|
||||
// a boolean to indicate whether the update has been applied without
|
||||
// error.
|
||||
UpdateAdditionalEdge(msg *lnwire.ChannelUpdate, pubKey *btcec.PublicKey,
|
||||
policy *channeldb.ChannelEdgePolicy) bool
|
||||
policy *channeldb.CachedEdgePolicy) bool
|
||||
|
||||
// GetAdditionalEdgePolicy uses the public key and channel ID to query
|
||||
// the ephemeral channel edge policy for additional edges. Returns a nil
|
||||
// if nothing found.
|
||||
GetAdditionalEdgePolicy(pubKey *btcec.PublicKey,
|
||||
channelID uint64) *channeldb.ChannelEdgePolicy
|
||||
channelID uint64) *channeldb.CachedEdgePolicy
|
||||
}
|
||||
|
||||
// paymentSession is used during an HTLC routings session to prune the local
|
||||
@@ -162,7 +162,7 @@ type PaymentSession interface {
|
||||
// loop if payment attempts take long enough. An additional set of edges can
|
||||
// also be provided to assist in reaching the payment's destination.
|
||||
type paymentSession struct {
|
||||
additionalEdges map[route.Vertex][]*channeldb.ChannelEdgePolicy
|
||||
additionalEdges map[route.Vertex][]*channeldb.CachedEdgePolicy
|
||||
|
||||
getBandwidthHints func() (map[uint64]lnwire.MilliSatoshi, error)
|
||||
|
||||
@@ -403,7 +403,7 @@ func (p *paymentSession) RequestRoute(maxAmt, feeLimit lnwire.MilliSatoshi,
|
||||
// updates to the supplied policy. It returns a boolean to indicate whether
|
||||
// there's an error when applying the updates.
|
||||
func (p *paymentSession) UpdateAdditionalEdge(msg *lnwire.ChannelUpdate,
|
||||
pubKey *btcec.PublicKey, policy *channeldb.ChannelEdgePolicy) bool {
|
||||
pubKey *btcec.PublicKey, policy *channeldb.CachedEdgePolicy) bool {
|
||||
|
||||
// Validate the message signature.
|
||||
if err := VerifyChannelUpdateSignature(msg, pubKey); err != nil {
|
||||
@@ -428,7 +428,7 @@ func (p *paymentSession) UpdateAdditionalEdge(msg *lnwire.ChannelUpdate,
|
||||
// ephemeral channel edge policy for additional edges. Returns a nil if nothing
|
||||
// found.
|
||||
func (p *paymentSession) GetAdditionalEdgePolicy(pubKey *btcec.PublicKey,
|
||||
channelID uint64) *channeldb.ChannelEdgePolicy {
|
||||
channelID uint64) *channeldb.CachedEdgePolicy {
|
||||
|
||||
target := route.NewVertex(pubKey)
|
||||
|
||||
|
||||
@@ -93,9 +93,9 @@ func (m *SessionSource) NewPaymentSessionEmpty() PaymentSession {
|
||||
// RouteHintsToEdges converts a list of invoice route hints to an edge map that
|
||||
// can be passed into pathfinding.
|
||||
func RouteHintsToEdges(routeHints [][]zpay32.HopHint, target route.Vertex) (
|
||||
map[route.Vertex][]*channeldb.ChannelEdgePolicy, error) {
|
||||
map[route.Vertex][]*channeldb.CachedEdgePolicy, error) {
|
||||
|
||||
edges := make(map[route.Vertex][]*channeldb.ChannelEdgePolicy)
|
||||
edges := make(map[route.Vertex][]*channeldb.CachedEdgePolicy)
|
||||
|
||||
// Traverse through all of the available hop hints and include them in
|
||||
// our edges map, indexed by the public key of the channel's starting
|
||||
@@ -125,9 +125,12 @@ func RouteHintsToEdges(routeHints [][]zpay32.HopHint, target route.Vertex) (
|
||||
// Finally, create the channel edge from the hop hint
|
||||
// and add it to list of edges corresponding to the node
|
||||
// at the start of the channel.
|
||||
edge := &channeldb.ChannelEdgePolicy{
|
||||
Node: endNode,
|
||||
ChannelID: hopHint.ChannelID,
|
||||
edge := &channeldb.CachedEdgePolicy{
|
||||
ToNodePubKey: func() route.Vertex {
|
||||
return endNode.PubKeyBytes
|
||||
},
|
||||
ToNodeFeatures: lnwire.EmptyFeatureVector(),
|
||||
ChannelID: hopHint.ChannelID,
|
||||
FeeBaseMSat: lnwire.MilliSatoshi(
|
||||
hopHint.FeeBaseMSat,
|
||||
),
|
||||
|
||||
@@ -217,7 +217,7 @@ func TestRequestRoute(t *testing.T) {
|
||||
session.pathFinder = func(
|
||||
g *graphParams, r *RestrictParams, cfg *PathFindingConfig,
|
||||
source, target route.Vertex, amt lnwire.MilliSatoshi,
|
||||
finalHtlcExpiry int32) ([]*channeldb.ChannelEdgePolicy, error) {
|
||||
finalHtlcExpiry int32) ([]*channeldb.CachedEdgePolicy, error) {
|
||||
|
||||
// We expect find path to receive a cltv limit excluding the
|
||||
// final cltv delta (including the block padding).
|
||||
@@ -225,13 +225,14 @@ func TestRequestRoute(t *testing.T) {
|
||||
t.Fatal("wrong cltv limit")
|
||||
}
|
||||
|
||||
path := []*channeldb.ChannelEdgePolicy{
|
||||
path := []*channeldb.CachedEdgePolicy{
|
||||
{
|
||||
Node: &channeldb.LightningNode{
|
||||
Features: lnwire.NewFeatureVector(
|
||||
nil, nil,
|
||||
),
|
||||
ToNodePubKey: func() route.Vertex {
|
||||
return route.Vertex{}
|
||||
},
|
||||
ToNodeFeatures: lnwire.NewFeatureVector(
|
||||
nil, nil,
|
||||
),
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -1727,7 +1727,7 @@ type routingMsg struct {
|
||||
func (r *ChannelRouter) FindRoute(source, target route.Vertex,
|
||||
amt lnwire.MilliSatoshi, restrictions *RestrictParams,
|
||||
destCustomRecords record.CustomSet,
|
||||
routeHints map[route.Vertex][]*channeldb.ChannelEdgePolicy,
|
||||
routeHints map[route.Vertex][]*channeldb.CachedEdgePolicy,
|
||||
finalExpiry uint16) (*route.Route, error) {
|
||||
|
||||
log.Debugf("Searching for path to %v, sending %v", target, amt)
|
||||
@@ -2822,7 +2822,7 @@ func (r *ChannelRouter) BuildRoute(amt *lnwire.MilliSatoshi,
|
||||
// total amount, we make a forward pass. Because the amount may have
|
||||
// been increased in the backward pass, fees need to be recalculated and
|
||||
// amount ranges re-checked.
|
||||
var pathEdges []*channeldb.ChannelEdgePolicy
|
||||
var pathEdges []*channeldb.CachedEdgePolicy
|
||||
receiverAmt := runningAmt
|
||||
for i, edge := range edges {
|
||||
policy := edge.getPolicy(receiverAmt, bandwidthHints)
|
||||
|
||||
@@ -2478,8 +2478,8 @@ func TestFindPathFeeWeighting(t *testing.T) {
|
||||
if len(path) != 1 {
|
||||
t.Fatalf("expected path length of 1, instead was: %v", len(path))
|
||||
}
|
||||
if path[0].Node.Alias != "luoji" {
|
||||
t.Fatalf("wrong node: %v", path[0].Node.Alias)
|
||||
if path[0].ToNodePubKey() != ctx.aliases["luoji"] {
|
||||
t.Fatalf("wrong node: %v", path[0].ToNodePubKey())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ func newUnifiedPolicies(sourceNode, toNode route.Vertex,
|
||||
// addPolicy adds a single channel policy. Capacity may be zero if unknown
|
||||
// (light clients).
|
||||
func (u *unifiedPolicies) addPolicy(fromNode route.Vertex,
|
||||
edge *channeldb.ChannelEdgePolicy, capacity btcutil.Amount) {
|
||||
edge *channeldb.CachedEdgePolicy, capacity btcutil.Amount) {
|
||||
|
||||
localChan := fromNode == u.sourceNode
|
||||
|
||||
@@ -92,7 +92,7 @@ func (u *unifiedPolicies) addGraphPolicies(g routingGraph) error {
|
||||
// unifiedPolicyEdge is the individual channel data that is kept inside an
|
||||
// unifiedPolicy object.
|
||||
type unifiedPolicyEdge struct {
|
||||
policy *channeldb.ChannelEdgePolicy
|
||||
policy *channeldb.CachedEdgePolicy
|
||||
capacity btcutil.Amount
|
||||
}
|
||||
|
||||
@@ -133,7 +133,7 @@ type unifiedPolicy struct {
|
||||
// specific amount to send. It differentiates between local and network
|
||||
// channels.
|
||||
func (u *unifiedPolicy) getPolicy(amt lnwire.MilliSatoshi,
|
||||
bandwidthHints map[uint64]lnwire.MilliSatoshi) *channeldb.ChannelEdgePolicy {
|
||||
bandwidthHints map[uint64]lnwire.MilliSatoshi) *channeldb.CachedEdgePolicy {
|
||||
|
||||
if u.localChan {
|
||||
return u.getPolicyLocal(amt, bandwidthHints)
|
||||
@@ -145,10 +145,10 @@ func (u *unifiedPolicy) getPolicy(amt lnwire.MilliSatoshi,
|
||||
// getPolicyLocal returns the optimal policy to use for this local connection
|
||||
// given a specific amount to send.
|
||||
func (u *unifiedPolicy) getPolicyLocal(amt lnwire.MilliSatoshi,
|
||||
bandwidthHints map[uint64]lnwire.MilliSatoshi) *channeldb.ChannelEdgePolicy {
|
||||
bandwidthHints map[uint64]lnwire.MilliSatoshi) *channeldb.CachedEdgePolicy {
|
||||
|
||||
var (
|
||||
bestPolicy *channeldb.ChannelEdgePolicy
|
||||
bestPolicy *channeldb.CachedEdgePolicy
|
||||
maxBandwidth lnwire.MilliSatoshi
|
||||
)
|
||||
|
||||
@@ -200,10 +200,10 @@ func (u *unifiedPolicy) getPolicyLocal(amt lnwire.MilliSatoshi,
|
||||
// a specific amount to send. The goal is to return a policy that maximizes the
|
||||
// probability of a successful forward in a non-strict forwarding context.
|
||||
func (u *unifiedPolicy) getPolicyNetwork(
|
||||
amt lnwire.MilliSatoshi) *channeldb.ChannelEdgePolicy {
|
||||
amt lnwire.MilliSatoshi) *channeldb.CachedEdgePolicy {
|
||||
|
||||
var (
|
||||
bestPolicy *channeldb.ChannelEdgePolicy
|
||||
bestPolicy *channeldb.CachedEdgePolicy
|
||||
maxFee lnwire.MilliSatoshi
|
||||
maxTimelock uint16
|
||||
)
|
||||
|
||||
@@ -20,7 +20,7 @@ func TestUnifiedPolicies(t *testing.T) {
|
||||
u := newUnifiedPolicies(source, toNode, nil)
|
||||
|
||||
// Add two channels between the pair of nodes.
|
||||
p1 := channeldb.ChannelEdgePolicy{
|
||||
p1 := channeldb.CachedEdgePolicy{
|
||||
FeeProportionalMillionths: 100000,
|
||||
FeeBaseMSat: 30,
|
||||
TimeLockDelta: 60,
|
||||
@@ -28,7 +28,7 @@ func TestUnifiedPolicies(t *testing.T) {
|
||||
MaxHTLC: 500,
|
||||
MinHTLC: 100,
|
||||
}
|
||||
p2 := channeldb.ChannelEdgePolicy{
|
||||
p2 := channeldb.CachedEdgePolicy{
|
||||
FeeProportionalMillionths: 190000,
|
||||
FeeBaseMSat: 10,
|
||||
TimeLockDelta: 40,
|
||||
@@ -39,7 +39,7 @@ func TestUnifiedPolicies(t *testing.T) {
|
||||
u.addPolicy(fromNode, &p1, 7)
|
||||
u.addPolicy(fromNode, &p2, 7)
|
||||
|
||||
checkPolicy := func(policy *channeldb.ChannelEdgePolicy,
|
||||
checkPolicy := func(policy *channeldb.CachedEdgePolicy,
|
||||
feeBase lnwire.MilliSatoshi, feeRate lnwire.MilliSatoshi,
|
||||
timeLockDelta uint16) {
|
||||
|
||||
|
||||
Reference in new issue
Block a user