@venusprotocol/governance-contracts 2.4.0 → 2.5.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/artifacts/@layerzerolabs/solidity-examples/contracts/libraries/BytesLib.sol/BytesLib.dbg.json +1 -1
  2. package/artifacts/@layerzerolabs/solidity-examples/contracts/libraries/ExcessivelySafeCall.sol/ExcessivelySafeCall.dbg.json +1 -1
  3. package/artifacts/@layerzerolabs/solidity-examples/contracts/lzApp/LzApp.sol/LzApp.dbg.json +1 -1
  4. package/artifacts/@layerzerolabs/solidity-examples/contracts/lzApp/NonblockingLzApp.sol/NonblockingLzApp.dbg.json +1 -1
  5. package/artifacts/@layerzerolabs/solidity-examples/contracts/lzApp/interfaces/ILayerZeroEndpoint.sol/ILayerZeroEndpoint.dbg.json +1 -1
  6. package/artifacts/@layerzerolabs/solidity-examples/contracts/lzApp/interfaces/ILayerZeroReceiver.sol/ILayerZeroReceiver.dbg.json +1 -1
  7. package/artifacts/@layerzerolabs/solidity-examples/contracts/lzApp/interfaces/ILayerZeroUserApplicationConfig.sol/ILayerZeroUserApplicationConfig.dbg.json +1 -1
  8. package/artifacts/@layerzerolabs/solidity-examples/contracts/lzApp/libs/LzLib.sol/LzLib.dbg.json +1 -1
  9. package/artifacts/@layerzerolabs/solidity-examples/contracts/lzApp/mocks/LZEndpointMock.sol/LZEndpointMock.dbg.json +1 -1
  10. package/artifacts/@openzeppelin/contracts/access/AccessControl.sol/AccessControl.dbg.json +1 -1
  11. package/artifacts/@openzeppelin/contracts/access/IAccessControl.sol/IAccessControl.dbg.json +1 -1
  12. package/artifacts/@openzeppelin/contracts/access/Ownable.sol/Ownable.dbg.json +1 -1
  13. package/artifacts/@openzeppelin/contracts/security/Pausable.sol/Pausable.dbg.json +1 -1
  14. package/artifacts/@openzeppelin/contracts/security/ReentrancyGuard.sol/ReentrancyGuard.dbg.json +1 -1
  15. package/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json +1 -1
  16. package/artifacts/@openzeppelin/contracts/utils/Strings.sol/Strings.dbg.json +1 -1
  17. package/artifacts/@openzeppelin/contracts/utils/introspection/ERC165.sol/ERC165.dbg.json +1 -1
  18. package/artifacts/@openzeppelin/contracts/utils/introspection/IERC165.sol/IERC165.dbg.json +1 -1
  19. package/artifacts/@openzeppelin/contracts/utils/math/Math.sol/Math.dbg.json +1 -1
  20. package/artifacts/@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol/Ownable2StepUpgradeable.dbg.json +1 -1
  21. package/artifacts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.dbg.json +1 -1
  22. package/artifacts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.dbg.json +1 -1
  23. package/artifacts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.dbg.json +1 -1
  24. package/artifacts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.dbg.json +1 -1
  25. package/artifacts/build-info/{d2df901c99f2b9e01cfffb9042af258b.json → 55c66c9e0f80b7f400934081cbca14cd.json} +1 -1
  26. package/artifacts/contracts/Cross-chain/BaseOmnichainControllerDest.sol/BaseOmnichainControllerDest.dbg.json +1 -1
  27. package/artifacts/contracts/Cross-chain/BaseOmnichainControllerSrc.sol/BaseOmnichainControllerSrc.dbg.json +1 -1
  28. package/artifacts/contracts/Cross-chain/OmnichainExecutorOwner.sol/OmnichainExecutorOwner.dbg.json +1 -1
  29. package/artifacts/contracts/Cross-chain/OmnichainGovernanceExecutor.sol/OmnichainGovernanceExecutor.dbg.json +1 -1
  30. package/artifacts/contracts/Cross-chain/OmnichainProposalSender.sol/OmnichainProposalSender.dbg.json +1 -1
  31. package/artifacts/contracts/Cross-chain/interfaces/IOmnichainGovernanceExecutor.sol/IOmnichainGovernanceExecutor.dbg.json +1 -1
  32. package/artifacts/contracts/Cross-chain/interfaces/ITimelock.sol/ITimelock.dbg.json +1 -1
  33. package/artifacts/contracts/Governance/AccessControlManager.sol/AccessControlManager.dbg.json +1 -1
  34. package/artifacts/contracts/Governance/AccessControlledV8.sol/AccessControlledV8.dbg.json +1 -1
  35. package/artifacts/contracts/Governance/IAccessControlManagerV8.sol/IAccessControlManagerV8.dbg.json +1 -1
  36. package/artifacts/contracts/Governance/TimelockV8.sol/TimelockV8.dbg.json +1 -1
  37. package/artifacts/contracts/Utils/ACMCommandsAggregator.sol/ACMCommandsAggregator.dbg.json +4 -0
  38. package/artifacts/contracts/Utils/ACMCommandsAggregator.sol/ACMCommandsAggregator.json +251 -0
  39. package/artifacts/contracts/test/MockAccessTest.sol/MockAccessTest.dbg.json +1 -1
  40. package/artifacts/contracts/test/MockXVSVault.sol/MockXVSVault.dbg.json +1 -1
  41. package/artifacts/contracts/test/TestTimelockV8.sol/TestTimelockV8.dbg.json +1 -1
  42. package/artifacts/hardhat-deploy/solc_0.8/openzeppelin/access/Ownable.sol/Ownable.dbg.json +1 -1
  43. package/artifacts/hardhat-deploy/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol/IERC1822Proxiable.dbg.json +1 -1
  44. package/artifacts/hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.dbg.json +1 -1
  45. package/artifacts/hardhat-deploy/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol/ERC1967Upgrade.dbg.json +1 -1
  46. package/artifacts/hardhat-deploy/solc_0.8/openzeppelin/proxy/Proxy.sol/Proxy.dbg.json +1 -1
  47. package/artifacts/hardhat-deploy/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol/IBeacon.dbg.json +1 -1
  48. package/artifacts/hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.dbg.json +1 -1
  49. package/artifacts/hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.dbg.json +1 -1
  50. package/artifacts/hardhat-deploy/solc_0.8/openzeppelin/utils/Address.sol/Address.dbg.json +1 -1
  51. package/artifacts/hardhat-deploy/solc_0.8/openzeppelin/utils/Context.sol/Context.dbg.json +1 -1
  52. package/artifacts/hardhat-deploy/solc_0.8/openzeppelin/utils/StorageSlot.sol/StorageSlot.dbg.json +1 -1
  53. package/artifacts/hardhat-deploy/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol/OptimizedTransparentUpgradeableProxy.dbg.json +1 -1
  54. package/contracts/Utils/ACMCommandsAggregator.sol +153 -0
  55. package/deploy/007-acm-commands-aggregator.ts +23 -0
  56. package/deploy/008-configure-acm-commands-aggregator.ts +430 -0
  57. package/deploy/009-initial-configuration-multichain-governance.ts +122 -0
  58. package/deployments/arbitrumone/ACMCommandsAggregator.json +366 -0
  59. package/deployments/arbitrumone/solcInputs/c8adce9942919fd992f7532e82a0e082.json +43 -0
  60. package/deployments/arbitrumone.json +245 -0
  61. package/deployments/arbitrumone_addresses.json +1 -0
  62. package/deployments/arbitrumsepolia/ACMCommandsAggregator.json +366 -0
  63. package/deployments/arbitrumsepolia/solcInputs/8462bae4a0ff7e7203ecab090cdf091c.json +151 -0
  64. package/deployments/arbitrumsepolia.json +245 -0
  65. package/deployments/arbitrumsepolia_addresses.json +1 -0
  66. package/deployments/ethereum/ACMCommandsAggregator.json +366 -0
  67. package/deployments/ethereum/solcInputs/c8adce9942919fd992f7532e82a0e082.json +43 -0
  68. package/deployments/ethereum.json +245 -0
  69. package/deployments/ethereum_addresses.json +1 -0
  70. package/deployments/opbnbmainnet/ACMCommandsAggregator.json +366 -0
  71. package/deployments/opbnbmainnet/solcInputs/c8adce9942919fd992f7532e82a0e082.json +43 -0
  72. package/deployments/opbnbmainnet.json +245 -0
  73. package/deployments/opbnbmainnet_addresses.json +1 -0
  74. package/deployments/opbnbtestnet/ACMCommandsAggregator.json +366 -0
  75. package/deployments/opbnbtestnet/solcInputs/8462bae4a0ff7e7203ecab090cdf091c.json +151 -0
  76. package/deployments/opbnbtestnet.json +245 -0
  77. package/deployments/opbnbtestnet_addresses.json +1 -0
  78. package/deployments/sepolia/ACMCommandsAggregator.json +365 -0
  79. package/deployments/sepolia/solcInputs/06fc2b6f9f7e0e63c70222b8e0b27702.json +40 -0
  80. package/deployments/sepolia/solcInputs/8462bae4a0ff7e7203ecab090cdf091c.json +151 -0
  81. package/deployments/sepolia/solcInputs/c5ad99afd830582b4e18b887fc15722a.json +40 -0
  82. package/deployments/sepolia/solcInputs/d1b723608bc0e5c4e69b41a531154535.json +40 -0
  83. package/deployments/sepolia.json +245 -0
  84. package/deployments/sepolia_addresses.json +1 -0
  85. package/deployments/zksyncsepolia/ACMCommandsAggregator.json +465 -0
  86. package/deployments/zksyncsepolia/solcInputs/0be793521835d17f112344b451092640.json +43 -0
  87. package/deployments/zksyncsepolia.json +245 -0
  88. package/deployments/zksyncsepolia_addresses.json +1 -0
  89. package/dist/deploy/007-acm-commands-aggregator.d.ts +4 -0
  90. package/dist/deploy/007-acm-commands-aggregator.d.ts.map +1 -0
  91. package/dist/deploy/007-acm-commands-aggregator.js +30 -0
  92. package/dist/deploy/007-acm-commands-aggregator.js.map +1 -0
  93. package/dist/deploy/008-configure-acm-commands-aggregator.d.ts +4 -0
  94. package/dist/deploy/008-configure-acm-commands-aggregator.d.ts.map +1 -0
  95. package/dist/deploy/008-configure-acm-commands-aggregator.js +361 -0
  96. package/dist/deploy/008-configure-acm-commands-aggregator.js.map +1 -0
  97. package/dist/deploy/009-initial-configuration-multichain-governance.d.ts +4 -0
  98. package/dist/deploy/009-initial-configuration-multichain-governance.d.ts.map +1 -0
  99. package/dist/deploy/009-initial-configuration-multichain-governance.js +101 -0
  100. package/dist/deploy/009-initial-configuration-multichain-governance.js.map +1 -0
  101. package/dist/helpers/permissions.d.ts +46 -0
  102. package/dist/helpers/permissions.d.ts.map +1 -0
  103. package/dist/helpers/permissions.js +399 -0
  104. package/dist/helpers/permissions.js.map +1 -0
  105. package/dist/typechain/contracts/Utils/ACMCommandsAggregator.d.ts +229 -0
  106. package/dist/typechain/contracts/Utils/ACMCommandsAggregator.d.ts.map +1 -0
  107. package/dist/typechain/contracts/Utils/ACMCommandsAggregator.js +3 -0
  108. package/dist/typechain/contracts/Utils/ACMCommandsAggregator.js.map +1 -0
  109. package/dist/typechain/contracts/Utils/index.d.ts +2 -0
  110. package/dist/typechain/contracts/Utils/index.d.ts.map +1 -0
  111. package/dist/typechain/contracts/Utils/index.js +3 -0
  112. package/dist/typechain/contracts/Utils/index.js.map +1 -0
  113. package/dist/typechain/contracts/index.d.ts +2 -0
  114. package/dist/typechain/contracts/index.d.ts.map +1 -1
  115. package/dist/typechain/factories/contracts/Utils/ACMCommandsAggregator__factory.d.ts +206 -0
  116. package/dist/typechain/factories/contracts/Utils/ACMCommandsAggregator__factory.d.ts.map +1 -0
  117. package/dist/typechain/factories/contracts/Utils/ACMCommandsAggregator__factory.js +280 -0
  118. package/dist/typechain/factories/contracts/Utils/ACMCommandsAggregator__factory.js.map +1 -0
  119. package/dist/typechain/factories/contracts/Utils/index.d.ts +2 -0
  120. package/dist/typechain/factories/contracts/Utils/index.d.ts.map +1 -0
  121. package/dist/typechain/factories/contracts/Utils/index.js +6 -0
  122. package/dist/typechain/factories/contracts/Utils/index.js.map +1 -0
  123. package/dist/typechain/factories/contracts/index.d.ts +1 -0
  124. package/dist/typechain/factories/contracts/index.d.ts.map +1 -1
  125. package/dist/typechain/factories/contracts/index.js +2 -1
  126. package/dist/typechain/factories/contracts/index.js.map +1 -1
  127. package/dist/typechain/index.d.ts +2 -0
  128. package/dist/typechain/index.d.ts.map +1 -1
  129. package/dist/typechain/index.js +3 -1
  130. package/dist/typechain/index.js.map +1 -1
  131. package/package.json +1 -1
  132. package/typechain/contracts/Utils/ACMCommandsAggregator.ts +440 -0
  133. package/typechain/contracts/Utils/index.ts +4 -0
  134. package/typechain/contracts/index.ts +3 -0
  135. package/typechain/factories/contracts/Utils/ACMCommandsAggregator__factory.ts +314 -0
  136. package/typechain/factories/contracts/Utils/index.ts +4 -0
  137. package/typechain/factories/contracts/index.ts +1 -0
  138. package/typechain/index.ts +2 -0
