From d3874dffa437e7a38eecc35c118ed90a0e860c27 Mon Sep 17 00:00:00 2001 From: "mark.lin" Date: Wed, 24 May 2017 14:14:35 +0800 Subject: [PATCH] consensus/pbft: start engine failed if i'm not in validator set --- consensus/pbft/backends/simple/engine.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/consensus/pbft/backends/simple/engine.go b/consensus/pbft/backends/simple/engine.go index 183bdbe3ec9b..d34e82ec596e 100644 --- a/consensus/pbft/backends/simple/engine.go +++ b/consensus/pbft/backends/simple/engine.go @@ -41,6 +41,8 @@ var ( errUnknownBlock = errors.New("unknown block") // errUnauthorized is returned if a header is signed by a non authorized entity. errUnauthorized = errors.New("unauthorized") + // errNotInValidatorSet is returned if I'm not in validator set but try to start engine + errNotInValidatorSet = errors.New("not in validator set") // errInvalidDifficulty is returned if the difficulty of a block is not 1 errInvalidDifficulty = errors.New("invalid difficulty") // errNotProposer is returned when I'm not a proposer @@ -435,6 +437,9 @@ func (sb *simpleBackend) Start(chain consensus.ChainReader, inserter func(block if err := sb.initValidatorSet(chain); err != nil { return err } + if _, v := sb.valSet.GetByAddress(sb.address); v == nil { + return errNotInValidatorSet + } sb.chain = chain sb.inserter = inserter sb.core = pbftCore.New(sb, sb.config) @@ -455,7 +460,10 @@ func (sb *simpleBackend) Start(chain consensus.ChainReader, inserter func(block // Stop implements consensus.PBFT.Stop func (sb *simpleBackend) Stop() error { - return sb.core.Stop() + if sb.core != nil { + return sb.core.Stop() + } + return nil } func (sb *simpleBackend) initValidatorSet(chain consensus.ChainReader) error {