Merge pull request #3155 from halseth/sendtoroute-zero-value
routing/router: correct SendToRoute's amount record in DB
This commit is contained in:
commit
e6c0ddc825
@ -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)
|
||||
|
@ -3175,27 +3175,31 @@ func TestSendToRouteStructuredError(t *testing.T) {
|
||||
}
|
||||
defer cleanUp()
|
||||
|
||||
// Set up an init channel for the control tower, such that we can make
|
||||
// sure the payment is initiated correctly.
|
||||
init := make(chan initArgs, 1)
|
||||
ctx.router.cfg.Control.(*mockControlTower).init = init
|
||||
|
||||
// Setup a route from source a to destination c. The route will be used
|
||||
// in a call to SendToRoute. SendToRoute also applies channel updates,
|
||||
// but it saves us from including RequestRoute in the test scope too.
|
||||
const payAmt = lnwire.MilliSatoshi(10000)
|
||||
hop1 := ctx.aliases["b"]
|
||||
hop2 := ctx.aliases["c"]
|
||||
|
||||
hops := []*route.Hop{
|
||||
{
|
||||
ChannelID: 1,
|
||||
PubKeyBytes: hop1,
|
||||
ChannelID: 1,
|
||||
PubKeyBytes: hop1,
|
||||
AmtToForward: payAmt,
|
||||
},
|
||||
{
|
||||
ChannelID: 2,
|
||||
PubKeyBytes: hop2,
|
||||
ChannelID: 2,
|
||||
PubKeyBytes: hop2,
|
||||
AmtToForward: payAmt,
|
||||
},
|
||||
}
|
||||
|
||||
rt, err := route.NewRouteFromHops(
|
||||
lnwire.MilliSatoshi(10000), 100,
|
||||
ctx.aliases["a"], hops,
|
||||
)
|
||||
rt, err := route.NewRouteFromHops(payAmt, 100, ctx.aliases["a"], hops)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create route: %v", err)
|
||||
}
|
||||
@ -3239,4 +3243,14 @@ func TestSendToRouteStructuredError(t *testing.T) {
|
||||
if _, ok := fErr.FailureMessage.(*lnwire.FailFeeInsufficient); !ok {
|
||||
t.Fatalf("expected fee insufficient error")
|
||||
}
|
||||
|
||||
// Check that the correct values were used when initiating the payment.
|
||||
select {
|
||||
case initVal := <-init:
|
||||
if initVal.c.Value != payAmt {
|
||||
t.Fatalf("expected %v, got %v", payAmt, initVal.c.Value)
|
||||
}
|
||||
case <-time.After(100 * time.Millisecond):
|
||||
t.Fatalf("initPayment not called")
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user