fudongbai 5 жил өмнө
parent
commit
4f431e0843

+ 6 - 2
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
 	}
 }

+ 6 - 10
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 {

+ 1 - 1
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,