fix bug: only cancel mining mode, keep node alive

This commit is contained in:
Tuna 2018-05-16 11:01:45 +07:00
parent f1cf546def
commit 0953671747
3 changed files with 10 additions and 9 deletions

View file

@ -295,7 +295,8 @@ func startNode(ctx *cli.Context, stack *node.Node) {
if ok, err := ethereum.ValidateMiner(); err != nil { if ok, err := ethereum.ValidateMiner(); err != nil {
utils.Fatalf("Can't verify validator permission: %v", err) utils.Fatalf("Can't verify validator permission: %v", err)
} else if !ok { } 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 // Use a reduced number of threads if requested

View file

@ -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) { func (c *Clique) GetSnapshot(chain consensus.ChainReader, header *types.Header) (*Snapshot, error) {
number := header.Number.Uint64() number := header.Number.Uint64()
if number == 0 { log.Trace("take snapshot", "number", number, "hash", header.Hash())
return nil, nil snap, err := c.snapshot(chain, number, header.Hash(), nil)
}
snap, err := c.snapshot(chain, number-1, header.ParentHash, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View file

@ -339,17 +339,19 @@ func (s *Ethereum) ValidateMiner() (bool, error) {
if err != nil { if err != nil {
return false, err return false, err
} }
if c, ok := s.engine.(*clique.Clique); !ok { if s.chainConfig.Clique != nil {
return false, fmt.Errorf("Only verify miners in Clique protocol")
} else {
//check if miner's wallet is in set of validators //check if miner's wallet is in set of validators
c := s.engine.(*clique.Clique)
snap, err := c.GetSnapshot(s.blockchain, s.blockchain.CurrentHeader()) snap, err := c.GetSnapshot(s.blockchain, s.blockchain.CurrentHeader())
if err != nil { if err != nil {
return false, fmt.Errorf("Can't verify miner: %v", err) return false, fmt.Errorf("Can't verify miner: %v", err)
} }
if _, authorized := snap.Signers[eb]; !authorized { 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 return true, nil
} }