From 0953671747bb8f41166b712ac52dc05399d67de8 Mon Sep 17 00:00:00 2001 From: Tuna Date: Wed, 16 May 2018 11:01:45 +0700 Subject: [PATCH] fix bug: only cancel mining mode, keep node alive --- cmd/tomo/main.go | 3 ++- consensus/clique/clique.go | 6 ++---- eth/backend.go | 10 ++++++---- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/cmd/tomo/main.go b/cmd/tomo/main.go index f5c397310c..4daa19bb06 100644 --- a/cmd/tomo/main.go +++ b/cmd/tomo/main.go @@ -295,7 +295,8 @@ func startNode(ctx *cli.Context, stack *node.Node) { if ok, err := ethereum.ValidateMiner(); err != nil { utils.Fatalf("Can't verify validator permission: %v", err) } else if !ok { - utils.Fatalf("Only validator can mine blocks") + log.Info("Only validator can mine blocks. Cancel mining on this node") + return } // Use a reduced number of threads if requested diff --git a/consensus/clique/clique.go b/consensus/clique/clique.go index 1157ab00a3..4def588dfa 100644 --- a/consensus/clique/clique.go +++ b/consensus/clique/clique.go @@ -369,10 +369,8 @@ func (c *Clique) verifyCascadingFields(chain consensus.ChainReader, header *type func (c *Clique) GetSnapshot(chain consensus.ChainReader, header *types.Header) (*Snapshot, error) { number := header.Number.Uint64() - if number == 0 { - return nil, nil - } - snap, err := c.snapshot(chain, number-1, header.ParentHash, nil) + log.Trace("take snapshot", "number", number, "hash", header.Hash()) + snap, err := c.snapshot(chain, number, header.Hash(), nil) if err != nil { return nil, err } diff --git a/eth/backend.go b/eth/backend.go index 11e95c1d74..1908a38a22 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -339,17 +339,19 @@ func (s *Ethereum) ValidateMiner() (bool, error) { if err != nil { return false, err } - if c, ok := s.engine.(*clique.Clique); !ok { - return false, fmt.Errorf("Only verify miners in Clique protocol") - } else { + if s.chainConfig.Clique != nil { //check if miner's wallet is in set of validators + c := s.engine.(*clique.Clique) snap, err := c.GetSnapshot(s.blockchain, s.blockchain.CurrentHeader()) if err != nil { return false, fmt.Errorf("Can't verify miner: %v", err) } if _, authorized := snap.Signers[eb]; !authorized { - return false, fmt.Errorf("This miner doesn't belong to set of validators") + //This miner doesn't belong to set of validators + return false, nil } + } else { + return false, fmt.Errorf("Only verify miners in Clique protocol") } return true, nil }