Fix crash on FEE_INSUFFICIENT

master
rkfg 1 year ago
parent efa39b4cc1
commit f839791e2b

@ -109,15 +109,17 @@ func (r *regolancer) pay(ctx context.Context, amount int64, minAmount int64, max
if result.Failure.Code == lnrpc.Failure_FEE_INSUFFICIENT || result.Failure.Code == lnrpc.Failure_INCORRECT_CLTV_EXPIRY { if result.Failure.Code == lnrpc.Failure_FEE_INSUFFICIENT || result.Failure.Code == lnrpc.Failure_INCORRECT_CLTV_EXPIRY {
failedHop := route.Hops[result.Failure.FailureSourceIndex-1] failedHop := route.Hops[result.Failure.FailureSourceIndex-1]
route, err = r.rebuildRoute(ctx, route, amount) updatedRoute, err := r.rebuildRoute(ctx, route, amount)
updatedHop := route.Hops[result.Failure.FailureSourceIndex-1]
if err == nil { if err == nil {
updatedHop := updatedRoute.Hops[result.Failure.FailureSourceIndex-1]
// compare hops to make sure we do not loop endlessly // compare hops to make sure we do not loop endlessly
if !compareHops(failedHop, updatedHop) { if !compareHops(failedHop, updatedHop) {
log.Printf("received channelupdate after failure, trying again with amt %s and fee %s ppm", log.Printf("received channelupdate after failure, trying again with amt %s and fee %s ppm",
hiWhiteColor(amount), formatFeePPM(amount*1000, route.TotalFeesMsat)) hiWhiteColor(amount), formatFeePPM(amount*1000, updatedRoute.TotalFeesMsat))
return r.pay(ctx, amount, minAmount, maxFeeMsat, route, probeSteps) return r.pay(ctx, amount, minAmount, maxFeeMsat, updatedRoute, probeSteps)
} }
} else {
log.Printf("error rebuilding the route: %s", err)
} }
} }
if result.Failure.Code == lnrpc.Failure_TEMPORARY_CHANNEL_FAILURE { if result.Failure.Code == lnrpc.Failure_TEMPORARY_CHANNEL_FAILURE {

@ -322,6 +322,9 @@ func getTarget(route *lnrpc.Route) uint64 {
} }
func compareHops(hop1 *lnrpc.Hop, hop2 *lnrpc.Hop) bool { func compareHops(hop1 *lnrpc.Hop, hop2 *lnrpc.Hop) bool {
if hop1 == nil || hop2 == nil {
return false
}
return hop1.ChanId == hop2.ChanId && return hop1.ChanId == hop2.ChanId &&
hop1.FeeMsat == hop2.FeeMsat && hop1.FeeMsat == hop2.FeeMsat &&
hop1.Expiry == hop2.Expiry hop1.Expiry == hop2.Expiry

Loading…
Cancel
Save