From f9249467945ce5276acd575d5bdaa2c6f1946f51 Mon Sep 17 00:00:00 2001 From: Nguyen Ba Tam Date: Mon, 29 Oct 2018 17:11:46 +0700 Subject: [PATCH 1/3] fix error deadlocked master node in case : try mine block Epoch when start node --- miner/worker.go | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/miner/worker.go b/miner/worker.go index 919fb41a3a..258f857263 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -337,6 +337,24 @@ func (self *worker) wait() { if stat == core.CanonStatTy { events = append(events, core.ChainHeadEvent{Block: block}) } + if work.config.Posv != nil { + // epoch block + if (block.NumberU64() % work.config.Posv.Epoch) == 0 { + core.CheckpointCh <- 1 + } + // prepare set of masternodes for the next epoch + if (block.NumberU64() % work.config.Posv.Epoch) == (work.config.Posv.Epoch - work.config.Posv.Gap) { + err := self.chain.UpdateM1() + if err != nil { + if err == core.ErrNotPoSV { + log.Error("Stopping node", "err", err) + os.Exit(1) + } else { + log.Error("Error when update masternodes set. Keep the current masternodes set for the next epoch.", "err", err) + } + } + } + } self.chain.PostChainEvents(events, logs) // Insert the block into the set of pending ones to wait for confirmations @@ -590,24 +608,6 @@ func (self *worker) commitNewWork() { log.Info("Commit new mining work", "number", work.Block.Number(), "txs", work.tcount, "special txs", len(specialTxs), "uncles", len(uncles), "elapsed", common.PrettyDuration(time.Since(tstart))) self.unconfirmed.Shift(work.Block.NumberU64() - 1) } - if work.config.Posv != nil { - // epoch block - if (work.Block.NumberU64() % work.config.Posv.Epoch) == 0 { - core.CheckpointCh <- 1 - } - // prepare set of masternodes for the next epoch - if (work.Block.NumberU64() % work.config.Posv.Epoch) == (work.config.Posv.Epoch - work.config.Posv.Gap) { - err := self.chain.UpdateM1() - if err != nil { - if err == core.ErrNotPoSV { - log.Error("Stopping node", "err", err) - os.Exit(1) - } else { - log.Error("Error when update masternodes set. Keep the current masternodes set for the next epoch.", "err", err) - } - } - } - } self.push(work) } From c4838fc9f2df3e61b0c6d36ca812079b38e8b27d Mon Sep 17 00:00:00 2001 From: Nguyen Ba Tam Date: Sat, 3 Nov 2018 17:49:55 +0700 Subject: [PATCH 2/3] tiny fix m2 duplicate sign block --- eth/fetcher/fetcher.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index bfe6025ea6..fb29a37ec3 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -669,8 +669,8 @@ func (f *Fetcher) insert(peer string, block *types.Block) { go f.broadcastBlock(block, true) return } - block = newBlock - propBroadcastOutTimer.UpdateSince(block.ReceivedAt) + f.enqueue(peer,newBlock) + return default: // Something went very wrong, drop the peer log.Debug("Propagated block verification failed", "peer", peer, "number", block.Number(), "hash", hash, "err", err) @@ -693,7 +693,6 @@ func (f *Fetcher) insert(peer string, block *types.Block) { // If import succeeded, broadcast the block propAnnounceOutTimer.UpdateSince(block.ReceivedAt) - go f.broadcastBlock(block, true) go f.broadcastBlock(block, false) }() From 1db1b3008857dd26352f3c5c69672ac38e710e0e Mon Sep 17 00:00:00 2001 From: Nguyen Ba Tam Date: Mon, 5 Nov 2018 11:16:42 +0700 Subject: [PATCH 3/3] fix maximum 100 % finality --- internal/ethapi/api.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index f5e0bab9e9..3ec5f33a76 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -877,6 +877,7 @@ func (s *PublicBlockChainAPI) rpcOutputBlock(b *types.Block, inclTx bool, fullTx if signer == masternode { countFinality++ filterSigners = append(filterSigners, masternode) + break } } }