diff --git a/dpos/manager/dposmanager.go b/dpos/manager/dposmanager.go index 4863bce4a..e5e6412f6 100644 --- a/dpos/manager/dposmanager.go +++ b/dpos/manager/dposmanager.go @@ -356,6 +356,8 @@ func (d *DPOSManager) OnResponseBlocks(id dpeer.PID, blockConfirms []*types.Dpos } func (d *DPOSManager) OnRequestConsensus(id dpeer.PID, height uint32) { + // only use reset view + return if !d.isCurrentArbiter() { return } @@ -400,6 +402,8 @@ func (d *DPOSManager) OnRecoverTimeout() { } func (d *DPOSManager) recoverAbnormalState() bool { + // only use reset view + return false if d.recoverStarted { return false } @@ -439,6 +443,8 @@ func (d *DPOSManager) recoverAbnormalState() bool { } func (d *DPOSManager) DoRecover() { + // only use reset view + return if d.consensus.viewOffset == 0 { log.Info("no need to recover view offset") return @@ -506,6 +512,10 @@ func (d *DPOSManager) OnChangeView() { log.Info("[TryChangeView] succeed") } + if d.consensus.currentHeight >= d.chainParams.DPoSConfiguration.ChangeViewV1Height { + return + } + if d.consensus.viewOffset >= maxViewOffset { m := &dmsg.ResetView{ Sponsor: d.GetPublicKey(), @@ -714,6 +724,9 @@ func (d *DPOSManager) OnResponseRevertToDPOSTxReceived( } func (d *DPOSManager) OnResponseResetViewReceived(msg *dmsg.ResetView) { + if d.consensus.currentHeight >= d.chainParams.DPoSConfiguration.ChangeViewV1Height { + return + } if !d.isCurrentArbiter() { return diff --git a/dpos/manager/dposondutyhandler.go b/dpos/manager/dposondutyhandler.go index aaf729b85..8b1b31150 100644 --- a/dpos/manager/dposondutyhandler.go +++ b/dpos/manager/dposondutyhandler.go @@ -48,16 +48,16 @@ func (h *DPOSOnDutyHandler) ProcessProposal(id peer.PID, p *payload.DPOSProposal func (h *DPOSOnDutyHandler) ChangeView(firstBlockHash *common.Uint256) { - if !h.tryCreateInactiveArbitratorsTx() { - b, ok := h.cfg.Manager.GetBlockCache().TryGetValue(*firstBlockHash) - if !ok { - log.Info("[OnViewChanged] get block failed for proposal") - } else { - log.Info("[OnViewChanged] start proposal") - h.proposalDispatcher.CleanProposals(true) - h.proposalDispatcher.StartProposal(b) - } + // if !h.tryCreateInactiveArbitratorsTx() { + b, ok := h.cfg.Manager.GetBlockCache().TryGetValue(*firstBlockHash) + if !ok { + log.Info("[OnViewChanged] get block failed for proposal") + } else { + log.Info("[OnViewChanged] start proposal") + h.proposalDispatcher.CleanProposals(true) + h.proposalDispatcher.StartProposal(b) } + // } } func (h *DPOSOnDutyHandler) TryStartNewConsensus(b *types.Block) bool { diff --git a/dpos/manager/proposaldispatcher.go b/dpos/manager/proposaldispatcher.go index 236086233..1ad0d95cf 100644 --- a/dpos/manager/proposaldispatcher.go +++ b/dpos/manager/proposaldispatcher.go @@ -681,7 +681,7 @@ func (p *ProposalDispatcher) OnResponseResetViewReceived(msg *dmsg.ResetView) { log.Info("[OnResponseResetViewReceived] signer:", common.BytesToHexString(signer)) if len(p.resetViewRequests) >= p.cfg.Arbitrators.GetArbitersMajorityCount() { - log.Info("[OnResponseResetViewReceived] signer:", common.BytesToHexString(signer)) + log.Info("[OnResponseResetViewReceived] enough signers:", len(p.resetViewRequests)) // do reset p.resetConsensus(p.finishedHeight) p.resetViewRequests = make(map[string]struct{}, 0)