From 1161d87eec810b84933c4d46bfbe78794c65e64c Mon Sep 17 00:00:00 2001 From: "Johan T. Halseth" Date: Tue, 4 Jun 2019 10:13:33 +0200 Subject: [PATCH] routing/router: correct SendToRoute's amount record in DB Previously we would mistakenly use the payment value from the dummy LightningPayment struct, which would obviously be 0 always. Now we instead calculate the value from the given route. --- routing/router.go | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/routing/router.go b/routing/router.go index 37443b2d..2081bac8 100644 --- a/routing/router.go +++ b/routing/router.go @@ -1637,26 +1637,31 @@ func (r *ChannelRouter) SendToRoute(hash lntypes.Hash, route *route.Route) ( // Create a payment session for just this route. paySession := r.cfg.MissionControl.NewPaymentSessionForRoute(route) - // Create a (mostly) dummy payment, as the created payment session is - // not going to do path finding. - payment := &LightningPayment{ - PaymentHash: hash, - } + // Calculate amount paid to receiver. + amt := route.TotalAmount - route.TotalFees() // Record this payment hash with the ControlTower, ensuring it is not // already in-flight. info := &channeldb.PaymentCreationInfo{ - PaymentHash: payment.PaymentHash, - Value: payment.Amount, + PaymentHash: hash, + Value: amt, CreationDate: time.Now(), PaymentRequest: nil, } - err := r.cfg.Control.InitPayment(payment.PaymentHash, info) + err := r.cfg.Control.InitPayment(hash, info) if err != nil { return [32]byte{}, err } + // Create a (mostly) dummy payment, as the created payment session is + // not going to do path finding. + // TODO(halseth): sendPayment doesn't relly need LightningPayment, make + // it take just needed fields instead. + payment := &LightningPayment{ + PaymentHash: hash, + } + // Since this is the first time this payment is being made, we pass nil // for the existing attempt. preimage, _, err := r.sendPayment(nil, payment, paySession)