UNPKG

@sablier/evm-utils

Version:

Utilities solidity files used across Sablier's smart contracts

1 lines 28.2 kB
{"abi":[{"type":"function","name":"FEE_COLLECTOR_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"FEE_MANAGEMENT_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRoleOrIsAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferAdmin","inputs":[{"name":"newAdmin","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"RoleGranted","inputs":[{"name":"admin","type":"address","indexed":true,"internalType":"address"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"admin","type":"address","indexed":true,"internalType":"address"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"TransferAdmin","inputs":[{"name":"oldAdmin","type":"address","indexed":true,"internalType":"address"},{"name":"newAdmin","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"FEE_COLLECTOR_ROLE()":"62a2a47c","FEE_MANAGEMENT_ROLE()":"8afaa8b8","admin()":"f851a440","grantRole(bytes32,address)":"2f2ff15d","hasRoleOrIsAdmin(bytes32,address)":"e1678c6e","revokeRole(bytes32,address)":"d547741f","transferAdmin(address)":"75829def"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.29+commit.ab55807c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"TransferAdmin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FEE_COLLECTOR_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_MANAGEMENT_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRoleOrIsAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RoleGranted(address,address,bytes32)\":{\"params\":{\"account\":\"The address of the account to which the role is granted.\",\"admin\":\"The address of the admin that granted the role.\",\"role\":\"The identifier of the role.\"}},\"RoleRevoked(address,address,bytes32)\":{\"params\":{\"account\":\"The address of the account from which the role is revoked.\",\"admin\":\"The address of the admin that revoked the role.\",\"role\":\"The identifier of the role.\"}},\"TransferAdmin(address,address)\":{\"params\":{\"newAdmin\":\"The address of the new admin.\",\"oldAdmin\":\"The address of the old admin.\"}}},\"kind\":\"dev\",\"methods\":{\"grantRole(bytes32,address)\":{\"details\":\"Emits {RoleGranted} event. Requirements: - `msg.sender` must be the admin.\",\"params\":{\"account\":\"The address of the account to which the role is granted.\",\"role\":\"The identifier of the role.\"}},\"revokeRole(bytes32,address)\":{\"details\":\"Emits {RoleRevoked} event. Requirements: - `msg.sender` must be the admin.\",\"params\":{\"account\":\"The address of the account from which the role is revoked.\",\"role\":\"The identifier of the role.\"}},\"transferAdmin(address)\":{\"details\":\"Notes: - Does not revert if the admin is the same. - This function can potentially leave the contract without an admin, thereby removing any functionality that is only available to the admin. Requirements: - `msg.sender` must be the contract admin.\",\"params\":{\"newAdmin\":\"The address of the new admin.\"}}},\"title\":\"IRoleAdminable\",\"version\":1},\"userdoc\":{\"events\":{\"RoleGranted(address,address,bytes32)\":{\"notice\":\"Emitted when `account` is granted `role`.\"},\"RoleRevoked(address,address,bytes32)\":{\"notice\":\"Emitted when `account` is revoked `role`.\"},\"TransferAdmin(address,address)\":{\"notice\":\"Emitted when the admin is transferred.\"}},\"kind\":\"user\",\"methods\":{\"FEE_COLLECTOR_ROLE()\":{\"notice\":\"A role with the authority to collect fees from the Sablier contracts.\"},\"FEE_MANAGEMENT_ROLE()\":{\"notice\":\"A role with the authority to update fees across the Sablier contracts.\"},\"admin()\":{\"notice\":\"The address of the admin account or contract.\"},\"grantRole(bytes32,address)\":{\"notice\":\"Grants `role` to `account`. Reverts if `account` already has the role.\"},\"hasRoleOrIsAdmin(bytes32,address)\":{\"notice\":\"Returns `true` if `account` has the `role` or is the admin.\"},\"revokeRole(bytes32,address)\":{\"notice\":\"Revokes `role` from `account`. Reverts if `account` does not have the role.\"},\"transferAdmin(address)\":{\"notice\":\"Transfers the contract admin to a new address.\"}},\"notice\":\"Contract module that provides role-based access control mechanisms, including an admin that can be granted exclusive access to specific functions. The inheriting contract must set the initial admin in the constructor.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IRoleAdminable.sol\":\"IRoleAdminable\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":100000000},\"remappings\":[\":@arbitrum/=node_modules/@arbitrum/\",\":@chainlink/=node_modules/@chainlink/\",\":@eth-optimism/=node_modules/@eth-optimism/\",\":@offchainlabs/=node_modules/@offchainlabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@scroll-tech/=node_modules/@scroll-tech/\",\":@zksync/=node_modules/@zksync/\",\":forge-std/=node_modules/forge-std/\"],\"viaIR\":true},\"sources\":{\"src/interfaces/IAdminable.sol\":{\"keccak256\":\"0x3228d63e9b0b951030c73c42bb071e64f0ff0eadbcbeefad3f29a48366539c26\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acc90ad2bec0e84349b56611b35b56bfb75a5930fd1babb2bd638fbbb15bd126\",\"dweb:/ipfs/QmSLnHx6bo4BQeBKYferfEhZo1Z4xCXdDF1bzJoHUafHt4\"]},\"src/interfaces/IRoleAdminable.sol\":{\"keccak256\":\"0x9fb77d7cfe69d0612514d9ce87377b34b5cab37d011ddfe8299d4da6568f7148\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6fdef13e46066763f8496a3b940dd464ee13edf85592e4c45c4b27e78a564233\",\"dweb:/ipfs/QmUcknJPPm9KEnAUrgoY1mrSUcQmwokbu8K5SUaB1rU1fi\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.29+commit.ab55807c"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"admin","type":"address","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"address","name":"admin","type":"address","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"oldAdmin","type":"address","indexed":true},{"internalType":"address","name":"newAdmin","type":"address","indexed":true}],"type":"event","name":"TransferAdmin","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"FEE_COLLECTOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"FEE_MANAGEMENT_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRoleOrIsAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferAdmin"}],"devdoc":{"kind":"dev","methods":{"grantRole(bytes32,address)":{"details":"Emits {RoleGranted} event. Requirements: - `msg.sender` must be the admin.","params":{"account":"The address of the account to which the role is granted.","role":"The identifier of the role."}},"revokeRole(bytes32,address)":{"details":"Emits {RoleRevoked} event. Requirements: - `msg.sender` must be the admin.","params":{"account":"The address of the account from which the role is revoked.","role":"The identifier of the role."}},"transferAdmin(address)":{"details":"Notes: - Does not revert if the admin is the same. - This function can potentially leave the contract without an admin, thereby removing any functionality that is only available to the admin. Requirements: - `msg.sender` must be the contract admin.","params":{"newAdmin":"The address of the new admin."}}},"version":1},"userdoc":{"kind":"user","methods":{"FEE_COLLECTOR_ROLE()":{"notice":"A role with the authority to collect fees from the Sablier contracts."},"FEE_MANAGEMENT_ROLE()":{"notice":"A role with the authority to update fees across the Sablier contracts."},"admin()":{"notice":"The address of the admin account or contract."},"grantRole(bytes32,address)":{"notice":"Grants `role` to `account`. Reverts if `account` already has the role."},"hasRoleOrIsAdmin(bytes32,address)":{"notice":"Returns `true` if `account` has the `role` or is the admin."},"revokeRole(bytes32,address)":{"notice":"Revokes `role` from `account`. Reverts if `account` does not have the role."},"transferAdmin(address)":{"notice":"Transfers the contract admin to a new address."}},"version":1}},"settings":{"remappings":["@arbitrum/=node_modules/@arbitrum/","@chainlink/=node_modules/@chainlink/","@eth-optimism/=node_modules/@eth-optimism/","@offchainlabs/=node_modules/@offchainlabs/","@openzeppelin/=node_modules/@openzeppelin/","@scroll-tech/=node_modules/@scroll-tech/","@zksync/=node_modules/@zksync/","forge-std/=node_modules/forge-std/"],"optimizer":{"enabled":true,"runs":100000000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/interfaces/IRoleAdminable.sol":"IRoleAdminable"},"evmVersion":"shanghai","libraries":{},"viaIR":true},"sources":{"src/interfaces/IAdminable.sol":{"keccak256":"0x3228d63e9b0b951030c73c42bb071e64f0ff0eadbcbeefad3f29a48366539c26","urls":["bzz-raw://acc90ad2bec0e84349b56611b35b56bfb75a5930fd1babb2bd638fbbb15bd126","dweb:/ipfs/QmSLnHx6bo4BQeBKYferfEhZo1Z4xCXdDF1bzJoHUafHt4"],"license":"GPL-3.0-or-later"},"src/interfaces/IRoleAdminable.sol":{"keccak256":"0x9fb77d7cfe69d0612514d9ce87377b34b5cab37d011ddfe8299d4da6568f7148","urls":["bzz-raw://6fdef13e46066763f8496a3b940dd464ee13edf85592e4c45c4b27e78a564233","dweb:/ipfs/QmUcknJPPm9KEnAUrgoY1mrSUcQmwokbu8K5SUaB1rU1fi"],"license":"GPL-3.0-or-later"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/interfaces/IRoleAdminable.sol","id":62865,"exportedSymbols":{"IAdminable":[62745],"IRoleAdminable":[62864]},"nodeType":"SourceUnit","src":"45:3022:71","nodes":[{"id":62802,"nodeType":"PragmaDirective","src":"45:25:71","nodes":[],"literals":["solidity",">=","0.8",".22"]},{"id":62804,"nodeType":"ImportDirective","src":"72:46:71","nodes":[],"absolutePath":"src/interfaces/IAdminable.sol","file":"./IAdminable.sol","nameLocation":"-1:-1:-1","scope":62865,"sourceUnit":62746,"symbolAliases":[{"foreign":{"id":62803,"name":"IAdminable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62745,"src":"81:10:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62864,"nodeType":"ContractDefinition","src":"380:2686:71","nodes":[{"id":62816,"nodeType":"EventDefinition","src":"889:88:71","nodes":[],"anonymous":false,"documentation":{"id":62808,"nodeType":"StructuredDocumentation","src":"634:250:71","text":"@notice Emitted when `account` is granted `role`.\n @param admin The address of the admin that granted the role.\n @param account The address of the account to which the role is granted.\n @param role The identifier of the role."},"eventSelector":"03b5d550f3da9dfe316fa35cbecc4cee6d2febeaeee1432f30504bd9ce3780a8","name":"RoleGranted","nameLocation":"895:11:71","parameters":{"id":62815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62810,"indexed":true,"mutability":"mutable","name":"admin","nameLocation":"923:5:71","nodeType":"VariableDeclaration","scope":62816,"src":"907:21:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62809,"name":"address","nodeType":"ElementaryTypeName","src":"907:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62812,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"946:7:71","nodeType":"VariableDeclaration","scope":62816,"src":"930:23:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62811,"name":"address","nodeType":"ElementaryTypeName","src":"930:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62814,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"971:4:71","nodeType":"VariableDeclaration","scope":62816,"src":"955:20:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":62813,"name":"bytes32","nodeType":"ElementaryTypeName","src":"955:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"906:70:71"}},{"id":62825,"nodeType":"EventDefinition","src":"1240:88:71","nodes":[],"anonymous":false,"documentation":{"id":62817,"nodeType":"StructuredDocumentation","src":"983:252:71","text":"@notice Emitted when `account` is revoked `role`.\n @param admin The address of the admin that revoked the role.\n @param account The address of the account from which the role is revoked.\n @param role The identifier of the role."},"eventSelector":"d1c3e214f7584ab57912c23f3cead20e310547c9823c8bc891ba162e35622734","name":"RoleRevoked","nameLocation":"1246:11:71","parameters":{"id":62824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62819,"indexed":true,"mutability":"mutable","name":"admin","nameLocation":"1274:5:71","nodeType":"VariableDeclaration","scope":62825,"src":"1258:21:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62818,"name":"address","nodeType":"ElementaryTypeName","src":"1258:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62821,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"1297:7:71","nodeType":"VariableDeclaration","scope":62825,"src":"1281:23:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62820,"name":"address","nodeType":"ElementaryTypeName","src":"1281:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62823,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"1322:4:71","nodeType":"VariableDeclaration","scope":62825,"src":"1306:20:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":62822,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1306:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1257:70:71"}},{"id":62831,"nodeType":"FunctionDefinition","src":"1636:62:71","nodes":[],"documentation":{"id":62826,"nodeType":"StructuredDocumentation","src":"1550:81:71","text":"@notice A role with the authority to collect fees from the Sablier contracts."},"functionSelector":"62a2a47c","implemented":false,"kind":"function","modifiers":[],"name":"FEE_COLLECTOR_ROLE","nameLocation":"1645:18:71","parameters":{"id":62827,"nodeType":"ParameterList","parameters":[],"src":"1663:2:71"},"returnParameters":{"id":62830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62831,"src":"1689:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":62828,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1689:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1688:9:71"},"scope":62864,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":62837,"nodeType":"FunctionDefinition","src":"1791:63:71","nodes":[],"documentation":{"id":62832,"nodeType":"StructuredDocumentation","src":"1704:82:71","text":"@notice A role with the authority to update fees across the Sablier contracts."},"functionSelector":"8afaa8b8","implemented":false,"kind":"function","modifiers":[],"name":"FEE_MANAGEMENT_ROLE","nameLocation":"1800:19:71","parameters":{"id":62833,"nodeType":"ParameterList","parameters":[],"src":"1819:2:71"},"returnParameters":{"id":62836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62835,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62837,"src":"1845:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":62834,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1845:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1844:9:71"},"scope":62864,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":62847,"nodeType":"FunctionDefinition","src":"1936:86:71","nodes":[],"documentation":{"id":62838,"nodeType":"StructuredDocumentation","src":"1860:71:71","text":"@notice Returns `true` if `account` has the `role` or is the admin."},"functionSelector":"e1678c6e","implemented":false,"kind":"function","modifiers":[],"name":"hasRoleOrIsAdmin","nameLocation":"1945:16:71","parameters":{"id":62843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62840,"mutability":"mutable","name":"role","nameLocation":"1970:4:71","nodeType":"VariableDeclaration","scope":62847,"src":"1962:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":62839,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1962:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":62842,"mutability":"mutable","name":"account","nameLocation":"1984:7:71","nodeType":"VariableDeclaration","scope":62847,"src":"1976:15:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62841,"name":"address","nodeType":"ElementaryTypeName","src":"1976:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1961:31:71"},"returnParameters":{"id":62846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62845,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62847,"src":"2016:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":62844,"name":"bool","nodeType":"ElementaryTypeName","src":"2016:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2015:6:71"},"scope":62864,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":62855,"nodeType":"FunctionDefinition","src":"2589:59:71","nodes":[],"documentation":{"id":62848,"nodeType":"StructuredDocumentation","src":"2246:338:71","text":"@notice Grants `role` to `account`. Reverts if `account` already has the role.\n @dev Emits {RoleGranted} event.\n Requirements:\n - `msg.sender` must be the admin.\n @param role The identifier of the role.\n @param account The address of the account to which the role is granted."},"functionSelector":"2f2ff15d","implemented":false,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"2598:9:71","parameters":{"id":62853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62850,"mutability":"mutable","name":"role","nameLocation":"2616:4:71","nodeType":"VariableDeclaration","scope":62855,"src":"2608:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":62849,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2608:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":62852,"mutability":"mutable","name":"account","nameLocation":"2630:7:71","nodeType":"VariableDeclaration","scope":62855,"src":"2622:15:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62851,"name":"address","nodeType":"ElementaryTypeName","src":"2622:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2607:31:71"},"returnParameters":{"id":62854,"nodeType":"ParameterList","parameters":[],"src":"2647:0:71"},"scope":62864,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":62863,"nodeType":"FunctionDefinition","src":"3004:60:71","nodes":[],"documentation":{"id":62856,"nodeType":"StructuredDocumentation","src":"2654:345:71","text":"@notice Revokes `role` from `account`. Reverts if `account` does not have the role.\n @dev Emits {RoleRevoked} event.\n Requirements:\n - `msg.sender` must be the admin.\n @param role The identifier of the role.\n @param account The address of the account from which the role is revoked."},"functionSelector":"d547741f","implemented":false,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"3013:10:71","parameters":{"id":62861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62858,"mutability":"mutable","name":"role","nameLocation":"3032:4:71","nodeType":"VariableDeclaration","scope":62863,"src":"3024:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":62857,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3024:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":62860,"mutability":"mutable","name":"account","nameLocation":"3046:7:71","nodeType":"VariableDeclaration","scope":62863,"src":"3038:15:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62859,"name":"address","nodeType":"ElementaryTypeName","src":"3038:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3023:31:71"},"returnParameters":{"id":62862,"nodeType":"ParameterList","parameters":[],"src":"3063:0:71"},"scope":62864,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":62806,"name":"IAdminable","nameLocations":["408:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":62745,"src":"408:10:71"},"id":62807,"nodeType":"InheritanceSpecifier","src":"408:10:71"}],"canonicalName":"IRoleAdminable","contractDependencies":[],"contractKind":"interface","documentation":{"id":62805,"nodeType":"StructuredDocumentation","src":"120:260:71","text":"@title IRoleAdminable\n @notice Contract module that provides role-based access control mechanisms, including an admin that can be granted\n exclusive access to specific functions. The inheriting contract must set the initial admin in the constructor."},"fullyImplemented":false,"linearizedBaseContracts":[62864,62745],"name":"IRoleAdminable","nameLocation":"390:14:71","scope":62865,"usedErrors":[],"usedEvents":[62732,62816,62825]}],"license":"GPL-3.0-or-later"},"id":71}