From fe3b97fd668ea3b5364089cd17d03b4b34dc88c3 Mon Sep 17 00:00:00 2001 From: JamesRay <66258875@qq.com> Date: Mon, 26 Nov 2018 21:03:08 +0800 Subject: [PATCH] It's better read from genDoc than from state.validators when appHeight==0 in replay (#2893) * optimize addProposalBlockPart * optimize addProposalBlockPart * if ProposalBlockParts and LockedBlockParts both exist,let LockedBlockParts overwrite ProposalBlockParts. * fix tryAddBlock * broadcast lockedBlockParts in higher priority * when appHeight==0, it's better fetch genDoc than state.validators. --- consensus/replay.go | 7 ++++++- types/part_set.go | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/consensus/replay.go b/consensus/replay.go index abc43eb57..c9a779e34 100644 --- a/consensus/replay.go +++ b/consensus/replay.go @@ -276,7 +276,12 @@ func (h *Handshaker) ReplayBlocks( // If appBlockHeight == 0 it means that we are at genesis and hence should send InitChain. if appBlockHeight == 0 { - nextVals := types.TM2PB.ValidatorUpdates(state.NextValidators) // state.Validators would work too. + validators := make([]*types.Validator, len(h.genDoc.Validators)) + for i, val := range h.genDoc.Validators { + validators[i] = types.NewValidator(val.PubKey, val.Power) + } + validatorSet := types.NewValidatorSet(validators) + nextVals := types.TM2PB.ValidatorUpdates(validatorSet) csParams := types.TM2PB.ConsensusParams(h.genDoc.ConsensusParams) req := abci.RequestInitChain{ Time: h.genDoc.GenesisTime, diff --git a/types/part_set.go b/types/part_set.go index af59851c9..a040258d1 100644 --- a/types/part_set.go +++ b/types/part_set.go @@ -200,6 +200,9 @@ func (ps *PartSet) Total() int { } func (ps *PartSet) AddPart(part *Part) (bool, error) { + if ps == nil { + return false, nil + } ps.mtx.Lock() defer ps.mtx.Unlock()