Fix crash on FEE_INSUFFICIENT

master
rkfg 12 months 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 {
failedHop := route.Hops[result.Failure.FailureSourceIndex-1]
route, err = r.rebuildRoute(ctx, route, amount)
updatedHop := route.Hops[result.Failure.FailureSourceIndex-1]
updatedRoute, err := r.rebuildRoute(ctx, route, amount)
if err == nil {
updatedHop := updatedRoute.Hops[result.Failure.FailureSourceIndex-1]
// compare hops to make sure we do not loop endlessly
if !compareHops(failedHop, updatedHop) {
log.Printf("received channelupdate after failure, trying again with amt %s and fee %s ppm",
hiWhiteColor(amount), formatFeePPM(amount*1000, route.TotalFeesMsat))
return r.pay(ctx, amount, minAmount, maxFeeMsat, route, probeSteps)
hiWhiteColor(amount), formatFeePPM(amount*1000, updatedRoute.TotalFeesMsat))
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 {

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

Loading…
Cancel
Save