CapperRole.sol 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. pragma solidity ^0.5.0;
  2. import "../../GSN/Context.sol";
  3. import "../Roles.sol";
  4. contract CapperRole is Context {
  5. using Roles for Roles.Role;
  6. event CapperAdded(address indexed account);
  7. event CapperRemoved(address indexed account);
  8. Roles.Role private _cappers;
  9. constructor () internal {
  10. _addCapper(_msgSender());
  11. }
  12. modifier onlyCapper() {
  13. require(isCapper(_msgSender()), "CapperRole: caller does not have the Capper role");
  14. _;
  15. }
  16. function isCapper(address account) public view returns (bool) {
  17. return _cappers.has(account);
  18. }
  19. function addCapper(address account) public onlyCapper {
  20. _addCapper(account);
  21. }
  22. function renounceCapper() public {
  23. _removeCapper(_msgSender());
  24. }
  25. function _addCapper(address account) internal {
  26. _cappers.add(account);
  27. emit CapperAdded(account);
  28. }
  29. function _removeCapper(address account) internal {
  30. _cappers.remove(account);
  31. emit CapperRemoved(account);
  32. }
  33. }