fix index out of range

This commit is contained in:
fudongbai 2020-08-10 10:54:14 +08:00
parent 85ebea9e8c
commit 4f431e0843
3 changed files with 13 additions and 13 deletions

View File

@ -1145,7 +1145,11 @@ func backOffTime(snap *Snapshot, val common.Address) uint64 {
if snap.inturn(val) { if snap.inturn(val) {
return 0 return 0
} else { } 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)) s := rand.NewSource(int64(snap.Number))
r := rand.New(s) r := rand.New(s)
n := len(snap.Validators) n := len(snap.Validators)
@ -1156,7 +1160,7 @@ func backOffTime(snap *Snapshot, val common.Address) uint64 {
r.Shuffle(n, func(i, j int) { r.Shuffle(n, func(i, j int) {
backOffSteps[i], backOffSteps[j] = backOffSteps[j], backOffSteps[i] backOffSteps[i], backOffSteps[j] = backOffSteps[j], backOffSteps[i]
}) })
delay := initialBackOffTime + backOffSteps[dis]*wiggleTime delay := initialBackOffTime + backOffSteps[idx]*wiggleTime
return delay return delay
} }
} }

View File

@ -216,18 +216,14 @@ func (s *Snapshot) inturn(validator common.Address) bool {
return validators[offset] == validator return validators[offset] == validator
} }
func (s *Snapshot) distanceToInTurn(validator common.Address) uint64 { func (s *Snapshot) indexOfVal(validator common.Address) int {
validators := s.validators() validators := s.validators()
offset := (s.Number + 1) % uint64(len(validators)) for idx, val := range validators {
idx := uint64(0) if val == validator {
for idx < uint64(len(validator)) && validators[idx] != validator { return idx
idx++ }
}
if offset > idx {
return uint64(len(validators)) + idx - offset
} else {
return idx - offset
} }
return -1
} }
func (s *Snapshot) supposeValidator() common.Address { func (s *Snapshot) supposeValidator() common.Address {

View File

@ -242,7 +242,7 @@ var (
PetersburgBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0),
IstanbulBlock: big.NewInt(0), IstanbulBlock: big.NewInt(0),
MuirGlacierBlock: big.NewInt(0), MuirGlacierBlock: big.NewInt(0),
RamanujanBlock: big.NewInt(317974), RamanujanBlock: big.NewInt(400),
Parlia: &ParliaConfig{ Parlia: &ParliaConfig{
Period: 3, Period: 3,
Epoch: 200, Epoch: 200,