IAccessManager.sol 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.20;
  3. import {IManaged} from "./IManaged.sol";
  4. import {Time} from "../../utils/types/Time.sol";
  5. interface IAccessManager {
  6. enum AccessMode {
  7. Custom,
  8. Closed,
  9. Open
  10. }
  11. // Structure that stores the details for a group/account pair. This structures fit into a single slot.
  12. struct Access {
  13. // Timepoint at which the user gets the permission. If this is either 0, or in the future, the group permission
  14. // are not available. Should be checked using {Time-isSetAndPast}
  15. uint48 since;
  16. // delay for execution. Only applies to restricted() / relay() calls. This does not restrict access to
  17. // functions that use the `onlyGroup` modifier.
  18. Time.Delay delay;
  19. }
  20. // Structure that stores the details of a group, including:
  21. // - the members of the group
  22. // - the admin group (that can grant or revoke permissions)
  23. // - the guardian group (that can cancel operations targeting functions that need this group
  24. // - the grand delay
  25. struct Group {
  26. mapping(address user => Access access) members;
  27. uint256 admin;
  28. uint256 guardian;
  29. Time.Delay delay; // delay for granting
  30. }
  31. /**
  32. * @dev A delay operation was schedule.
  33. */
  34. event Scheduled(bytes32 operationId, address caller, address target, bytes data);
  35. /**
  36. * @dev A scheduled operation was executed.
  37. */
  38. event Executed(bytes32 operationId);
  39. /**
  40. * @dev A scheduled operation was canceled.
  41. */
  42. event Canceled(bytes32 operationId);
  43. event GroupLabel(uint256 indexed groupId, string label);
  44. event GroupGranted(uint256 indexed groupId, address indexed account, uint48 since, uint32 delay);
  45. event GroupRevoked(uint256 indexed groupId, address indexed account);
  46. event GroupExecutionDelayUpdate(uint256 indexed groupId, address indexed account, uint32 delay, uint48 from);
  47. event GroupAdminChanged(uint256 indexed groupId, uint256 indexed admin);
  48. event GroupGuardianChanged(uint256 indexed groupId, uint256 indexed guardian);
  49. event GroupGrantDelayChanged(uint256 indexed groupId, uint32 delay, uint48 from);
  50. event AccessModeUpdated(address indexed target, AccessMode mode);
  51. event FunctionAllowedGroupUpdated(address indexed target, bytes4 selector, uint256 indexed groupId);
  52. error AccessManagerAlreadyScheduled(bytes32 operationId);
  53. error AccessManagerNotScheduled(bytes32 operationId);
  54. error AccessManagerNotReady(bytes32 operationId);
  55. error AccessManagerLockedGroup(uint256 groupId);
  56. error AccessManagerAcountAlreadyInGroup(uint256 groupId, address account);
  57. error AccessManagerAcountNotInGroup(uint256 groupId, address account);
  58. error AccessManagerBadConfirmation();
  59. error AccessControlUnauthorizedAccount(address msgsender, uint256 groupId);
  60. error AccessManagerUnauthorizedCall(address caller, address target, bytes4 selector);
  61. error AccessManagerCannotCancel(address msgsender, address caller, address target, bytes4 selector);
  62. function canCall(
  63. address caller,
  64. address target,
  65. bytes4 selector
  66. ) external view returns (bool allowed, uint32 delay);
  67. function getContractMode(address target) external view returns (AccessMode);
  68. function getFunctionAllowedGroup(address target, bytes4 selector) external view returns (uint256);
  69. function getGroupAdmin(uint256 group) external view returns (uint256);
  70. function getGroupGuardian(uint256 group) external view returns (uint256);
  71. function getGroupGrantDelay(uint256 groupId) external view returns (uint32);
  72. function getAccess(uint256 group, address account) external view returns (Access memory);
  73. function hasGroup(uint256 group, address account) external view returns (bool);
  74. function grantGroup(uint256 group, address account, uint32 executionDelay) external;
  75. function revokeGroup(uint256 group, address account) external;
  76. function renounceGroup(uint256 group, address callerConfirmation) external;
  77. function setExecuteDelay(uint256 group, address account, uint32 newDelay) external;
  78. function setGroupAdmin(uint256 group, uint256 admin) external;
  79. function setGroupGuardian(uint256 group, uint256 guardian) external;
  80. function setGrantDelay(uint256 group, uint32 newDelay) external;
  81. function setContractModeCustom(address target) external;
  82. function setContractModeOpen(address target) external;
  83. function setContractModeClosed(address target) external;
  84. function schedule(address target, bytes calldata data) external returns (bytes32);
  85. function cancel(address caller, address target, bytes calldata data) external;
  86. function relay(address target, bytes calldata data) external payable;
  87. function updateAuthority(IManaged target, address newAuthority) external;
  88. }