routing/route: define route.ReceiverAmt() method
This commit is contained in:
parent
4485e8261f
commit
79227bab3a
@ -308,7 +308,16 @@ func (r *Route) TotalFees() lnwire.MilliSatoshi {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
return r.TotalAmount - r.Hops[len(r.Hops)-1].AmtToForward
|
return r.TotalAmount - r.ReceiverAmt()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReceiverAmt is the amount received by the final hop of this route.
|
||||||
|
func (r *Route) ReceiverAmt() lnwire.MilliSatoshi {
|
||||||
|
if len(r.Hops) == 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.Hops[len(r.Hops)-1].AmtToForward
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewRouteFromHops creates a new Route structure from the minimally required
|
// NewRouteFromHops creates a new Route structure from the minimally required
|
||||||
|
@ -20,15 +20,24 @@ var (
|
|||||||
func TestRouteTotalFees(t *testing.T) {
|
func TestRouteTotalFees(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
// Make sure empty route returns a 0 fee.
|
// Make sure empty route returns a 0 fee, and zero amount.
|
||||||
r := &Route{}
|
r := &Route{}
|
||||||
if r.TotalFees() != 0 {
|
if r.TotalFees() != 0 {
|
||||||
t.Fatalf("expected 0 fees, got %v", r.TotalFees())
|
t.Fatalf("expected 0 fees, got %v", r.TotalFees())
|
||||||
}
|
}
|
||||||
|
if r.ReceiverAmt() != 0 {
|
||||||
|
t.Fatalf("expected 0 amt, got %v", r.ReceiverAmt())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure empty route won't be allowed in the constructor.
|
||||||
|
amt := lnwire.MilliSatoshi(1000)
|
||||||
|
_, err := NewRouteFromHops(amt, 100, Vertex{}, []*Hop{})
|
||||||
|
if err != ErrNoRouteHopsProvided {
|
||||||
|
t.Fatalf("expected ErrNoRouteHopsProvided, got %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
// For one-hop routes the fee should be 0, since the last node will
|
// For one-hop routes the fee should be 0, since the last node will
|
||||||
// receive the full amount.
|
// receive the full amount.
|
||||||
amt := lnwire.MilliSatoshi(1000)
|
|
||||||
hops := []*Hop{
|
hops := []*Hop{
|
||||||
{
|
{
|
||||||
PubKeyBytes: Vertex{},
|
PubKeyBytes: Vertex{},
|
||||||
@ -37,7 +46,7 @@ func TestRouteTotalFees(t *testing.T) {
|
|||||||
AmtToForward: amt,
|
AmtToForward: amt,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
r, err := NewRouteFromHops(amt, 100, Vertex{}, hops)
|
r, err = NewRouteFromHops(amt, 100, Vertex{}, hops)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -46,6 +55,10 @@ func TestRouteTotalFees(t *testing.T) {
|
|||||||
t.Fatalf("expected 0 fees, got %v", r.TotalFees())
|
t.Fatalf("expected 0 fees, got %v", r.TotalFees())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if r.ReceiverAmt() != amt {
|
||||||
|
t.Fatalf("expected %v amt, got %v", amt, r.ReceiverAmt())
|
||||||
|
}
|
||||||
|
|
||||||
// Append the route with a node, making the first one take a fee.
|
// Append the route with a node, making the first one take a fee.
|
||||||
fee := lnwire.MilliSatoshi(100)
|
fee := lnwire.MilliSatoshi(100)
|
||||||
hops = append(hops, &Hop{
|
hops = append(hops, &Hop{
|
||||||
@ -64,6 +77,10 @@ func TestRouteTotalFees(t *testing.T) {
|
|||||||
if r.TotalFees() != fee {
|
if r.TotalFees() != fee {
|
||||||
t.Fatalf("expected %v fees, got %v", fee, r.TotalFees())
|
t.Fatalf("expected %v fees, got %v", fee, r.TotalFees())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if r.ReceiverAmt() != amt-fee {
|
||||||
|
t.Fatalf("expected %v amt, got %v", amt-fee, r.ReceiverAmt())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -1746,7 +1746,7 @@ func (r *ChannelRouter) SendToRoute(hash lntypes.Hash, route *route.Route) (
|
|||||||
paySession := r.cfg.SessionSource.NewPaymentSessionForRoute(route)
|
paySession := r.cfg.SessionSource.NewPaymentSessionForRoute(route)
|
||||||
|
|
||||||
// Calculate amount paid to receiver.
|
// Calculate amount paid to receiver.
|
||||||
amt := route.TotalAmount - route.TotalFees()
|
amt := route.ReceiverAmt()
|
||||||
|
|
||||||
// Record this payment hash with the ControlTower, ensuring it is not
|
// Record this payment hash with the ControlTower, ensuring it is not
|
||||||
// already in-flight.
|
// already in-flight.
|
||||||
|
Loading…
Reference in New Issue
Block a user