update: kitabu confs

This commit is contained in:
2022-01-31 15:19:49 +03:00
parent 43535882dc
commit 616c6c6344
3 changed files with 294 additions and 45 deletions

View File

@@ -1,93 +1,85 @@
// Author: Mohamed Sohail <mohamedsohailazim@gmail.com>
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.6.12;
pragma solidity >= 0.6.12;
contract KitabuValidators {
address constant SYSTEM_ADDRESS =
0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE;
address public admissionController =
0x9F57B4A25638F3bdfFcB1F3d2902860601a1Aa65;
address constant SYSTEM_ADDRESS = 0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE;
address public admissionController = 0x9F57B4A25638F3bdfFcB1F3d2902860601a1Aa65;
address[] bootstrapValidators = [
0x7c5a36Cb43fC87fbB1de46eb6Cfd231c2ADe147b
];
address[] validators;
bool public finalized;
mapping(address => uint256) validatorSetIndex;
event NewAdmissionController(
address indexed old,
address indexed newController
);
event NewAdmissionController(address indexed old, address indexed newController);
event InitiateChange(bytes32 indexed parentHash, address[] newSet);
event ChangeFinalized(address[] currentSet);
modifier onlySystemChange() {
modifier onlySystemChange {
require(msg.sender == SYSTEM_ADDRESS);
_;
}
}
modifier alreadyFinalized() {
modifier alreadyFinalized {
require(finalized);
_;
}
}
modifier onlyAdmissionController() {
modifier onlyAdmissionController {
require(msg.sender == admissionController);
_;
}
}
constructor() public {
validators.push(admissionController);
validatorSetIndex[admissionController] = 0;
for (uint i = 0; i < bootstrapValidators.length; i++) {
validators.push(bootstrapValidators[i]);
validatorSetIndex[bootstrapValidators[i]] = i;
}
finalized = true;
}
function setNewAdmissionController(address newController)
public
onlyAdmissionController
{
function setNewAdmissionController(address newController) public onlyAdmissionController {
emit NewAdmissionController(admissionController, newController);
admissionController = newController;
}
function getValidators() public view returns (address[] memory) {
return validators;
}
function getValidators() public view returns(address[] memory) {
return validators;
}
function initiateChange() private {
finalized = false;
emit InitiateChange(blockhash(block.number - 1), getValidators());
}
finalized = false;
emit InitiateChange(blockhash(block.number - 1), getValidators());
}
function finalizeChange() public onlySystemChange {
function finalizeChange() public {
finalized = true;
emit ChangeFinalized(validators);
}
function addValidator(address newValidator)
public
onlyAdmissionController
alreadyFinalized
{
function addValidator(address newValidator) public onlyAdmissionController alreadyFinalized{
validators.push(newValidator);
validatorSetIndex[newValidator] = validators.length - 1;
initiateChange();
}
initiateChange();
}
function removeValidator(address exValidator)
public
onlyAdmissionController
alreadyFinalized
{
function removeValidator(address exValidator) public onlyAdmissionController alreadyFinalized{
orderedRemoval(validatorSetIndex[exValidator]);
delete validatorSetIndex[exValidator];
initiateChange();
}
}
function orderedRemoval(uint256 index) private {
for (uint256 i = index; i < validators.length - 1; i++) {
validators[i] = validators[i + 1];
function orderedRemoval(uint index) private {
for(uint i = index; i < validators.length-1; i++){
validators[i] = validators[i+1];
}
validators.pop();
}