SignerRole.sol 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. pragma solidity ^0.5.0;
  2. import "../../GSN/Context.sol";
  3. import "../Roles.sol";
  4. contract SignerRole is Context {
  5. using Roles for Roles.Role;
  6. event SignerAdded(address indexed account);
  7. event SignerRemoved(address indexed account);
  8. Roles.Role private _signers;
  9. constructor () internal {
  10. _addSigner(_msgSender());
  11. }
  12. modifier onlySigner() {
  13. require(isSigner(_msgSender()), "SignerRole: caller does not have the Signer role");
  14. _;
  15. }
  16. function isSigner(address account) public view returns (bool) {
  17. return _signers.has(account);
  18. }
  19. function addSigner(address account) public onlySigner {
  20. _addSigner(account);
  21. }
  22. function renounceSigner() public {
  23. _removeSigner(_msgSender());
  24. }
  25. function _addSigner(address account) internal {
  26. _signers.add(account);
  27. emit SignerAdded(account);
  28. }
  29. function _removeSigner(address account) internal {
  30. _signers.remove(account);
  31. emit SignerRemoved(account);
  32. }
  33. }