Guest User

Untitled

a guest
Jan 22nd, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. contract PoANoEvents {
  2. event InitiateChange(bytes32 indexed _parent_hash, address[] _new_set);
  3. address public keysManager;
  4. address[] public validators;
  5. mapping(address => uint) public vIndex;
  6. mapping(address => bool) public validV;
  7.  
  8. modifier onlyKeysManager() {
  9. require(msg.sender == keysManager);
  10. _;
  11. }
  12. function PoANoEvents(address master, address _keysManager){
  13. addValidator(master, true);
  14. keysManager = _keysManager;
  15. }
  16.  
  17. function addValidator(address newValidator, bool shouldFireEvent) public onlyKeysManager {
  18. require(!validV[newValidator]);
  19. uint index = validators.length;
  20. validators.push(newValidator);
  21. vIndex[newValidator] = index;
  22. validV[newValidator] = true;
  23. if(shouldFireEvent) {
  24. fireEvent();
  25. }
  26. }
  27. function removeValidator(address oldValidator, bool shouldFireEvent) public onlyKeysManager {
  28. require(validV[oldValidator]);
  29. uint256 removedIndex = vIndex[oldValidator];
  30. // Can not remove the last validator.
  31. uint256 lastIndex = validators.length - 1;
  32. address lastValidator = validators[lastIndex];
  33. // Override the removed validator with the last one.
  34. validators[removedIndex] = lastValidator;
  35. // Update the index of the last validator.
  36. vIndex[lastValidator] = removedIndex;
  37. delete validators[lastIndex];
  38. validators.length--;
  39. validV[oldValidator] = false;
  40. if(shouldFireEvent){
  41. fireEvent();
  42. }
  43. }
  44.  
  45. function fireEvent() public {
  46. InitiateChange(block.blockhash(block.number - 1), validators);
  47. }
  48.  
  49. function swapKey(address newKey, address validator) public onlyKeysManager {
  50. removeValidator(validator, false);
  51. addValidator(newKey, false);
  52. fireEvent();
  53.  
  54. }
  55. function getValidators() public view returns(address[]) {
  56. return validators;
  57. }
  58. }
Add Comment
Please, Sign In to add comment