@@ -0,0 +1,40 @@
1
+ {
2
+ "language": "Solidity",
3
+ "sources": {
4
+ "@openzeppelin/contracts/access/IAccessControl.sol": {
5
+ "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev External interface of AccessControl declared to support ERC165 detection.\n */\ninterface IAccessControl {\n /**\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n *\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n * {RoleAdminChanged} not being emitted signaling this.\n *\n * _Available since v3.1._\n */\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\n\n /**\n * @dev Emitted when `account` is granted `role`.\n *\n * `sender` is the account that originated the contract call, an admin role\n * bearer except when using {AccessControl-_setupRole}.\n */\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Emitted when `account` is revoked `role`.\n *\n * `sender` is the account that originated the contract call:\n * - if using `revokeRole`, it is the admin role bearer\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\n */\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Returns `true` if `account` has been granted `role`.\n */\n function hasRole(bytes32 role, address account) external view returns (bool);\n\n /**\n * @dev Returns the admin role that controls `role`. See {grantRole} and\n * {revokeRole}.\n *\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\n */\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function grantRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function revokeRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from the calling account.\n *\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\n * purpose is to provide a mechanism for accounts to lose their privileges\n * if they are compromised (such as when a trusted device is misplaced).\n *\n * If the calling account had been granted `role`, emits a {RoleRevoked}\n * event.\n *\n * Requirements:\n *\n * - the caller must be `account`.\n */\n function renounceRole(bytes32 role, address account) external;\n}\n"
6
+ },
7
+ "contracts/Governance/ACMCommandsAggregator.sol": {
8
+ "content": "// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport {IAccessControlManagerV8} from \"../Governance/IAccessControlManagerV8.sol\";\n\ncontract ACMCommandsAggregator {\n /*\n * @notice Enum to differentiate between giving and revoking permissions\n */\n enum PermissionType {\n GIVE,\n REVOKE\n }\n\n /*\n * @notice Struct to store permission details\n */\n struct Permission {\n /*\n * @notice Type of permission\n */ \n PermissionType permissionType;\n\n /*\n * @notice Address of the contract\n */\n address contractAddress;\n\n /*\n * @notice Function signature\n */\n string functionSig;\n\n /*\n * @notice Address of the account\n */\n address account;\n }\n\n /**\n * @notice Access control manager contract\n */\n IAccessControlManagerV8 immutable public ACM;\n\n /*\n * @notice Array to store permissions\n */\n Permission[][] public permissions;\n\n /*\n * @notice Event emitted when permissions are added\n */\n event PermissionsAdded(uint256 index);\n\n /*\n * @notice Event emitted when permissions are executed\n */\n event PermissionsExecuted(uint256 index);\n\n /*\n * @notice Constructor to set the access control manager\n * @param _acm Address of the access control manager\n */\n constructor(IAccessControlManagerV8 _acm) {\n ACM = _acm;\n }\n\n /*\n * @notice Function to add permissions\n * @param _permissions Array of permissions\n */\n function addPermissions(Permission[] memory _permissions) external {\n uint256 index = _permissions.length;\n for (uint256 i = 0; i < _permissions.length; i++) {\n permissions[index].push(_permissions[i]);\n }\n\n emit PermissionsAdded(index);\n }\n\n /*\n * @notice Function to execute permissions\n * @param index Index of the permissions array\n */\n function executePermissions(uint256 index) external {\n for (uint256 i = 0; i < permissions[index].length; i++) {\n if (permissions[index][i].permissionType == PermissionType.GIVE) {\n ACM.giveCallPermission(permissions[index][i].contractAddress, permissions[index][i].functionSig, permissions[index][i].account);\n } else {\n ACM.revokeCallPermission(permissions[index][i].contractAddress, permissions[index][i].functionSig, permissions[index][i].account);\n }\n }\n\n emit PermissionsExecuted(index);\n }\n}"
9
+ },
10
+ "contracts/Governance/IAccessControlManagerV8.sol": {
11
+ "content": "// SPDX-License-Identifier: BSD-3-Clause\npragma solidity ^0.8.25;\n\nimport \"@openzeppelin/contracts/access/IAccessControl.sol\";\n\n/**\n * @title IAccessControlManagerV8\n * @author Venus\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\n */\ninterface IAccessControlManagerV8 is IAccessControl {\n function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\n\n function revokeCallPermission(\n address contractAddress,\n string calldata functionSig,\n address accountToRevoke\n ) external;\n\n function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\n\n function hasPermission(\n address account,\n address contractAddress,\n string calldata functionSig\n ) external view returns (bool);\n}\n"
12
+ }
13
+ },
14
+ "settings": {
15
+ "optimizer": {
16
+ "enabled": true,
17
+ "runs": 10000
18
+ },
19
+ "evmVersion": "paris",
20
+ "outputSelection": {
21
+ "*": {
22
+ "*": [
23
+ "storageLayout",
24
+ "abi",
25
+ "evm.bytecode",
26
+ "evm.deployedBytecode",
27
+ "evm.methodIdentifiers",
28
+ "metadata",
29
+ "devdoc",
30
+ "userdoc",
31
+ "evm.gasEstimates"
32
+ ],
33
+ "": ["ast"]
34
+ }
35
+ },
36
+ "metadata": {
37
+ "useLiteralContent": true
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "language": "Solidity",
3
+ "sources": {
4
+ "@openzeppelin/contracts/access/IAccessControl.sol": {
5
+ "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev External interface of AccessControl declared to support ERC165 detection.\n */\ninterface IAccessControl {\n /**\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n *\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n * {RoleAdminChanged} not being emitted signaling this.\n *\n * _Available since v3.1._\n */\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\n\n /**\n * @dev Emitted when `account` is granted `role`.\n *\n * `sender` is the account that originated the contract call, an admin role\n * bearer except when using {AccessControl-_setupRole}.\n */\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Emitted when `account` is revoked `role`.\n *\n * `sender` is the account that originated the contract call:\n * - if using `revokeRole`, it is the admin role bearer\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\n */\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Returns `true` if `account` has been granted `role`.\n */\n function hasRole(bytes32 role, address account) external view returns (bool);\n\n /**\n * @dev Returns the admin role that controls `role`. See {grantRole} and\n * {revokeRole}.\n *\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\n */\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function grantRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function revokeRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from the calling account.\n *\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\n * purpose is to provide a mechanism for accounts to lose their privileges\n * if they are compromised (such as when a trusted device is misplaced).\n *\n * If the calling account had been granted `role`, emits a {RoleRevoked}\n * event.\n *\n * Requirements:\n *\n * - the caller must be `account`.\n */\n function renounceRole(bytes32 role, address account) external;\n}\n"
6
+ },
7
+ "contracts/Governance/ACMCommandsAggregator.sol": {
8
+ "content": "// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport {IAccessControlManagerV8} from \"../Governance/IAccessControlManagerV8.sol\";\n\ncontract ACMCommandsAggregator {\n /*\n * @notice Enum to differentiate between giving and revoking permissions\n */\n enum PermissionType {\n GIVE,\n REVOKE\n }\n\n /*\n * @notice Struct to store permission details\n */\n struct Permission {\n /*\n * @notice Type of permission\n */ \n PermissionType permissionType;\n\n /*\n * @notice Address of the contract\n */\n address contractAddress;\n\n /*\n * @notice Function signature\n */\n string functionSig;\n\n /*\n * @notice Address of the account\n */\n address account;\n }\n\n /**\n * @notice Access control manager contract\n */\n IAccessControlManagerV8 immutable public ACM;\n\n /*\n * @notice Mapping to store permissions\n */\n mapping (uint256 => Permission[]) public permissions;\n\n /*\n * @notice Index for the next permissions\n */\n uint256 nextIndex;\n\n /*\n * @notice Event emitted when permissions are added\n */\n event PermissionsAdded(uint256 index);\n\n /*\n * @notice Event emitted when permissions are executed\n */\n event PermissionsExecuted(uint256 index);\n\n /*\n * @notice Constructor to set the access control manager\n * @param _acm Address of the access control manager\n */\n constructor(IAccessControlManagerV8 _acm) {\n ACM = _acm;\n }\n\n /*\n * @notice Function to add permissions\n * @param _permissions Array of permissions\n */\n function addPermissions(Permission[] memory _permissions) external {\n for (uint256 i = 0; i < _permissions.length; i++) {\n permissions[nextIndex].push(Permission(_permissions[i].permissionType, _permissions[i].contractAddress, _permissions[i].functionSig, _permissions[i].account));\n }\n\n emit PermissionsAdded(nextIndex);\n nextIndex++;\n }\n\n /*\n * @notice Function to execute permissions\n * @param index Index of the permissions array\n */\n function executePermissions(uint256 index) external {\n for (uint256 i = 0; i < permissions[index].length; i++) {\n if (permissions[index][i].permissionType == PermissionType.GIVE) {\n ACM.giveCallPermission(permissions[index][i].contractAddress, permissions[index][i].functionSig, permissions[index][i].account);\n } else {\n ACM.revokeCallPermission(permissions[index][i].contractAddress, permissions[index][i].functionSig, permissions[index][i].account);\n }\n }\n\n emit PermissionsExecuted(index);\n }\n}"
9
+ },
10
+ "contracts/Governance/IAccessControlManagerV8.sol": {
11
+ "content": "// SPDX-License-Identifier: BSD-3-Clause\npragma solidity ^0.8.25;\n\nimport \"@openzeppelin/contracts/access/IAccessControl.sol\";\n\n/**\n * @title IAccessControlManagerV8\n * @author Venus\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\n */\ninterface IAccessControlManagerV8 is IAccessControl {\n function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\n\n function revokeCallPermission(\n address contractAddress,\n string calldata functionSig,\n address accountToRevoke\n ) external;\n\n function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\n\n function hasPermission(\n address account,\n address contractAddress,\n string calldata functionSig\n ) external view returns (bool);\n}\n"
12
+ }
13
+ },
14
+ "settings": {
15
+ "optimizer": {
16
+ "enabled": true,
17
+ "runs": 10000
18
+ },
19
+ "evmVersion": "paris",
20
+ "outputSelection": {
21
+ "*": {
22
+ "*": [
23
+ "storageLayout",
24
+ "abi",
25
+ "evm.bytecode",
26
+ "evm.deployedBytecode",
27
+ "evm.methodIdentifiers",
28
+ "metadata",
29
+ "devdoc",
30
+ "userdoc",
31
+ "evm.gasEstimates"
32
+ ],
33
+ "": ["ast"]
34
+ }
35
+ },
36
+ "metadata": {
37
+ "useLiteralContent": true
38
+ }
39
+ }
40
+ }
@@ -2,6 +2,251 @@
2
2
  "name": "sepolia",
3
3
  "chainId": "11155111",
4
4
  "contracts": {
5
+ "ACMCommandsAggregator": {
6
+ "address": "0x0653830c55035d678e1287b2d4550519fd263d0e",
7
+ "abi": [
8
+ {
9
+ "inputs": [
10
+ {
11
+ "internalType": "contract IAccessControlManagerV8",
12
+ "name": "_acm",
13
+ "type": "address"
14
+ }
15
+ ],
16
+ "stateMutability": "nonpayable",
17
+ "type": "constructor"
18
+ },
19
+ {
20
+ "inputs": [],
21
+ "name": "EmptyPermissions",
22
+ "type": "error"
23
+ },
24
+ {
25
+ "inputs": [],
26
+ "name": "ZeroAddressNotAllowed",
27
+ "type": "error"
28
+ },
29
+ {
30
+ "anonymous": false,
31
+ "inputs": [
32
+ {
33
+ "indexed": false,
34
+ "internalType": "uint256",
35
+ "name": "index",
36
+ "type": "uint256"
37
+ }
38
+ ],
39
+ "name": "GrantPermissionsAdded",
40
+ "type": "event"
41
+ },
42
+ {
43
+ "anonymous": false,
44
+ "inputs": [
45
+ {
46
+ "indexed": false,
47
+ "internalType": "uint256",
48
+ "name": "index",
49
+ "type": "uint256"
50
+ }
51
+ ],
52
+ "name": "GrantPermissionsExecuted",
53
+ "type": "event"
54
+ },
55
+ {
56
+ "anonymous": false,
57
+ "inputs": [
58
+ {
59
+ "indexed": false,
60
+ "internalType": "uint256",
61
+ "name": "index",
62
+ "type": "uint256"
63
+ }
64
+ ],
65
+ "name": "RevokePermissionsAdded",
66
+ "type": "event"
67
+ },
68
+ {
69
+ "anonymous": false,
70
+ "inputs": [
71
+ {
72
+ "indexed": false,
73
+ "internalType": "uint256",
74
+ "name": "index",
75
+ "type": "uint256"
76
+ }
77
+ ],
78
+ "name": "RevokePermissionsExecuted",
79
+ "type": "event"
80
+ },
81
+ {
82
+ "inputs": [],
83
+ "name": "ACM",
84
+ "outputs": [
85
+ {
86
+ "internalType": "contract IAccessControlManagerV8",
87
+ "name": "",
88
+ "type": "address"
89
+ }
90
+ ],
91
+ "stateMutability": "view",
92
+ "type": "function"
93
+ },
94
+ {
95
+ "inputs": [
96
+ {
97
+ "components": [
98
+ {
99
+ "internalType": "address",
100
+ "name": "contractAddress",
101
+ "type": "address"
102
+ },
103
+ {
104
+ "internalType": "string",
105
+ "name": "functionSig",
106
+ "type": "string"
107
+ },
108
+ {
109
+ "internalType": "address",
110
+ "name": "account",
111
+ "type": "address"
112
+ }
113
+ ],
114
+ "internalType": "struct ACMCommandsAggregator.Permission[]",
115
+ "name": "_permissions",
116
+ "type": "tuple[]"
117
+ }
118
+ ],
119
+ "name": "addGrantPermissions",
120
+ "outputs": [],
121
+ "stateMutability": "nonpayable",
122
+ "type": "function"
123
+ },
124
+ {
125
+ "inputs": [
126
+ {
127
+ "components": [
128
+ {
129
+ "internalType": "address",
130
+ "name": "contractAddress",
131
+ "type": "address"
132
+ },
133
+ {
134
+ "internalType": "string",
135
+ "name": "functionSig",
136
+ "type": "string"
137
+ },
138
+ {
139
+ "internalType": "address",
140
+ "name": "account",
141
+ "type": "address"
142
+ }
143
+ ],
144
+ "internalType": "struct ACMCommandsAggregator.Permission[]",
145
+ "name": "_permissions",
146
+ "type": "tuple[]"
147
+ }
148
+ ],
149
+ "name": "addRevokePermissions",
150
+ "outputs": [],
151
+ "stateMutability": "nonpayable",
152
+ "type": "function"
153
+ },
154
+ {
155
+ "inputs": [
156
+ {
157
+ "internalType": "uint256",
158
+ "name": "index",
159
+ "type": "uint256"
160
+ }
161
+ ],
162
+ "name": "executeGrantPermissions",
163
+ "outputs": [],
164
+ "stateMutability": "nonpayable",
165
+ "type": "function"
166
+ },
167
+ {
168
+ "inputs": [
169
+ {
170
+ "internalType": "uint256",
171
+ "name": "index",
172
+ "type": "uint256"
173
+ }
174
+ ],
175
+ "name": "executeRevokePermissions",
176
+ "outputs": [],
177
+ "stateMutability": "nonpayable",
178
+ "type": "function"
179
+ },
180
+ {
181
+ "inputs": [
182
+ {
183
+ "internalType": "uint256",
184
+ "name": "",
185
+ "type": "uint256"
186
+ },
187
+ {
188
+ "internalType": "uint256",
189
+ "name": "",
190
+ "type": "uint256"
191
+ }
192
+ ],
193
+ "name": "grantPermissions",
194
+ "outputs": [
195
+ {
196
+ "internalType": "address",
197
+ "name": "contractAddress",
198
+ "type": "address"
199
+ },
200
+ {
201
+ "internalType": "string",
202
+ "name": "functionSig",
203
+ "type": "string"
204
+ },
205
+ {
206
+ "internalType": "address",
207
+ "name": "account",
208
+ "type": "address"
209
+ }
210
+ ],
211
+ "stateMutability": "view",
212
+ "type": "function"
213
+ },
214
+ {
215
+ "inputs": [
216
+ {
217
+ "internalType": "uint256",
218
+ "name": "",
219
+ "type": "uint256"
220
+ },
221
+ {
222
+ "internalType": "uint256",
223
+ "name": "",
224
+ "type": "uint256"
225
+ }
226
+ ],
227
+ "name": "revokePermissions",
228
+ "outputs": [
229
+ {
230
+ "internalType": "address",
231
+ "name": "contractAddress",
232
+ "type": "address"
233
+ },
234
+ {
235
+ "internalType": "string",
236
+ "name": "functionSig",
237
+ "type": "string"
238
+ },
239
+ {
240
+ "internalType": "address",
241
+ "name": "account",
242
+ "type": "address"
243
+ }
244
+ ],
245
+ "stateMutability": "view",
246
+ "type": "function"
247
+ }
248
+ ]
249
+ },
5
250
  "AccessControlManager": {
6
251
  "address": "0xbf705C00578d43B6147ab4eaE04DBBEd1ccCdc96",
7
252
  "abi": [
@@ -2,6 +2,7 @@
2
2
  "name": "sepolia",
3
3
  "chainId": "11155111",
4
4
  "addresses": {
5
+ "ACMCommandsAggregator": "0x0653830c55035d678e1287b2d4550519fd263d0e",
5
6
  "AccessControlManager": "0xbf705C00578d43B6147ab4eaE04DBBEd1ccCdc96",
6
7
  "CriticalTimelock": "0xA24A7A65b8968a749841988Bd7d05F6a94329fDe",
7
8
  "DefaultProxyAdmin": "0x01435866babd91311b1355cf3af488cca36db68e",