routing: when creating a route, base time locks off current height

This commit implements some missing functionality, namely before all
time locks were calculated off of a base height of 0 essentially.
That’s incorrect as all time locks within HTLC’s would then be already
expired. We remedy this requesting the latest height when creating a
route to ensure that our time locks are set properly.
This commit is contained in:
Olaoluwa Osuntokun 2017-08-02 21:01:49 -07:00
parent cfa45c15f7
commit d331ddd2f4
No known key found for this signature in database
GPG Key ID: 9CC5B105D03521A2

@ -199,9 +199,16 @@ func (s sortableRoutes) Swap(i, j int) {
// //
// NOTE: The passed slice of ChannelHops MUST be sorted in forward order: from // NOTE: The passed slice of ChannelHops MUST be sorted in forward order: from
// the source to the target node of the path finding attempt. // the source to the target node of the path finding attempt.
func newRoute(amtToSend btcutil.Amount, pathEdges []*ChannelHop) (*Route, error) { func newRoute(amtToSend btcutil.Amount, pathEdges []*ChannelHop,
currentHeight uint32) (*Route, error) {
// First, we'll create a new empty route with enough hops to match the
// amount of path edges. We set the TotalTimeLock to the current block
// height, as this is the basis that all of the time locks will be
// calculated from.
route := &Route{ route := &Route{
Hops: make([]*Hop, len(pathEdges)), Hops: make([]*Hop, len(pathEdges)),
TotalTimeLock: currentHeight,
} }
// TODO(roasbeef): need to do sanity check to ensure we don't make a // TODO(roasbeef): need to do sanity check to ensure we don't make a
@ -268,7 +275,8 @@ func newRoute(amtToSend btcutil.Amount, pathEdges []*ChannelHop) (*Route, error)
} else { } else {
// Otherwise, the value of the outgoing time-lock will // Otherwise, the value of the outgoing time-lock will
// be the value of the time-lock for the _outgoing_ // be the value of the time-lock for the _outgoing_
// HTLC. // HTLC, so we factor in their specified grace period
// (time lock delta).
nextHop.OutgoingTimeLock = route.TotalTimeLock - nextHop.OutgoingTimeLock = route.TotalTimeLock -
uint32(edge.TimeLockDelta) uint32(edge.TimeLockDelta)
} }