diff --git a/core/forkchoice.go b/core/forkchoice.go index bea7652fa..4e931ccf5 100644 --- a/core/forkchoice.go +++ b/core/forkchoice.go @@ -121,12 +121,19 @@ func (f *ForkChoice) ReorgNeeded(current *types.Header, extern *types.Header) (b if f.preserve != nil { currentPreserve, externPreserve = f.preserve(current), f.preserve(extern) } - doubleSign := (extern.Coinbase == current.Coinbase) - reorg = !currentPreserve && (externPreserve || - extern.Time < current.Time || - extern.Time == current.Time && - ((doubleSign && extern.Hash().Cmp(current.Hash()) < 0) || - (!doubleSign && f.rand.Float64() < 0.5))) + choiceRules := func() bool { + if extern.Time == current.Time { + doubleSign := (extern.Coinbase == current.Coinbase) + if doubleSign { + return extern.Hash().Cmp(current.Hash()) < 0 + } else { + return f.rand.Float64() < 0.5 + } + } else { + return extern.Time < current.Time + } + } + reorg = !currentPreserve && (externPreserve || choiceRules()) } return reorg, nil }