routing: remove redundant fee limit check in newRoute
This check was a left over from when the fee limit wasn't checked yet in the path finding algorithm.
This commit is contained in:
parent
f4cc2e235a
commit
4937304732
@ -210,7 +210,7 @@ func (r *Route) ToHopPayloads() []sphinx.HopData {
|
|||||||
//
|
//
|
||||||
// NOTE: The passed slice of ChannelHops MUST be sorted in forward order: from
|
// NOTE: The passed slice of ChannelHops MUST be sorted in forward order: from
|
||||||
// the source to the target node of the path finding attempt.
|
// the source to the target node of the path finding attempt.
|
||||||
func newRoute(amtToSend, feeLimit lnwire.MilliSatoshi, sourceVertex Vertex,
|
func newRoute(amtToSend lnwire.MilliSatoshi, sourceVertex Vertex,
|
||||||
pathEdges []*channeldb.ChannelEdgePolicy, currentHeight uint32,
|
pathEdges []*channeldb.ChannelEdgePolicy, currentHeight uint32,
|
||||||
finalCLTVDelta uint16) (*Route, error) {
|
finalCLTVDelta uint16) (*Route, error) {
|
||||||
|
|
||||||
@ -310,13 +310,6 @@ func newRoute(amtToSend, feeLimit lnwire.MilliSatoshi, sourceVertex Vertex,
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invalidate this route if its total fees exceed our fee limit.
|
|
||||||
if newRoute.TotalFees > feeLimit {
|
|
||||||
err := fmt.Sprintf("total route fees exceeded fee "+
|
|
||||||
"limit of %v", feeLimit)
|
|
||||||
return nil, newErrf(ErrFeeLimitExceeded, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return newRoute, nil
|
return newRoute, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -623,7 +623,7 @@ func TestFindLowestFeePath(t *testing.T) {
|
|||||||
t.Fatalf("unable to find path: %v", err)
|
t.Fatalf("unable to find path: %v", err)
|
||||||
}
|
}
|
||||||
route, err := newRoute(
|
route, err := newRoute(
|
||||||
paymentAmt, infinity, sourceVertex, path, startingHeight,
|
paymentAmt, sourceVertex, path, startingHeight,
|
||||||
finalHopCLTV)
|
finalHopCLTV)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to create path: %v", err)
|
t.Fatalf("unable to create path: %v", err)
|
||||||
@ -776,7 +776,7 @@ func testBasicGraphPathFindingCase(t *testing.T, graphInstance *testGraphInstanc
|
|||||||
}
|
}
|
||||||
|
|
||||||
route, err := newRoute(
|
route, err := newRoute(
|
||||||
paymentAmt, test.feeLimit, sourceVertex, path, startingHeight,
|
paymentAmt, sourceVertex, path, startingHeight,
|
||||||
finalHopCLTV,
|
finalHopCLTV,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1056,8 +1056,6 @@ func TestNewRoute(t *testing.T) {
|
|||||||
// expectedErrorCode indicates the expected error code when
|
// expectedErrorCode indicates the expected error code when
|
||||||
// expectError is true.
|
// expectError is true.
|
||||||
expectedErrorCode errorCode
|
expectedErrorCode errorCode
|
||||||
|
|
||||||
feeLimit lnwire.MilliSatoshi
|
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
// For a single hop payment, no fees are expected to be paid.
|
// For a single hop payment, no fees are expected to be paid.
|
||||||
@ -1070,7 +1068,6 @@ func TestNewRoute(t *testing.T) {
|
|||||||
expectedTimeLocks: []uint32{1},
|
expectedTimeLocks: []uint32{1},
|
||||||
expectedTotalAmount: 100000,
|
expectedTotalAmount: 100000,
|
||||||
expectedTotalTimeLock: 1,
|
expectedTotalTimeLock: 1,
|
||||||
feeLimit: noFeeLimit,
|
|
||||||
}, {
|
}, {
|
||||||
// For a two hop payment, only the fee for the first hop
|
// For a two hop payment, only the fee for the first hop
|
||||||
// needs to be paid. The destination hop does not require
|
// needs to be paid. The destination hop does not require
|
||||||
@ -1085,7 +1082,6 @@ func TestNewRoute(t *testing.T) {
|
|||||||
expectedTimeLocks: []uint32{1, 1},
|
expectedTimeLocks: []uint32{1, 1},
|
||||||
expectedTotalAmount: 100130,
|
expectedTotalAmount: 100130,
|
||||||
expectedTotalTimeLock: 6,
|
expectedTotalTimeLock: 6,
|
||||||
feeLimit: noFeeLimit,
|
|
||||||
}, {
|
}, {
|
||||||
// A three hop payment where the first and second hop
|
// A three hop payment where the first and second hop
|
||||||
// will both charge 1 msat. The fee for the first hop
|
// will both charge 1 msat. The fee for the first hop
|
||||||
@ -1103,7 +1099,6 @@ func TestNewRoute(t *testing.T) {
|
|||||||
expectedTotalAmount: 100002,
|
expectedTotalAmount: 100002,
|
||||||
expectedTimeLocks: []uint32{4, 1, 1},
|
expectedTimeLocks: []uint32{4, 1, 1},
|
||||||
expectedTotalTimeLock: 9,
|
expectedTotalTimeLock: 9,
|
||||||
feeLimit: noFeeLimit,
|
|
||||||
}, {
|
}, {
|
||||||
// A three hop payment where the fee of the first hop
|
// A three hop payment where the fee of the first hop
|
||||||
// is slightly higher (11) than the fee at the second hop,
|
// is slightly higher (11) than the fee at the second hop,
|
||||||
@ -1119,7 +1114,6 @@ func TestNewRoute(t *testing.T) {
|
|||||||
expectedTotalAmount: 102010,
|
expectedTotalAmount: 102010,
|
||||||
expectedTimeLocks: []uint32{4, 1, 1},
|
expectedTimeLocks: []uint32{4, 1, 1},
|
||||||
expectedTotalTimeLock: 9,
|
expectedTotalTimeLock: 9,
|
||||||
feeLimit: noFeeLimit,
|
|
||||||
}, {
|
}, {
|
||||||
// A three hop payment where the fee policies of the first and
|
// A three hop payment where the fee policies of the first and
|
||||||
// second hop are just high enough to show the fee carry over
|
// second hop are just high enough to show the fee carry over
|
||||||
@ -1141,53 +1135,6 @@ func TestNewRoute(t *testing.T) {
|
|||||||
expectedTotalAmount: 101101,
|
expectedTotalAmount: 101101,
|
||||||
expectedTimeLocks: []uint32{4, 1, 1},
|
expectedTimeLocks: []uint32{4, 1, 1},
|
||||||
expectedTotalTimeLock: 9,
|
expectedTotalTimeLock: 9,
|
||||||
feeLimit: noFeeLimit,
|
|
||||||
},
|
|
||||||
// Check fee limit behaviour
|
|
||||||
{
|
|
||||||
name: "two hop success with fee limit (greater)",
|
|
||||||
paymentAmount: 100000,
|
|
||||||
hops: []*channeldb.ChannelEdgePolicy{
|
|
||||||
createHop(0, 1000, 1000000, 144),
|
|
||||||
createHop(0, 1000, 1000000, 144),
|
|
||||||
},
|
|
||||||
expectedTotalAmount: 100100,
|
|
||||||
expectedFees: []lnwire.MilliSatoshi{100, 0},
|
|
||||||
expectedTimeLocks: []uint32{1, 1},
|
|
||||||
expectedTotalTimeLock: 145,
|
|
||||||
feeLimit: 150,
|
|
||||||
}, {
|
|
||||||
name: "two hop success with fee limit (equal)",
|
|
||||||
paymentAmount: 100000,
|
|
||||||
hops: []*channeldb.ChannelEdgePolicy{
|
|
||||||
createHop(0, 1000, 1000000, 144),
|
|
||||||
createHop(0, 1000, 1000000, 144),
|
|
||||||
},
|
|
||||||
expectedTotalAmount: 100100,
|
|
||||||
expectedFees: []lnwire.MilliSatoshi{100, 0},
|
|
||||||
expectedTimeLocks: []uint32{1, 1},
|
|
||||||
expectedTotalTimeLock: 145,
|
|
||||||
feeLimit: 100,
|
|
||||||
}, {
|
|
||||||
name: "two hop failure with fee limit (smaller)",
|
|
||||||
paymentAmount: 100000,
|
|
||||||
hops: []*channeldb.ChannelEdgePolicy{
|
|
||||||
createHop(0, 1000, 1000000, 144),
|
|
||||||
createHop(0, 1000, 1000000, 144),
|
|
||||||
},
|
|
||||||
feeLimit: 50,
|
|
||||||
expectError: true,
|
|
||||||
expectedErrorCode: ErrFeeLimitExceeded,
|
|
||||||
}, {
|
|
||||||
name: "two hop failure with fee limit (zero)",
|
|
||||||
paymentAmount: 100000,
|
|
||||||
hops: []*channeldb.ChannelEdgePolicy{
|
|
||||||
createHop(0, 1000, 1000000, 144),
|
|
||||||
createHop(0, 1000, 1000000, 144),
|
|
||||||
},
|
|
||||||
feeLimit: 0,
|
|
||||||
expectError: true,
|
|
||||||
expectedErrorCode: ErrFeeLimitExceeded,
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
for _, testCase := range testCases {
|
for _, testCase := range testCases {
|
||||||
@ -1238,7 +1185,6 @@ func TestNewRoute(t *testing.T) {
|
|||||||
|
|
||||||
t.Run(testCase.name, func(t *testing.T) {
|
t.Run(testCase.name, func(t *testing.T) {
|
||||||
route, err := newRoute(testCase.paymentAmount,
|
route, err := newRoute(testCase.paymentAmount,
|
||||||
testCase.feeLimit,
|
|
||||||
sourceVertex, testCase.hops, startingHeight,
|
sourceVertex, testCase.hops, startingHeight,
|
||||||
finalHopCLTV)
|
finalHopCLTV)
|
||||||
|
|
||||||
@ -2106,7 +2052,7 @@ func TestRestrictOutgoingChannel(t *testing.T) {
|
|||||||
t.Fatalf("unable to find path: %v", err)
|
t.Fatalf("unable to find path: %v", err)
|
||||||
}
|
}
|
||||||
route, err := newRoute(
|
route, err := newRoute(
|
||||||
paymentAmt, infinity, sourceVertex, path, startingHeight,
|
paymentAmt, sourceVertex, path, startingHeight,
|
||||||
finalHopCLTV,
|
finalHopCLTV,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -163,8 +163,7 @@ func (p *paymentSession) RequestRoute(payment *LightningPayment,
|
|||||||
// a route by applying the time-lock and fee requirements.
|
// a route by applying the time-lock and fee requirements.
|
||||||
sourceVertex := Vertex(p.mc.selfNode.PubKeyBytes)
|
sourceVertex := Vertex(p.mc.selfNode.PubKeyBytes)
|
||||||
route, err := newRoute(
|
route, err := newRoute(
|
||||||
payment.Amount, payment.FeeLimit, sourceVertex, path, height,
|
payment.Amount, sourceVertex, path, height, finalCltvDelta,
|
||||||
finalCltvDelta,
|
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// TODO(roasbeef): return which edge/vertex didn't work
|
// TODO(roasbeef): return which edge/vertex didn't work
|
||||||
|
@ -1266,7 +1266,7 @@ type routingMsg struct {
|
|||||||
// initial set of paths as it's possible we drop a route if it can't handle the
|
// initial set of paths as it's possible we drop a route if it can't handle the
|
||||||
// total payment flow after fees are calculated.
|
// total payment flow after fees are calculated.
|
||||||
func pathsToFeeSortedRoutes(source Vertex, paths [][]*channeldb.ChannelEdgePolicy,
|
func pathsToFeeSortedRoutes(source Vertex, paths [][]*channeldb.ChannelEdgePolicy,
|
||||||
finalCLTVDelta uint16, amt, feeLimit lnwire.MilliSatoshi,
|
finalCLTVDelta uint16, amt lnwire.MilliSatoshi,
|
||||||
currentHeight uint32) ([]*Route, error) {
|
currentHeight uint32) ([]*Route, error) {
|
||||||
|
|
||||||
validRoutes := make([]*Route, 0, len(paths))
|
validRoutes := make([]*Route, 0, len(paths))
|
||||||
@ -1275,8 +1275,7 @@ func pathsToFeeSortedRoutes(source Vertex, paths [][]*channeldb.ChannelEdgePolic
|
|||||||
// hop in the path as it contains a "self-hop" that is inserted
|
// hop in the path as it contains a "self-hop" that is inserted
|
||||||
// by our KSP algorithm.
|
// by our KSP algorithm.
|
||||||
route, err := newRoute(
|
route, err := newRoute(
|
||||||
amt, feeLimit, source, path[1:], currentHeight,
|
amt, source, path[1:], currentHeight, finalCLTVDelta,
|
||||||
finalCLTVDelta,
|
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// TODO(roasbeef): report straw breaking edge?
|
// TODO(roasbeef): report straw breaking edge?
|
||||||
@ -1412,7 +1411,7 @@ func (r *ChannelRouter) FindRoutes(target *btcec.PublicKey,
|
|||||||
// factored in.
|
// factored in.
|
||||||
sourceVertex := Vertex(r.selfNode.PubKeyBytes)
|
sourceVertex := Vertex(r.selfNode.PubKeyBytes)
|
||||||
validRoutes, err := pathsToFeeSortedRoutes(
|
validRoutes, err := pathsToFeeSortedRoutes(
|
||||||
sourceVertex, shortestPaths, finalCLTVDelta, amt, feeLimit,
|
sourceVertex, shortestPaths, finalCLTVDelta, amt,
|
||||||
uint32(currentHeight),
|
uint32(currentHeight),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user