Skip to content

Commit 2932d71

Browse files
committed
fix(Validator): correct return of getValidators and getBlockProducers
1 parent 4441a94 commit 2932d71

File tree

8 files changed

+69
-17
lines changed

8 files changed

+69
-17
lines changed

contracts/interfaces/validator/info-fragments/IValidatorInfoV2.sol

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,22 @@ interface IValidatorInfoV2 {
2626
/**
2727
* @dev Returns the current validator list.
2828
*/
29-
function getValidators() external view returns (address[] memory _validatorList);
29+
function getValidators() external view returns (TConsensus[] memory validatorList);
30+
31+
/**
32+
* @dev Returns the ids of current validator list.
33+
*/
34+
function getValidatorIds() external view returns (address[] memory cids);
3035

3136
/**
3237
* @dev Returns the current block producer list.
3338
*/
34-
function getBlockProducers() external view returns (address[] memory);
39+
function getBlockProducers() external view returns (TConsensus[] memory consensusList);
40+
41+
/**
42+
* @dev Returns the ids current block producer list.
43+
*/
44+
function getBlockProducerIds() external view returns (address[] memory cids);
3545

3646
/**
3747
* @dev Returns whether the address is block producer or not.

contracts/mocks/validator/MockValidatorSet.sol

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ contract MockValidatorSet is
5959

6060
function epochOf(uint256 _block) external view override returns (uint256) {}
6161

62-
function getValidators() external view override returns (address[] memory) {}
62+
function getValidators() external view override returns (TConsensus[] memory) {}
63+
64+
function getValidatorIds() external view override returns (address[] memory) {}
6365

6466
function epochEndingAt(uint256 _block) external view override returns (bool) {}
6567

@@ -84,7 +86,9 @@ contract MockValidatorSet is
8486
return _numberOfBlocksInEpoch;
8587
}
8688

87-
function getBlockProducers() external view override returns (address[] memory) {}
89+
function getBlockProducers() external view override returns (TConsensus[] memory) {}
90+
91+
function getBlockProducerIds() external view override returns (address[] memory) {}
8892

8993
function isBlockProducer(TConsensus) external pure override returns (bool) {
9094
return true;
@@ -125,6 +129,10 @@ contract MockValidatorSet is
125129
return IProfile(getContract(ContractType.PROFILE)).getManyConsensus2Id(consensusAddrs);
126130
}
127131

132+
function __cid2cssBatch(address[] memory cids) internal view override returns (TConsensus[] memory) {
133+
return IProfile(getContract(ContractType.PROFILE)).getManyId2Consensus(cids);
134+
}
135+
128136
function execReleaseLockedFundForEmergencyExitRequest(
129137
address _candidateId,
130138
address payable _recipient

contracts/ronin/Maintenance.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ contract Maintenance is IMaintenance, HasContracts, HasValidatorDeprecated, Init
261261
* @inheritdoc IMaintenance
262262
*/
263263
function totalSchedule() public view override returns (uint256 count) {
264-
address[] memory validatorIds = IRoninValidatorSet(getContract(ContractType.VALIDATOR)).getValidators();
264+
address[] memory validatorIds = IRoninValidatorSet(getContract(ContractType.VALIDATOR)).getValidatorIds();
265265
unchecked {
266266
for (uint i = 0; i < validatorIds.length; i++) {
267267
if (_checkScheduledById(validatorIds[i])) {

contracts/ronin/validator/CandidateManager.sol

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ abstract contract CandidateManager is
107107
* @inheritdoc ICandidateManager
108108
*/
109109
function getValidatorCandidates() external view override returns (TConsensus[] memory) {
110-
return IProfile(getContract(ContractType.PROFILE)).getManyId2Consensus(_candidateIds);
110+
return __cid2cssBatch(getValidatorCandidateIds());
111111
}
112112

113113
/**
@@ -285,4 +285,7 @@ abstract contract CandidateManager is
285285

286286
/// @dev See {RoninValidatorSet-__css2cidBatch}
287287
function __css2cidBatch(TConsensus[] memory consensusAddrs) internal view virtual returns (address[] memory);
288+
289+
/// @dev See {RoninValidatorSet-__cid2cssBatch}
290+
function __cid2cssBatch(address[] memory cids) internal view virtual returns (TConsensus[] memory);
288291
}

contracts/ronin/validator/CoinbaseExecution.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ abstract contract CoinbaseExecution is
111111
uint256 newPeriod = _computePeriod(block.timestamp);
112112
bool periodEnding = _isPeriodEnding(newPeriod);
113113

114-
address[] memory currValidatorIds = getValidators();
114+
address[] memory currValidatorIds = getValidatorIds();
115115
address[] memory revokedCandidateIds;
116116
uint256 epoch = epochOf(block.number);
117117
uint256 nextEpoch = epoch + 1;
@@ -410,7 +410,7 @@ abstract contract CoinbaseExecution is
410410
++_i;
411411
}
412412
}
413-
emit BlockProducerSetUpdated(_newPeriod, _nextEpoch, getBlockProducers());
413+
emit BlockProducerSetUpdated(_newPeriod, _nextEpoch, getBlockProducerIds());
414414
}
415415

416416
/**

contracts/ronin/validator/EmergencyExit.sol

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,11 @@ abstract contract EmergencyExit is IEmergencyExit, RONTransferHelper, CandidateM
165165
TConsensus[] memory consensusAddrs
166166
) internal view virtual override(CandidateManager, CommonStorage) returns (address[] memory);
167167

168+
/// @dev See {RoninValidatorSet-__cid2cssBatch}
169+
function __cid2cssBatch(
170+
address[] memory cids
171+
) internal view virtual override(CandidateManager, ValidatorInfoStorageV2) returns (TConsensus[] memory);
172+
168173
/**
169174
* @dev See `setEmergencyExitLockedAmount.
170175
*/

contracts/ronin/validator/RoninValidatorSet.sol

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,13 @@ contract RoninValidatorSet is Initializable, CoinbaseExecution, SlashingExecutio
102102
) internal view override(EmergencyExit, CommonStorage) returns (address[] memory) {
103103
return IProfile(getContract(ContractType.PROFILE)).getManyConsensus2Id(consensusAddrs);
104104
}
105+
106+
/**
107+
* @dev Convert many id to corresponding consensus addresses from the Profile contract.
108+
*/
109+
function __cid2cssBatch(
110+
address[] memory cids
111+
) internal view override(EmergencyExit, ValidatorInfoStorageV2) returns (TConsensus[] memory) {
112+
return IProfile(getContract(ContractType.PROFILE)).getManyId2Consensus(cids);
113+
}
105114
}

contracts/ronin/validator/storage-fragments/ValidatorInfoStorageV2.sol

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,19 @@ abstract contract ValidatorInfoStorageV2 is IValidatorInfoV2, HasContracts, HasT
3737
/**
3838
* @inheritdoc IValidatorInfoV2
3939
*/
40-
function getValidators() public view override returns (address[] memory validatorList_) {
41-
validatorList_ = new address[](_validatorCount);
40+
function getValidators() public view override returns (TConsensus[] memory consensusList) {
41+
return __cid2cssBatch(getValidatorIds());
42+
}
43+
44+
/**
45+
* @inheritdoc IValidatorInfoV2
46+
*/
47+
function getValidatorIds() public view override returns (address[] memory cids) {
48+
cids = new address[](_validatorCount);
4249
address iValidator;
43-
for (uint i; i < validatorList_.length; ) {
50+
for (uint i; i < cids.length; ) {
4451
iValidator = _validatorIds[i];
45-
validatorList_[i] = iValidator;
52+
cids[i] = iValidator;
4653

4754
unchecked {
4855
++i;
@@ -53,13 +60,20 @@ abstract contract ValidatorInfoStorageV2 is IValidatorInfoV2, HasContracts, HasT
5360
/**
5461
* @inheritdoc IValidatorInfoV2
5562
*/
56-
function getBlockProducers() public view override returns (address[] memory result) {
57-
result = new address[](_validatorCount);
63+
function getBlockProducers() public view override returns (TConsensus[] memory consensusList) {
64+
return __cid2cssBatch(getBlockProducerIds());
65+
}
66+
67+
/**
68+
* @inheritdoc IValidatorInfoV2
69+
*/
70+
function getBlockProducerIds() public view override returns (address[] memory cids) {
71+
cids = new address[](_validatorCount);
5872
uint256 count = 0;
59-
for (uint i; i < result.length; ) {
73+
for (uint i; i < cids.length; ) {
6074
address validatorId = _validatorIds[i];
6175
if (_isBlockProducerById(validatorId)) {
62-
result[count++] = validatorId;
76+
cids[count++] = validatorId;
6377
}
6478

6579
unchecked {
@@ -68,7 +82,7 @@ abstract contract ValidatorInfoStorageV2 is IValidatorInfoV2, HasContracts, HasT
6882
}
6983

7084
assembly {
71-
mstore(result, count)
85+
mstore(cids, count)
7286
}
7387
}
7488

@@ -146,4 +160,7 @@ abstract contract ValidatorInfoStorageV2 is IValidatorInfoV2, HasContracts, HasT
146160

147161
/// @dev See {RoninValidatorSet-__css2cidBatch}
148162
function __css2cidBatch(TConsensus[] memory consensusAddrs) internal view virtual returns (address[] memory);
163+
164+
/// @dev See {RoninValidatorSet-__cid2cssBatch}
165+
function __cid2cssBatch(address[] memory cids) internal view virtual returns (TConsensus[] memory);
149166
}

0 commit comments

Comments
 (0)