54 lines
1.9 KiB
Solidity
54 lines
1.9 KiB
Solidity
pragma solidity 0.4.24;
|
|
|
|
import "./BaseBridgeValidators.sol";
|
|
|
|
contract BridgeValidators is BaseBridgeValidators {
|
|
function initialize(uint256 _requiredSignatures, address[] _initialValidators, address _owner)
|
|
external
|
|
onlyRelevantSender
|
|
returns (bool)
|
|
{
|
|
require(!isInitialized());
|
|
_setOwner(_owner);
|
|
require(_requiredSignatures != 0);
|
|
require(_initialValidators.length >= _requiredSignatures);
|
|
|
|
for (uint256 i = 0; i < _initialValidators.length; i++) {
|
|
require(_initialValidators[i] != address(0) && _initialValidators[i] != F_ADDR);
|
|
require(!isValidator(_initialValidators[i]));
|
|
|
|
if (i == 0) {
|
|
setNextValidator(F_ADDR, _initialValidators[i]);
|
|
if (_initialValidators.length == 1) {
|
|
setNextValidator(_initialValidators[i], F_ADDR);
|
|
}
|
|
} else if (i == _initialValidators.length - 1) {
|
|
setNextValidator(_initialValidators[i - 1], _initialValidators[i]);
|
|
setNextValidator(_initialValidators[i], F_ADDR);
|
|
} else {
|
|
setNextValidator(_initialValidators[i - 1], _initialValidators[i]);
|
|
}
|
|
|
|
emit ValidatorAdded(_initialValidators[i]);
|
|
}
|
|
|
|
setValidatorCount(_initialValidators.length);
|
|
uintStorage[REQUIRED_SIGNATURES] = _requiredSignatures;
|
|
uintStorage[DEPLOYED_AT_BLOCK] = block.number;
|
|
setInitialize();
|
|
emit RequiredSignaturesChanged(_requiredSignatures);
|
|
|
|
return isInitialized();
|
|
}
|
|
|
|
function addValidator(address _validator) external onlyOwner {
|
|
_addValidator(_validator);
|
|
emit ValidatorAdded(_validator);
|
|
}
|
|
|
|
function removeValidator(address _validator) external onlyOwner {
|
|
_removeValidator(_validator);
|
|
emit ValidatorRemoved(_validator);
|
|
}
|
|
}
|