From cdddaaca75bba03f408991702e30d581df80daad Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Mon, 12 Apr 2021 09:57:00 +0200 Subject: [PATCH] routing: no backend call to fetch best block --- routing/router.go | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/routing/router.go b/routing/router.go index a1f50215..6c489177 100644 --- a/routing/router.go +++ b/routing/router.go @@ -9,6 +9,7 @@ import ( "time" "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcutil" "github.com/davecgh/go-spew/spew" @@ -480,6 +481,7 @@ func (r *ChannelRouter) Start() error { if err != nil { return err } + r.bestHeight = uint32(bestHeight) // If the graph has never been pruned, or hasn't fully been created yet, // then we don't treat this as an explicit error. @@ -556,7 +558,7 @@ func (r *ChannelRouter) Start() error { // Before we begin normal operation of the router, we first need // to synchronize the channel graph to the latest state of the // UTXO set. - if err := r.syncGraphWithChain(); err != nil { + if err := r.syncGraphWithChain(bestHash, bestHeight); err != nil { return err } @@ -665,15 +667,11 @@ func (r *ChannelRouter) Stop() error { // the latest UTXO set state. This process involves pruning from the channel // graph any channels which have been closed by spending their funding output // since we've been down. -func (r *ChannelRouter) syncGraphWithChain() error { +func (r *ChannelRouter) syncGraphWithChain(bestHash *chainhash.Hash, + bestHeight int32) error { + // First, we'll need to check to see if we're already in sync with the // latest state of the UTXO set. - bestHash, bestHeight, err := r.cfg.Chain.GetBestBlock() - if err != nil { - return err - } - r.bestHeight = uint32(bestHeight) - pruneHash, pruneHeight, err := r.cfg.Graph.PruneTip() if err != nil { switch { @@ -2015,10 +2013,7 @@ func (r *ChannelRouter) sendPayment( // We'll also fetch the current block height so we can properly // calculate the required HTLC time locks within the route. - _, currentHeight, err := r.cfg.Chain.GetBestBlock() - if err != nil { - return [32]byte{}, nil, err - } + currentHeight := int32(atomic.LoadUint32(&r.bestHeight)) // Now set up a paymentLifecycle struct with these params, such that we // can resume the payment from the current state.