UNPKG

@venusprotocol/governance-contracts

Version:
456 lines 106 kB
{ "address": "0xD07f543d47c3a8997D6079958308e981AC14CD01", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "address", "name": "contractAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "functionSig", "type": "string" } ], "name": "PermissionGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "address", "name": "contractAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "functionSig", "type": "string" } ], "name": "PermissionRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "contractAddress", "type": "address" }, { "internalType": "string", "name": "functionSig", "type": "string" }, { "internalType": "address", "name": "accountToPermit", "type": "address" } ], "name": "giveCallPermission", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "contractAddress", "type": "address" }, { "internalType": "string", "name": "functionSig", "type": "string" } ], "name": "hasPermission", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "string", "name": "functionSig", "type": "string" } ], "name": "isAllowedToCall", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "contractAddress", "type": "address" }, { "internalType": "string", "name": "functionSig", "type": "string" }, { "internalType": "address", "name": "accountToRevoke", "type": "address" } ], "name": "revokeCallPermission", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ], "transactionHash": "0x8e075d16880005bb6c418dd2c5fdb3474f9c43373e143afa0fc66a94c5bd972e", "receipt": { "to": "0x0000000000000000000000000000000000008006", "from": "0xE8C6Cf867CF962d289305ECE9b139a4116674541", "contractAddress": "0xD07f543d47c3a8997D6079958308e981AC14CD01", "transactionIndex": 0, "gasUsed": "267838", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "blockHash": "0x16786704247cfc34a6a14d6f51401ebc53772888078b02ea31cc073923fa2c98", "transactionHash": "0x8e075d16880005bb6c418dd2c5fdb3474f9c43373e143afa0fc66a94c5bd972e", "logs": [ { "transactionIndex": 0, "blockNumber": 3445364, "transactionHash": "0x8e075d16880005bb6c418dd2c5fdb3474f9c43373e143afa0fc66a94c5bd972e", "address": "0x000000000000000000000000000000000000800A", "topics": [ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", "0x000000000000000000000000e8c6cf867cf962d289305ece9b139a4116674541", "0x0000000000000000000000000000000000000000000000000000000000008001" ], "data": "0x00000000000000000000000000000000000000000000000000000bb5928250c0", "logIndex": 0, "blockHash": "0x16786704247cfc34a6a14d6f51401ebc53772888078b02ea31cc073923fa2c98" }, { "transactionIndex": 0, "blockNumber": 3445364, "transactionHash": "0x8e075d16880005bb6c418dd2c5fdb3474f9c43373e143afa0fc66a94c5bd972e", "address": "0xD07f543d47c3a8997D6079958308e981AC14CD01", "topics": [ "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000e8c6cf867cf962d289305ece9b139a4116674541", "0x000000000000000000000000e8c6cf867cf962d289305ece9b139a4116674541" ], "data": "0x", "logIndex": 1, "blockHash": "0x16786704247cfc34a6a14d6f51401ebc53772888078b02ea31cc073923fa2c98" }, { "transactionIndex": 0, "blockNumber": 3445364, "transactionHash": "0x8e075d16880005bb6c418dd2c5fdb3474f9c43373e143afa0fc66a94c5bd972e", "address": "0x0000000000000000000000000000000000008006", "topics": [ "0x290afdae231a3fc0bbae8b1af63698b0a1d79b21ad17df0342dfb952fe74f8e5", "0x000000000000000000000000e8c6cf867cf962d289305ece9b139a4116674541", "0x0100020b39784512b369ad87d7344a9e54360b289dc34eaf6ae47947347101ad", "0x000000000000000000000000d07f543d47c3a8997d6079958308e981ac14cd01" ], "data": "0x", "logIndex": 2, "blockHash": "0x16786704247cfc34a6a14d6f51401ebc53772888078b02ea31cc073923fa2c98" }, { "transactionIndex": 0, "blockNumber": 3445364, "transactionHash": "0x8e075d16880005bb6c418dd2c5fdb3474f9c43373e143afa0fc66a94c5bd972e", "address": "0x000000000000000000000000000000000000800A", "topics": [ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", "0x0000000000000000000000000000000000000000000000000000000000008001", "0x000000000000000000000000e8c6cf867cf962d289305ece9b139a4116674541" ], "data": "0x0000000000000000000000000000000000000000000000000000059e8cc9b140", "logIndex": 3, "blockHash": "0x16786704247cfc34a6a14d6f51401ebc53772888078b02ea31cc073923fa2c98" } ], "blockNumber": 3445364, "cumulativeGasUsed": "0", "status": 1, "byzantium": true }, "args": [], "numDeployments": 1, "solcInputHash": "bbb815e123a08a26954984beb0f34bc0", "metadata": { "llvm_options": [], "optimizer_settings": { "is_debug_logging_enabled": false, "is_fallback_to_size_enabled": false, "is_verify_each_enabled": false, "level_back_end": "Aggressive", "level_middle_end": "Aggressive", "level_middle_end_size": "Zero" }, "solc_metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.47b979f3\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"}],\"name\":\"PermissionGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"}],\"name\":\"PermissionRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"accountToPermit\",\"type\":\"address\"}],\"name\":\"giveCallPermission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"}],\"name\":\"hasPermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"}],\"name\":\"isAllowedToCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"accountToRevoke\",\"type\":\"address\"}],\"name\":\"revokeCallPermission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"details\":\"This contract is a wrapper of OpenZeppelin AccessControl extending it in a way to standartize access control within Venus Smart Contract Ecosystem.\",\"events\":{\"PermissionGranted(address,address,string)\":{\"details\":\"If contract address is 0x000..0 this means that the account is a default admin of this function and can call any contract function with this signature\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"giveCallPermission(address,string,address)\":{\"custom:event\":\"Emits a {RoleGranted} and {PermissionGranted} events.\",\"details\":\"this function can be called only from Role Admin or DEFAULT_ADMIN_ROLEif contractAddress is zero address, the account can access the specified function on **any** contract managed by this ACL\",\"params\":{\"accountToPermit\":\"account that will be given access to the contract function\",\"contractAddress\":\"address of contract for which call permissions will be granted\",\"functionSig\":\"signature e.g. \\\"functionName(uint256,bool)\\\"\"}},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasPermission(address,address,string)\":{\"details\":\"This function is used as a view function to check permissions rather than contract hook for access restriction check.\",\"params\":{\"account\":\"for which call permissions will be checked against\",\"contractAddress\":\"address of the restricted contract\",\"functionSig\":\"signature of the restricted function e.g. \\\"functionName(uint256,bool)\\\"\"},\"returns\":{\"_0\":\"false if the user account cannot call the particular contract function\"}},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isAllowedToCall(address,string)\":{\"details\":\"Since restricted contracts using this function as a permission hook, we can get contracts address with msg.sender\",\"params\":{\"account\":\"for which call permissions will be checked\",\"functionSig\":\"restricted function signature e.g. \\\"functionName(uint256,bool)\\\"\"},\"returns\":{\"_0\":\"false if the user account cannot call the particular contract function\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeCallPermission(address,string,address)\":{\"custom:event\":\"Emits {RoleRevoked} and {PermissionRevoked} events.\",\"details\":\"this function can be called only from Role Admin or DEFAULT_ADMIN_ROLE \\t\\tMay emit a {RoleRevoked} event.\",\"params\":{\"contractAddress\":\"address of contract for which call permissions will be revoked\",\"functionSig\":\"signature e.g. \\\"functionName(uint256,bool)\\\"\"}},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"title\":\"AccessControlManager\",\"version\":1},\"userdoc\":{\"events\":{\"PermissionGranted(address,address,string)\":{\"notice\":\"Emitted when an account is given a permission to a certain contract function\"},\"PermissionRevoked(address,address,string)\":{\"notice\":\"Emitted when an account is revoked a permission to a certain contract function\"}},\"kind\":\"user\",\"methods\":{\"giveCallPermission(address,string,address)\":{\"notice\":\"Gives a function call permission to one single account\"},\"hasPermission(address,address,string)\":{\"notice\":\"Verifies if the given account can call a contract's guarded function\"},\"isAllowedToCall(address,string)\":{\"notice\":\"Verifies if the given account can call a contract's guarded function\"},\"revokeCallPermission(address,string,address)\":{\"notice\":\"Revokes an account's permission to a particular function call\"}},\"notice\":\"Access control plays a crucial role in the Venus governance model. It is used to restrict functions so that they can only be called from one account or list of accounts (EOA or Contract Accounts). The implementation of `AccessControlManager`(https://github.com/VenusProtocol/governance-contracts/blob/main/contracts/Governance/AccessControlManager.sol) inherits the [Open Zeppelin AccessControl](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/AccessControl.sol) contract as a base for role management logic. There are two role types: admin and granular permissions. ## Granular Roles Granular roles are built by hashing the contract address and its function signature. For example, given contract `Foo` with function `Foo.bar()` which is guarded by ACM, calling `giveRolePermission` for account B do the following: 1. Compute `keccak256(contractFooAddress,functionSignatureBar)` 1. Add the computed role to the roles of account B 1. Account B now can call `ContractFoo.bar()` ## Admin Roles Admin roles allow for an address to call a function signature on any contract guarded by the `AccessControlManager`. This is particularly useful for contracts created by factories. For Admin roles a null address is hashed in place of the contract address (`keccak256(0x0000000000000000000000000000000000000000,functionSignatureBar)`. In the previous example, giving account B the admin role, account B will have permissions to call the `bar()` function on any contract that is guarded by ACM, not only contract A. ## Protocol Integration All restricted functions in Venus Protocol use a hook to ACM in order to check if the caller has the right permission to call the guarded function. `AccessControlledV5` and `AccessControlledV8` abstract contract makes this integration easier. They call ACM's external method `isAllowedToCall(address caller, string functionSig)`. Here is an example of how `setCollateralFactor` function in `Comptroller` is integrated with ACM: ``` contract Comptroller is [...] AccessControlledV8 { [...] function setCollateralFactor(VToken vToken, uint256 newCollateralFactorMantissa, uint256 newLiquidationThresholdMantissa) external { _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\"); [...] } } ```\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Governance/AccessControlManager.sol\":\"AccessControlManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":false,\"deduplicate\":false,\"inliner\":false,\"jumpdestRemover\":false,\"orderLiterals\":false,\"peephole\":false,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOcmu\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cbbb1a75e4064d564bf69e74970eef35064e51fcc09cbf3589aee7faa60d6afe\",\"dweb:/ipfs/QmYfAtQwFSGmxomnyAV3tpBDbfDwiFXV61osWW2zzQVg5Q\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb2c137c343ef0c4c7ce7b18c1d108afdc9d315a04e48307288d2d05adcbde3a\",\"dweb:/ipfs/QmUxhrAQM3MM3FF5j7AtcXLXguWCJBHJ14BRdVtuoQc8Fh\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c969013129ba9e651a20735ef659fef6d8a1139ea3607bd4b26ddea2d645634\",\"dweb:/ipfs/QmVhVa6LGuzAcB8qgDtVHRkucn4ihj5UZr8xBLcJkP6ucb\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33bbf48cc069be677705037ba7520c22b1b622c23b33e1a71495f2d36549d40b\",\"dweb:/ipfs/Qmct36zWXv3j7LZB83uwbg7TXwnZSN1fqHNDZ93GG98bGz\"]},\"contracts/Governance/AccessControlManager.sol\":{\"keccak256\":\"0x9cf1fe49aecbf49434d4a04c3bd25c1a103356c999d335774216da17a3a152a8\",\"license\":\"BSD-3-Clause\",\"urls\":[\"bzz-raw://b69251cb559a7924a14449362b36cd97953f47266bba6a380f9fae0954c04e0b\",\"dweb:/ipfs/QmZXTzxnPpp4AuaLZCuhvVhebzrznrCUhuzN25redsk83T\"]},\"contracts/Governance/IAccessControlManagerV8.sol\":{\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\",\"urls\":[\"bzz-raw://8120bda3990193388d0cc5f551510ef1eab685387a58a88ab607b5149e51acde\",\"dweb:/ipfs/QmNSX9ai6GbN4wQukM29rFkcWDFhqStUTtKe6XtreTvRcN\"]}},\"version\":1}", "solc_version": "0.8.25", "solc_zkvm_edition": "1.0.1", "zk_version": "1.5.1" }, "bytecode": "0x00020000000000020008000000000002000100000001035500000000030100190000006003300270000001d50030019d0000008004000039000000400040043f00000001002001900000004c0000c13d000001d502300197000000040020008c000005940000413d000000000301043b000000e003300270000001da0030009c0000009b0000a13d000001db0030009c000000b40000213d000001df0030009c000001ac0000613d000001e00030009c0000028e0000613d000001e10030009c000005940000c13d000000640020008c000005940000413d0000000003000416000000000003004b000005940000c13d0000000403100370000000000303043b000800000003001d000001e80030009c000005940000213d0000002403100370000000000303043b000700000003001d000001e80030009c000005940000213d0000004401100370000000000101043b000001ea0010009c000005940000213d0000000401100039074e05960000040f00000000030100190000000004020019000000400100043d000600000001001d0000002001100039000500000001001d0000000702000029074e05b00000040f00000006030000290000000002310049000000200120008a00000000001304350000000001030019074e05d00000040f000000060100002900000000020104330000000501000029074e072f0000040f0000000802000029074e05e20000040f000000000001004b0000000001000019000000010100c039000000400200043d0000000000120435000001d50020009c000001d5020080410000004001200210000001eb011001c70000074f0001042e0000000001000416000000000001004b000005940000c13d0000000000000435000000200000043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b00000000020004110000000000200435000000200010043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b000000000101041a000000ff00100190000000960000c13d0000000000000435000000200000043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b00000000020004110000000000200435000000200010043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b000000000201041a000002070220019700000001022001bf000000000021041b0000000001000414000001d50010009c000001d501008041000000c001100210000001d7011001c70000800d020000390000000403000039000001d804000041000000000500001900000000060004110000000007060019074e07440000040f0000000100200190000005940000613d000000200100003900000100001004430000012000000443000001d9010000410000074f0001042e000001e20030009c000000d40000a13d000001e30030009c000002de0000613d000001e40030009c000002ef0000613d000001e50030009c000005940000c13d000000440020008c000005940000413d0000000002000416000000000002004b000005940000c13d0000002402100370000000000302043b000001e80030009c000005940000213d0000000002000411000000000023004b0000038c0000c13d0000000401100370000000000101043b074e06d30000040f00000000010000190000074f0001042e000001dc0030009c000003570000613d000001dd0030009c000003750000613d000001de0030009c000005940000c13d000000440020008c000005940000413d0000000002000416000000000002004b000005940000c13d0000002402100370000000000202043b000800000002001d000001e80020009c000005940000213d0000000401100370000000000101043b000700000001001d0000000000100435000000200000043f00000040020000390000000001000019074e072f0000040f0000000101100039000000000101041a074e06030000040f00000007010000290000000802000029074e06d30000040f00000000010000190000074f0001042e000001e60030009c0000037b0000613d000001e70030009c000005940000c13d000000440020008c000005940000413d0000000003000416000000000003004b000005940000c13d0000000403100370000000000303043b000800000003001d000001e80030009c000005940000213d0000002403100370000000000303043b000001ea0030009c000005940000213d0000002304300039000000000024004b000005940000813d0000000404300039000000000541034f000000000505043b000700000005001d000001ea0050009c000005940000213d00000007033000290000002403300039000000000023004b000005940000213d00000000020004110000006002200210000000a00020043f00000007020000290000001f0620018f0000002007400039000000000171034f0000000508200272000001040000613d000000b4020000390000000503800210000000b403300039000000000401034f000000004504043c0000000002520436000000000032004b000001000000c13d000000000006004b000001130000613d0000000502800210000000000121034f0000000303600210000000b402200039000000000402043300000000043401cf000000000434022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000141019f00000000001204350000000703000029000000b4013000390000000000010435000000530130003900000208011001970000001402300039000000800020043f000002030010009c000002d80000813d000400000008001d000500000007001d000600000006001d000300000001001d0000008001100039000000400010043f000001d50020009c000200000002001d000001d501000041000000000102401900000060011002100000000002000414000001d50020009c000001d502008041000000c002200210000000000121019f000001ed011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b0000000000100435000000200000043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b00000008020000290000000000200435000000200010043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b000000000101041a000000ff00100190000004690000c13d000000400100043d000000340310003900000020021000390000000000020435000000050400002900000001044003670000000405000029000000000005004b00000005055002100000015f0000613d0000000006530019000000000704034f0000000008030019000000007907043c0000000008980436000000000068004b0000015b0000c13d000000060000006b0000016e0000613d000000000454034f000000000553001900000006060000290000000306600210000000000705043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f000000000045043500000007033000290000000000030435000000020300002900000000003104350000000303100029000000000013004b00000000040000190000000104004039000001ea0030009c000002d80000213d0000000100400190000002d80000c13d000000400030043f000001d50020009c000001d50200804100000040022002100000000001010433000001d50010009c000001d5010080410000006001100210000000000121019f0000000002000414000001d50020009c000001d502008041000000c002200210000000000112019f000001d7011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b0000000000100435000000200000043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b00000008020000290000000000200435000000200010043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b000000000101041a000000ff001001900000000001000019000000010100c0390000046a0000013d000000640020008c000005940000413d0000000003000416000000000003004b000005940000c13d0000000403100370000000000303043b000800000003001d000001e80030009c000005940000213d0000002403100370000000000403043b000001ea0040009c000005940000213d0000002303400039000000000023004b000005940000813d0000000403400039000000000531034f000000000505043b000700000005001d000001ea0050009c000005940000213d0000002405400039000600000005001d0000000704500029000000000024004b000005940000213d0000004402100370000000000202043b000500000002001d000001e80020009c000005940000213d00000008020000290000006002200210000000a00020043f0000002002300039000000000121034f00000007020000290000001f0620018f0000000507200272000001de0000613d000000b4020000390000000503700210000000b403300039000000000401034f000000004504043c0000000002520436000000000032004b000001da0000c13d000000000006004b000001ed0000613d0000000502700210000000000121034f0000000303600210000000b402200039000000000402043300000000043401cf000000000434022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000141019f00000000001204350000000703000029000000b4013000390000000000010435000000530130003900000208021001970000001401300039000000800010043f000001ec0020009c000002d80000213d000300000007001d000400000006001d0000008002200039000000400020043f000001d50010009c000001d50100804100000060011002100000000002000414000001d50020009c000001d502008041000000c002200210000000000121019f000001ed011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b000200000001001d0000000000100435000000200000043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b0000000101100039000000000101041a000100000001001d0000000000100435000000200000043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b00000000020004110000000000200435000000200010043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b000000000101041a000000ff001001900000046c0000c13d000000400200043d000001f10020009c000002d80000213d0000006004200039000000400040043f0000002a01000039000000000112043600000000030000310000000103300367000000000503034f0000000006010019000000005705043c0000000006760436000000000046004b0000023f0000c13d0000000004010433000001f204400197000001f3044001c7000000000041043500000021042000390000000005040433000001f205500197000001f4055001c700000000005404350000002904000039000000000600041100000000050600190000000006020433000000000046004b000005530000a13d00000000061400190000000007060433000001f2077001970000000308500210000000780880018f000001f50880021f000001f608800197000000000787019f00000000007604350000000406500270000000010440008a000000010040008c0000024e0000213d000000100050008c000005590000813d000000400400043d000800000004001d000001ec0040009c000002d80000213d00000008060000290000008004600039000000400040043f00000042050000390000000005560436000700000005001d000000003603043c0000000005650436000000000045004b0000026b0000c13d00000007090000290000000003090433000001f203300197000001f3033001c70000000000390435000000080800002900000021038000390000000004030433000001f204400197000001f4044001c700000000004304350000004103000039000000010500002900000000040500190000000005080433000000000035004b000005530000a13d00000000059300190000000006050433000001f2066001970000000307400210000000780770018f000001f50770021f000001f607700197000000000676019f00000000006504350000000405400270000000010330008a000000010030008c0000027c0000213d0000042f0000013d000000640020008c000005940000413d0000000003000416000000000003004b000005940000c13d0000000403100370000000000303043b000800000003001d000001e80030009c000005940000213d0000002403100370000000000403043b000001ea0040009c000005940000213d0000002303400039000000000023004b000005940000813d0000000403400039000000000531034f000000000505043b000700000005001d000001ea0050009c000005940000213d0000002405400039000600000005001d0000000704500029000000000024004b000005940000213d0000004402100370000000000202043b000500000002001d000001e80020009c000005940000213d00000008020000290000006002200210000000a00020043f0000002002300039000000000121034f00000007020000290000001f0620018f0000000507200272000002c00000613d000000b4020000390000000503700210000000b403300039000000000401034f000000004504043c0000000002520436000000000032004b000002bc0000c13d000000000006004b000002cf0000613d0000000502700210000000000121034f0000000303600210000000b402200039000000000402043300000000043401cf000000000434022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000141019f00000000001204350000000703000029000000b4013000390000000000010435000000530130003900000208021001970000001401300039000000800010043f000001ec0020009c000003980000a13d000001fc0100004100000000001004350000004101000039000000040010043f000001fd010000410000075000010430000000240020008c000005940000413d0000000002000416000000000002004b000005940000c13d0000000401100370000000000101043b0000000000100435000000200000043f00000040020000390000000001000019074e072f0000040f0000000101100039000000000101041a000000800010043f000001e9010000410000074f0001042e000000440020008c000005940000413d0000000002000416000000000002004b000005940000c13d0000000402100370000000000202043b000800000002001d0000002401100370000000000101043b000700000001001d000001e80010009c000005940000213d00000008010000290000000000100435000000200000043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b0000000101100039000000000101041a074e06030000040f00000008010000290000000000100435000000200000043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b00000007020000290000000000200435000000200010043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b000000000101041a000000ff00100190000003550000c13d00000008010000290000000000100435000000200000043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b00000007020000290000000000200435000000200010043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b000000000201041a000002070220019700000001022001bf000000000021041b0000000001000414000001d50010009c000001d501008041000000c001100210000001d7011001c70000800d0200003900000004030000390000000007000411000001d80400004100000008050000290000000706000029074e07440000040f0000000100200190000005940000613d00000000010000190000074f0001042e000000440020008c000005940000413d0000000002000416000000000002004b000005940000c13d0000002402100370000000000202043b000800000002001d000001e80020009c000005940000213d0000000401100370000000000101043b0000000000100435000000200000043f00000040020000390000000001000019074e072f0000040f00000008020000290000000000200435000000200010043f00000000010000190000004002000039074e072f0000040f000000000101041a000000ff001001900000000001000019000000010100c039000000800010043f000001e9010000410000074f0001042e0000000001000416000000000001004b000005940000c13d000000800000043f000001e9010000410000074f0001042e000000240020008c000005940000413d0000000002000416000000000002004b000005940000c13d0000000401100370000000000101043b0000020400100198000005940000c13d000002050010009c00000000020000190000000102006039000002060010009c00000001022061bf000000800020043f000001e9010000410000074f0001042e000001f901000041000000800010043f0000002001000039000000840010043f0000002f01000039000000a40010043f0000020001000041000000c40010043f0000020101000041000000e40010043f00000202010000410000075000010430000300000007001d000400000006001d0000008002200039000000400020043f000001d50010009c000001d50100804100000060011002100000000002000414000001d50020009c000001d502008041000000c002200210000000000121019f000001ed011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b000200000001001d0000000000100435000000200000043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b0000000101100039000000000101041a000100000001001d0000000000100435000000200000043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b00000000020004110000000000200435000000200010043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b000000000101041a000000ff00100190000004c80000c13d000000400200043d000001f10020009c000002d80000213d0000006004200039000000400040043f0000002a01000039000000000112043600000000030000310000000103300367000000000503034f0000000006010019000000005705043c0000000006760436000000000046004b000003e10000c13d0000000004010433000001f204400197000001f3044001c7000000000041043500000021042000390000000005040433000001f205500197000001f4055001c700000000005404350000002904000039000000000600041100000000050600190000000006020433000000000046004b000005530000a13d00000000061400190000000007060433000001f2077001970000000308500210000000780880018f000001f50880021f000001f608800197000000000787019f00000000007604350000000406500270000000010440008a000000010040008c000003f00000213d000000100050008c000005590000813d000000400400043d000800000004001d000001ec0040009c000002d80000213d00000008060000290000008004600039000000400040043f00000042050000390000000005560436000700000005001d000000003603043c0000000005650436000000000045004b0000040d0000c13d00000007090000290000000003090433000001f203300197000001f3033001c70000000000390435000000080800002900000021038000390000000004030433000001f204400197000001f4044001c700000000004304350000004103000039000000010500002900000000040500190000000005080433000000000035004b000005530000a13d00000000059300190000000006050433000001f2066001970000000307400210000000780770018f000001f50770021f000001f607700197000000000676019f00000000006504350000000405400270000000010330008a000000010030008c0000041e0000213d000000100040008c000005590000813d000000400500043d000600000005001d0000002004500039000400000004001d000001f70300004100000000003404350000000003020433000500000003001d0000003702500039074e07220000040f000000050200002900000006012000290000003702100039000001f8030000410000000000320435000000480210003900000008010000290000000003010433000800000003001d0000000701000029074e07220000040f000000080200002900000005032000290000002802300039000000060100002900000000002104350000004802300039074e05d00000040f000001f901000041000000400400043d000800000004001d000000000014043500000020010000390000000402400039000000000012043500000006010000290000000003010433000700000003001d0000002401400039000000000031043500000044024000390000000401000029074e07220000040f00000007010000290000001f0110003900000208011001970000004401100039000001d50010009c000001d5010080410000000802000029000001d50020009c000001d50200804100000060011002100000004002200210000000000121019f00000750000104300000000101000039000000010110018f000000450000013d00000002010000290000000000100435000000200000043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b00000005020000290000000000200435000000200010043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b000000000101041a000000ff00100190000005690000c13d000000400100043d000000600210003900000007030000290000000000320435000000400210003900000060030000390000000000320435000000200210003900000008030000290000000000320435000000050200002900000000002104350000008002100039000000060300002900000001033003670000000304000029000000000004004b0000000504400210000004a30000613d0000000005420019000000000603034f0000000007020019000000006806043c0000000007870436000000000057004b0000049f0000c13d000000040000006b000004b20000613d000000000343034f000000000442001900000004050000290000000305500210000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f00000000003404350000000703000029000000000232001900000000000204350000001f023000390000020802200197000001ee0020009c000001ee020080410000006002200210000001d50010009c000001d5010080410000004001100210000000000112019f0000000002000414000001d50020009c000001d502008041000000c002200210000000000121019f000001ef0110009a0000800d020000390000000103000039000001fb040000410000054f0000013d00000002010000290000000000100435000000200000043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b00000005020000290000000000200435000000200010043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b000000000101041a000000ff00100190000005110000c13d00000002010000290000000000100435000000200000043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b00000005020000290000000000200435000000200010043f0000000001000414000001d50010009c000001d501008041000000c001100210000001d6011001c70000801002000039074e07490000040f0000000100200190000005940000613d000000000101043b000000000201041a000002070220019700000001022001bf000000000021041b0000000001000414000001d50010009c000001d501008041000000c001100210000001d7011001c70000800d020000390000000403000039000001d804000041000000020500002900000005060000290000000007000411074e07440000040f0000000100200190000005940000613d000000400100043d000000600210003900000007030000290000000000320435000000400210003900000060030000390000000000320435000000200210003900000008030000290000000000320435000000050200002900000000002104350000008002100039000000060300002900000001033003670000000304000029000000000004004b00000005044002100000052b0000613d0000000005420019000000000603034f0000000007020019000000006806043c0000000007870436000000000057004b000005270000c13d000000040000006b0000053a0000613d000000000343034f000000000442001900000004050000290000000305500210000000000604043300000000065601cf000000000656022f000000000