From 48f3c7648f56568ac21070fd065305c11082b1a5 Mon Sep 17 00:00:00 2001 From: Jan Pochyla Date: Mon, 11 Sep 2017 15:06:16 +0200 Subject: [PATCH] speed up the block download a little --- blockbook.go | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/blockbook.go b/blockbook.go index 87f69726..70419f84 100644 --- a/blockbook.go +++ b/blockbook.go @@ -261,8 +261,16 @@ func connectBlock( index Indexer, hash string, ) error { - for hash != "" { - block, err := blocks.GetBlock(hash) + bch := make(chan blockResult, 8) + done := make(chan struct{}) + defer close(done) + + go getBlockChain(hash, blocks, bch, done) + + for res := range bch { + err := res.err + block := res.block + if err != nil { return err } @@ -273,8 +281,6 @@ func connectBlock( if err := index.ConnectBlock(block, addrs); err != nil { return err } - - hash = block.Next } return nil @@ -346,3 +352,27 @@ func getBlockRange( results <- blockResult{block: block} } } + +func getBlockChain( + hash string, + blocks Blocks, + out chan blockResult, + done chan struct{}, +) { + defer close(out) + + for hash != "" { + select { + case <-done: + return + default: + } + block, err := blocks.GetBlock(hash) + if err != nil { + out <- blockResult{err: err} + return + } + hash = block.Next + out <- blockResult{block: block} + } +}