From 4e8addb940a63a918a419f932fa3dd1585fb9d21 Mon Sep 17 00:00:00 2001 From: gothery001 Date: Wed, 13 Apr 2022 18:11:07 +0800 Subject: [PATCH 1/2] fix: incorrectly modified `initValidatorExtraSet` --- contracts/BSCValidatorSet.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/BSCValidatorSet.sol b/contracts/BSCValidatorSet.sol index f0a7c4a4..3e7800ac 100644 --- a/contracts/BSCValidatorSet.sol +++ b/contracts/BSCValidatorSet.sol @@ -107,10 +107,10 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica } modifier initValidatorExtraSet() { - uint256 validatorsNum = currentValidatorSet.length; - if (validatorsNum == 0) { + if (validatorExtraSet.length == 0) { ValidatorExtra memory validatorExtra; // init validatorExtraSet + uint256 validatorsNum = currentValidatorSet.length; for (uint i; i < validatorsNum; ++i) { validatorExtraSet.push(validatorExtra); } From 9ca4be1ace91d616c98206b23aae28f55209712c Mon Sep 17 00:00:00 2001 From: gothery001 Date: Wed, 13 Apr 2022 18:18:44 +0800 Subject: [PATCH 2/2] chore: sync template code --- contracts/BSCValidatorSet.template | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/contracts/BSCValidatorSet.template b/contracts/BSCValidatorSet.template index 9796964e..82f15eab 100644 --- a/contracts/BSCValidatorSet.template +++ b/contracts/BSCValidatorSet.template @@ -107,10 +107,10 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica } modifier initValidatorExtraSet() { - uint256 validatorsNum = currentValidatorSet.length; - if (validatorsNum == 0) { + if (validatorExtraSet.length == 0) { ValidatorExtra memory validatorExtra; // init validatorExtraSet + uint256 validatorsNum = currentValidatorSet.length; for (uint i; i < validatorsNum; ++i) { validatorExtraSet.push(validatorExtra); } @@ -494,6 +494,8 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica || numOfMaintaining >= maxNumOfMaintaining // - 2. check if reached upper limit || !isWorkingValidator(index) // - 3. check if not working(not jailed and not maintaining) || validatorExtraSet[index].enterMaintenanceHeight > 0 // - 5. check if has Maintained during current 24-hour period + // current validators are selected every 24 hours(from 00:00:00 UTC to 23:59:59 UTC) + // for more details, refer to https://github.com/bnb-chain/docs-site/blob/master/docs/smart-chain/validator/Binance%20Smart%20Chain%20Validator%20FAQs%20-%20Updated.md || getValidators().length <= 1 // - 6. check num of remaining working validators ) { return false; @@ -735,7 +737,7 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica } // record the jailed validator in validatorSet - for (uint k = 0; k < _validatorSet.length; ++k) { + for (uint k; k < _validatorSet.length; ++k) { if (_validatorSet[k].consensusAddress == validator) { _validatorSet[k].jailed = true; numOfFelony++; @@ -747,7 +749,7 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica // 2. get unjailed validators from validatorSet unjailedValidatorSet = new Validator[](_validatorSet.length - numOfFelony); i = 0; - for (uint index = 0; index < _validatorSet.length; ++index) { + for (uint index; index < _validatorSet.length; ++index) { if (!_validatorSet[index].jailed) { unjailedValidatorSet[i] = _validatorSet[index]; i++; @@ -816,7 +818,7 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica } else if (idx == 1) { RLPDecode.RLPItem[] memory items = iter.next().toList(); validatorSetPkg.validatorSet =new Validator[](items.length); - for (uint j = 0;j