interface IDelegation { struct DelegateAdd { uint32 nonce; address delegateAddr; Role role; } struct DelegateRemove { uint32 nonce; address delegateAddr; } /** * @dev Enumerated Permissions * Roles have different permissions * APPEND ONLY */ enum Permission { NOz, ANNOUNCE, OWNERSHIP_TRANSFER, DELEGATE_ADD, DELEGATE_REMOVE } /** * @dev Enumerated Roles * Roles have different permissions * APPEND ONLY */ enum Role { NONE, OWNER, ANNOUNCER } event AddDelegate(address indexed delegate, Role role); event RemoveDelegate(address indexed delegate); /** * @dev Add or change permissions for delegate */ function delegate(address newDelegate, Role role) external; /** * @dev Add or change permissions for delegate by EIP-712 signature */ function delegateBySig( address newDelegatee, Role role, uint256 nonce, uint256 expiryBlock, uint8 v, bytes32 r, bytes32 s, DelegateAdd calldata change ) external; /** * @dev Remove Delegate */ function delegateRemove(address address_) external; /** * @dev Remove delegate by EIP-712 signature */ function delegateRemoveBySig( address delegatee, uint256 nonce, uint256 expiryBlock, uint8 v, bytes32 r, bytes32 s, DelegateRemove calldata change ) external; /** * @dev Checks to see if address_ is authorized with the given permission */ function isAuthorizedTo( address address_, Permission permission, uint256 blockNumber ) external view returns (bool); function getNonceForDelegate(address addr) external view returns (uint32); }
0.4.18