all files / contracts/ Validator.sol

0% Statements 0/14
0% Branches 0/4
0% Functions 0/7
0% Lines 0/18
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56                                                                                                               
pragma solidity ^0.4.13;
 
contract Validator {
  address[] private _validatorArr;
	address[] private _pendingArr = [0x0a0F29a9B479d91F6D112B203C7D9dB0cb4CDb84];
	bool private _finalized = true;
 
  event InitiateChange(bytes32 indexed _parent_hash, address[] _new_set);
  event ChangeFinalized(address[] current_set);
 
  modifier finalized {
    require(_finalized);
    _;
  }
 
	function Validator() public {
		_validatorArr = _pendingArr;
	}
 
	// Called on every block to update node validator list.
  function getValidators() public constant returns (address[]) {
		return _validatorArr;
	}
 
	// Expand the list of validators.
	function addValidator(address newValidator) public finalized {
    _pendingArr.push(newValidator);
    initiateChange();
  }
 
	// Remove a validator from the list.
  function removeValidator(address validator) public finalized {
    for (uint i = 0; i < _pendingArr.length; i++) {
      if (_pendingArr[i] == validator) {
        for (uint j = i; j < _pendingArr.length - 1; j++) {
            _pendingArr[j] = _pendingArr[j + 1];
        }
        delete _pendingArr[_pendingArr.length - 1];
        _pendingArr.length--;
        initiateChange();
      }
    }
  }
 
  function initiateChange() private {
		_finalized = false;
    InitiateChange(block.blockhash(block.number - 1), _pendingArr);
  }
 
	function finalizeChange() public {
    _validatorArr = _pendingArr;
    _finalized = true;
    ChangeFinalized(_validatorArr);
  }
}