diff --git a/consensus/parlia/parlia.go b/consensus/parlia/parlia.go index a92c2976f5..9cdf07e5ad 100644 --- a/consensus/parlia/parlia.go +++ b/consensus/parlia/parlia.go @@ -1145,7 +1145,11 @@ func backOffTime(snap *Snapshot, val common.Address) uint64 { if snap.inturn(val) { return 0 } else { - dis := snap.distanceToInTurn(val) + idx := snap.indexOfVal(val) + if idx < 0 { + // The backOffTime does not matter when a validator is not authorized. + return 0 + } s := rand.NewSource(int64(snap.Number)) r := rand.New(s) n := len(snap.Validators) @@ -1156,7 +1160,7 @@ func backOffTime(snap *Snapshot, val common.Address) uint64 { r.Shuffle(n, func(i, j int) { backOffSteps[i], backOffSteps[j] = backOffSteps[j], backOffSteps[i] }) - delay := initialBackOffTime + backOffSteps[dis]*wiggleTime + delay := initialBackOffTime + backOffSteps[idx]*wiggleTime return delay } } diff --git a/consensus/parlia/snapshot.go b/consensus/parlia/snapshot.go index 0d361ad53f..bd944c3bfa 100644 --- a/consensus/parlia/snapshot.go +++ b/consensus/parlia/snapshot.go @@ -216,18 +216,14 @@ func (s *Snapshot) inturn(validator common.Address) bool { return validators[offset] == validator } -func (s *Snapshot) distanceToInTurn(validator common.Address) uint64 { +func (s *Snapshot) indexOfVal(validator common.Address) int { validators := s.validators() - offset := (s.Number + 1) % uint64(len(validators)) - idx := uint64(0) - for idx < uint64(len(validator)) && validators[idx] != validator { - idx++ - } - if offset > idx { - return uint64(len(validators)) + idx - offset - } else { - return idx - offset + for idx, val := range validators { + if val == validator { + return idx + } } + return -1 } func (s *Snapshot) supposeValidator() common.Address { diff --git a/params/config.go b/params/config.go index 3aebf0b3b6..0c81c2c69f 100644 --- a/params/config.go +++ b/params/config.go @@ -242,7 +242,7 @@ var ( PetersburgBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0), - RamanujanBlock: big.NewInt(317974), + RamanujanBlock: big.NewInt(400), Parlia: &ParliaConfig{ Period: 3, Epoch: 200,