From f65014512d5efcf2a0c2a3a5f0b5022eb95e8a91 Mon Sep 17 00:00:00 2001 From: Tuna Date: Thu, 19 Jul 2018 17:15:21 +0700 Subject: [PATCH] node waits to his turn until there is a new block comes in --- core/blockchain.go | 2 -- eth/backend.go | 4 ++-- miner/worker.go | 19 ++++++++++--------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index 1656ac3c8d..9766ad9021 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -49,7 +49,6 @@ var ( blockInsertTimer = metrics.NewRegisteredTimer("chain/inserts", nil) CheckpointCh = make(chan int) M1Ch = make(chan int) - NewBlockCh = make(chan int) ErrNoGenesis = errors.New("Genesis not found in chain") ) @@ -1244,7 +1243,6 @@ func (st *insertStats) report(chain []*types.Block, index int, cache common.Stor context = append(context, []interface{}{"ignored", st.ignored}...) } log.Info("Imported new chain segment", context...) - NewBlockCh <- 1 *st = insertStats{startTime: now, lastIndex: index + 1} } } diff --git a/eth/backend.go b/eth/backend.go index c8247bdab3..7186462ca9 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -471,8 +471,8 @@ func (s *Ethereum) StartStaking(local bool) error { return nil } -func (s *Ethereum) StopStaking() { s.miner.Stop() } -func (s *Ethereum) IsStaking() bool { return s.miner.Mining() } +func (s *Ethereum) StopStaking() { s.miner.Stop() } +func (s *Ethereum) IsStaking() bool { return s.miner.Mining() } func (s *Ethereum) Miner() *miner.Miner { return s.miner } func (s *Ethereum) AccountManager() *accounts.Manager { return s.accountManager } diff --git a/miner/worker.go b/miner/worker.go index ed78d5f192..5fef89d736 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -52,7 +52,7 @@ const ( // chainSideChanSize is the size of channel listening to ChainSideEvent. chainSideChanSize = 10 // Timeout waiting for M1 - m1Timeout = 1000 + m1Timeout = 1 ) // Agent can register themself with the worker @@ -475,16 +475,17 @@ func (self *worker) commitNewWork() { gap := int64(c.GetPeriod()) * int64(h) log.Info("Distance from the parent block", "seconds", gap, "hops", h) L: - for { - select { - case <-core.NewBlockCh: - log.Info("New block has came already. Skip this turn") + select { + case newBlock := <-self.chainHeadCh: + if newBlock.Block.NumberU64() > parent.NumberU64() { + log.Info("New block has came already. Skip this turn", "new block", newBlock.Block.NumberU64(), "current block", parent.NumberU64()) + self.chainHeadCh <- newBlock return - case <-time.After(time.Duration(gap+m1Timeout) * time.Second): - // wait enough. It's my turn - log.Info("Wait enough. It's my turn", "waited seconds", gap+m1Timeout) - break L } + case <-time.After(time.Duration(gap+m1Timeout) * time.Second): + // wait enough. It's my turn + log.Info("Wait enough. It's my turn", "waited seconds", gap+m1Timeout) + break L } } }