3261 lines
130 KiB
JSON
3261 lines
130 KiB
JSON
{
|
|
"contractName": "AccessControlEnumerable",
|
|
"abi": [
|
|
{
|
|
"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": "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": "hasRole",
|
|
"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": "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"
|
|
},
|
|
{
|
|
"inputs": [
|
|
{
|
|
"internalType": "bytes32",
|
|
"name": "role",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "index",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"name": "getRoleMember",
|
|
"outputs": [
|
|
{
|
|
"internalType": "address",
|
|
"name": "",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"inputs": [
|
|
{
|
|
"internalType": "bytes32",
|
|
"name": "role",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"name": "getRoleMemberCount",
|
|
"outputs": [
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
}
|
|
],
|
|
"metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"hasRole\",\"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\":\"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\":{\"details\":\"Extension of {AccessControl} that allows enumerating the members of each role.\",\"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}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"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.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"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`.\"},\"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.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/AccessControlEnumerable.sol\":\"AccessControlEnumerable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xb9a137b317dc4806805f2259686186c0c053c32d80fe9c15ecdbf2eb1cf52849\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8910762bea89696c6dc68a63be98c6ddd597955f8a29418661cc99d0ce090663\",\"dweb:/ipfs/Qmed14MXXFdNYE22bCuVy5XVAMKUo1DncY8BF8VkyrvXmh\"]},\"@openzeppelin/contracts/access/AccessControlEnumerable.sol\":{\"keccak256\":\"0x1304796e9cdc64294735b4222849a240363b2aff374bb58b7c728f8dc0f4aa75\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c87398b4ba8f7c7e6613a5967e5407a5af6807e753d326d5e3b8c29697d33e36\",\"dweb:/ipfs/QmWGzaF9UWB5rNW1h9kvkJaWSf95WkQZ7RVR3bJ24oVgwG\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb2c137c343ef0c4c7ce7b18c1d108afdc9d315a04e48307288d2d05adcbde3a\",\"dweb:/ipfs/QmUxhrAQM3MM3FF5j7AtcXLXguWCJBHJ14BRdVtuoQc8Fh\"]},\"@openzeppelin/contracts/access/IAccessControlEnumerable.sol\":{\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dcc7b09bfa6e18aab262ca372f4a9b1fc82e294b430706a4e1378cf58e6a276\",\"dweb:/ipfs/QmT8oSAcesdctR15HMLhr2a1HRpXymxdjTfdtfTYJcj2N2\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x32c202bd28995dd20c4347b7c6467a6d3241c74c8ad3edcbb610cd9205916c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8179c356adb19e70d6b31a1eedc8c5c7f0c00e669e2540f4099e3844c6074d30\",\"dweb:/ipfs/QmWFbivarEobbqhS1go64ootVuHfVohBseerYy9FTEd1W2\"]},\"@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/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9772845c886f87a3aab315f8d6b68aa599027c20f441b131cd4afaf65b588900\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad2f29a9c17a4f746416c9e254e17671f43c409dbfa6e4d7d76c3e4a83212d31\",\"dweb:/ipfs/QmTqU65L6iu6yqmXKzcNLPioR8etzKPWycpDJCm17ifVdS\"]}},\"version\":1}",
|
|
"bytecode": "0x",
|
|
"deployedBytecode": "0x",
|
|
"immutableReferences": {},
|
|
"generatedSources": [],
|
|
"deployedGeneratedSources": [],
|
|
"sourceMap": "",
|
|
"deployedSourceMap": "",
|
|
"source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/AccessControlEnumerable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IAccessControlEnumerable.sol\";\nimport \"./AccessControl.sol\";\nimport \"../utils/structs/EnumerableSet.sol\";\n\n/**\n * @dev Extension of {AccessControl} that allows enumerating the members of each role.\n */\nabstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {\n using EnumerableSet for EnumerableSet.AddressSet;\n\n mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);\n }\n\n /**\n * @dev Returns one of the accounts that have `role`. `index` must be a\n * value between 0 and {getRoleMemberCount}, non-inclusive.\n *\n * Role bearers are not sorted in any particular way, and their ordering may\n * change at any point.\n *\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\n * you perform all queries on the same block. See the following\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\n * for more information.\n */\n function getRoleMember(bytes32 role, uint256 index) public view override returns (address) {\n return _roleMembers[role].at(index);\n }\n\n /**\n * @dev Returns the number of accounts that have `role`. Can be used\n * together with {getRoleMember} to enumerate all bearers of a role.\n */\n function getRoleMemberCount(bytes32 role) public view override returns (uint256) {\n return _roleMembers[role].length();\n }\n\n /**\n * @dev Overload {_grantRole} to track enumerable memberships\n */\n function _grantRole(bytes32 role, address account) internal virtual override {\n super._grantRole(role, account);\n _roleMembers[role].add(account);\n }\n\n /**\n * @dev Overload {_revokeRole} to track enumerable memberships\n */\n function _revokeRole(bytes32 role, address account) internal virtual override {\n super._revokeRole(role, account);\n _roleMembers[role].remove(account);\n }\n}\n",
|
|
"sourcePath": "@openzeppelin/contracts/access/AccessControlEnumerable.sol",
|
|
"ast": {
|
|
"absolutePath": "@openzeppelin/contracts/access/AccessControlEnumerable.sol",
|
|
"exportedSymbols": {
|
|
"AccessControl": [
|
|
308
|
|
],
|
|
"AccessControlEnumerable": [
|
|
433
|
|
],
|
|
"Context": [
|
|
3590
|
|
],
|
|
"ERC165": [
|
|
4207
|
|
],
|
|
"EnumerableSet": [
|
|
5218
|
|
],
|
|
"IAccessControl": [
|
|
506
|
|
],
|
|
"IAccessControlEnumerable": [
|
|
531
|
|
],
|
|
"IERC165": [
|
|
4219
|
|
],
|
|
"Strings": [
|
|
3793
|
|
]
|
|
},
|
|
"id": 434,
|
|
"license": "MIT",
|
|
"nodeType": "SourceUnit",
|
|
"nodes": [
|
|
{
|
|
"id": 310,
|
|
"literals": [
|
|
"solidity",
|
|
"^",
|
|
"0.8",
|
|
".0"
|
|
],
|
|
"nodeType": "PragmaDirective",
|
|
"src": "103:23:1"
|
|
},
|
|
{
|
|
"absolutePath": "@openzeppelin/contracts/access/IAccessControlEnumerable.sol",
|
|
"file": "./IAccessControlEnumerable.sol",
|
|
"id": 311,
|
|
"nameLocation": "-1:-1:-1",
|
|
"nodeType": "ImportDirective",
|
|
"scope": 434,
|
|
"sourceUnit": 532,
|
|
"src": "128:40:1",
|
|
"symbolAliases": [],
|
|
"unitAlias": ""
|
|
},
|
|
{
|
|
"absolutePath": "@openzeppelin/contracts/access/AccessControl.sol",
|
|
"file": "./AccessControl.sol",
|
|
"id": 312,
|
|
"nameLocation": "-1:-1:-1",
|
|
"nodeType": "ImportDirective",
|
|
"scope": 434,
|
|
"sourceUnit": 309,
|
|
"src": "169:29:1",
|
|
"symbolAliases": [],
|
|
"unitAlias": ""
|
|
},
|
|
{
|
|
"absolutePath": "@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
|
|
"file": "../utils/structs/EnumerableSet.sol",
|
|
"id": 313,
|
|
"nameLocation": "-1:-1:-1",
|
|
"nodeType": "ImportDirective",
|
|
"scope": 434,
|
|
"sourceUnit": 5219,
|
|
"src": "199:44:1",
|
|
"symbolAliases": [],
|
|
"unitAlias": ""
|
|
},
|
|
{
|
|
"abstract": true,
|
|
"baseContracts": [
|
|
{
|
|
"baseName": {
|
|
"id": 315,
|
|
"name": "IAccessControlEnumerable",
|
|
"nodeType": "IdentifierPath",
|
|
"referencedDeclaration": 531,
|
|
"src": "385:24:1"
|
|
},
|
|
"id": 316,
|
|
"nodeType": "InheritanceSpecifier",
|
|
"src": "385:24:1"
|
|
},
|
|
{
|
|
"baseName": {
|
|
"id": 317,
|
|
"name": "AccessControl",
|
|
"nodeType": "IdentifierPath",
|
|
"referencedDeclaration": 308,
|
|
"src": "411:13:1"
|
|
},
|
|
"id": 318,
|
|
"nodeType": "InheritanceSpecifier",
|
|
"src": "411:13:1"
|
|
}
|
|
],
|
|
"canonicalName": "AccessControlEnumerable",
|
|
"contractDependencies": [],
|
|
"contractKind": "contract",
|
|
"documentation": {
|
|
"id": 314,
|
|
"nodeType": "StructuredDocumentation",
|
|
"src": "245:94:1",
|
|
"text": " @dev Extension of {AccessControl} that allows enumerating the members of each role."
|
|
},
|
|
"fullyImplemented": true,
|
|
"id": 433,
|
|
"linearizedBaseContracts": [
|
|
433,
|
|
308,
|
|
4207,
|
|
4219,
|
|
531,
|
|
506,
|
|
3590
|
|
],
|
|
"name": "AccessControlEnumerable",
|
|
"nameLocation": "358:23:1",
|
|
"nodeType": "ContractDefinition",
|
|
"nodes": [
|
|
{
|
|
"id": 322,
|
|
"libraryName": {
|
|
"id": 319,
|
|
"name": "EnumerableSet",
|
|
"nodeType": "IdentifierPath",
|
|
"referencedDeclaration": 5218,
|
|
"src": "437:13:1"
|
|
},
|
|
"nodeType": "UsingForDirective",
|
|
"src": "431:49:1",
|
|
"typeName": {
|
|
"id": 321,
|
|
"nodeType": "UserDefinedTypeName",
|
|
"pathNode": {
|
|
"id": 320,
|
|
"name": "EnumerableSet.AddressSet",
|
|
"nodeType": "IdentifierPath",
|
|
"referencedDeclaration": 4931,
|
|
"src": "455:24:1"
|
|
},
|
|
"referencedDeclaration": 4931,
|
|
"src": "455:24:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_struct$_AddressSet_$4931_storage_ptr",
|
|
"typeString": "struct EnumerableSet.AddressSet"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"constant": false,
|
|
"id": 327,
|
|
"mutability": "mutable",
|
|
"name": "_roleMembers",
|
|
"nameLocation": "539:12:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 433,
|
|
"src": "486:65:1",
|
|
"stateVariable": true,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_AddressSet_$4931_storage_$",
|
|
"typeString": "mapping(bytes32 => struct EnumerableSet.AddressSet)"
|
|
},
|
|
"typeName": {
|
|
"id": 326,
|
|
"keyType": {
|
|
"id": 323,
|
|
"name": "bytes32",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "494:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"nodeType": "Mapping",
|
|
"src": "486:44:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_AddressSet_$4931_storage_$",
|
|
"typeString": "mapping(bytes32 => struct EnumerableSet.AddressSet)"
|
|
},
|
|
"valueType": {
|
|
"id": 325,
|
|
"nodeType": "UserDefinedTypeName",
|
|
"pathNode": {
|
|
"id": 324,
|
|
"name": "EnumerableSet.AddressSet",
|
|
"nodeType": "IdentifierPath",
|
|
"referencedDeclaration": 4931,
|
|
"src": "505:24:1"
|
|
},
|
|
"referencedDeclaration": 4931,
|
|
"src": "505:24:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_struct$_AddressSet_$4931_storage_ptr",
|
|
"typeString": "struct EnumerableSet.AddressSet"
|
|
}
|
|
}
|
|
},
|
|
"visibility": "private"
|
|
},
|
|
{
|
|
"baseFunctions": [
|
|
62
|
|
],
|
|
"body": {
|
|
"id": 348,
|
|
"nodeType": "Block",
|
|
"src": "710:121:1",
|
|
"statements": [
|
|
{
|
|
"expression": {
|
|
"commonType": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
},
|
|
"id": 346,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"leftExpression": {
|
|
"commonType": {
|
|
"typeIdentifier": "t_bytes4",
|
|
"typeString": "bytes4"
|
|
},
|
|
"id": 341,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"leftExpression": {
|
|
"id": 336,
|
|
"name": "interfaceId",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 330,
|
|
"src": "727:11:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes4",
|
|
"typeString": "bytes4"
|
|
}
|
|
},
|
|
"nodeType": "BinaryOperation",
|
|
"operator": "==",
|
|
"rightExpression": {
|
|
"expression": {
|
|
"arguments": [
|
|
{
|
|
"id": 338,
|
|
"name": "IAccessControlEnumerable",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 531,
|
|
"src": "747:24:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_type$_t_contract$_IAccessControlEnumerable_$531_$",
|
|
"typeString": "type(contract IAccessControlEnumerable)"
|
|
}
|
|
}
|
|
],
|
|
"expression": {
|
|
"argumentTypes": [
|
|
{
|
|
"typeIdentifier": "t_type$_t_contract$_IAccessControlEnumerable_$531_$",
|
|
"typeString": "type(contract IAccessControlEnumerable)"
|
|
}
|
|
],
|
|
"id": 337,
|
|
"name": "type",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 4294967269,
|
|
"src": "742:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
|
|
"typeString": "function () pure"
|
|
}
|
|
},
|
|
"id": 339,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": true,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "742:30:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_magic_meta_type_t_contract$_IAccessControlEnumerable_$531",
|
|
"typeString": "type(contract IAccessControlEnumerable)"
|
|
}
|
|
},
|
|
"id": 340,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": true,
|
|
"lValueRequested": false,
|
|
"memberName": "interfaceId",
|
|
"nodeType": "MemberAccess",
|
|
"src": "742:42:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes4",
|
|
"typeString": "bytes4"
|
|
}
|
|
},
|
|
"src": "727:57:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
}
|
|
},
|
|
"nodeType": "BinaryOperation",
|
|
"operator": "||",
|
|
"rightExpression": {
|
|
"arguments": [
|
|
{
|
|
"id": 344,
|
|
"name": "interfaceId",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 330,
|
|
"src": "812:11:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes4",
|
|
"typeString": "bytes4"
|
|
}
|
|
}
|
|
],
|
|
"expression": {
|
|
"argumentTypes": [
|
|
{
|
|
"typeIdentifier": "t_bytes4",
|
|
"typeString": "bytes4"
|
|
}
|
|
],
|
|
"expression": {
|
|
"id": 342,
|
|
"name": "super",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 4294967271,
|
|
"src": "788:5:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_type$_t_super$_AccessControlEnumerable_$433_$",
|
|
"typeString": "type(contract super AccessControlEnumerable)"
|
|
}
|
|
},
|
|
"id": 343,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"memberName": "supportsInterface",
|
|
"nodeType": "MemberAccess",
|
|
"referencedDeclaration": 62,
|
|
"src": "788:23:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
|
|
"typeString": "function (bytes4) view returns (bool)"
|
|
}
|
|
},
|
|
"id": 345,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "788:36:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
}
|
|
},
|
|
"src": "727:97:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
}
|
|
},
|
|
"functionReturnParameters": 335,
|
|
"id": 347,
|
|
"nodeType": "Return",
|
|
"src": "720:104:1"
|
|
}
|
|
]
|
|
},
|
|
"documentation": {
|
|
"id": 328,
|
|
"nodeType": "StructuredDocumentation",
|
|
"src": "558:56:1",
|
|
"text": " @dev See {IERC165-supportsInterface}."
|
|
},
|
|
"functionSelector": "01ffc9a7",
|
|
"id": 349,
|
|
"implemented": true,
|
|
"kind": "function",
|
|
"modifiers": [],
|
|
"name": "supportsInterface",
|
|
"nameLocation": "628:17:1",
|
|
"nodeType": "FunctionDefinition",
|
|
"overrides": {
|
|
"id": 332,
|
|
"nodeType": "OverrideSpecifier",
|
|
"overrides": [],
|
|
"src": "686:8:1"
|
|
},
|
|
"parameters": {
|
|
"id": 331,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 330,
|
|
"mutability": "mutable",
|
|
"name": "interfaceId",
|
|
"nameLocation": "653:11:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 349,
|
|
"src": "646:18:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes4",
|
|
"typeString": "bytes4"
|
|
},
|
|
"typeName": {
|
|
"id": 329,
|
|
"name": "bytes4",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "646:6:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes4",
|
|
"typeString": "bytes4"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "645:20:1"
|
|
},
|
|
"returnParameters": {
|
|
"id": 335,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 334,
|
|
"mutability": "mutable",
|
|
"name": "",
|
|
"nameLocation": "-1:-1:-1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 349,
|
|
"src": "704:4:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
},
|
|
"typeName": {
|
|
"id": 333,
|
|
"name": "bool",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "704:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "703:6:1"
|
|
},
|
|
"scope": 433,
|
|
"src": "619:212:1",
|
|
"stateMutability": "view",
|
|
"virtual": true,
|
|
"visibility": "public"
|
|
},
|
|
{
|
|
"baseFunctions": [
|
|
522
|
|
],
|
|
"body": {
|
|
"id": 367,
|
|
"nodeType": "Block",
|
|
"src": "1507:52:1",
|
|
"statements": [
|
|
{
|
|
"expression": {
|
|
"arguments": [
|
|
{
|
|
"id": 364,
|
|
"name": "index",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 354,
|
|
"src": "1546:5:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_uint256",
|
|
"typeString": "uint256"
|
|
}
|
|
}
|
|
],
|
|
"expression": {
|
|
"argumentTypes": [
|
|
{
|
|
"typeIdentifier": "t_uint256",
|
|
"typeString": "uint256"
|
|
}
|
|
],
|
|
"expression": {
|
|
"baseExpression": {
|
|
"id": 360,
|
|
"name": "_roleMembers",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 327,
|
|
"src": "1524:12:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_AddressSet_$4931_storage_$",
|
|
"typeString": "mapping(bytes32 => struct EnumerableSet.AddressSet storage ref)"
|
|
}
|
|
},
|
|
"id": 362,
|
|
"indexExpression": {
|
|
"id": 361,
|
|
"name": "role",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 352,
|
|
"src": "1537:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"nodeType": "IndexAccess",
|
|
"src": "1524:18:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_struct$_AddressSet_$4931_storage",
|
|
"typeString": "struct EnumerableSet.AddressSet storage ref"
|
|
}
|
|
},
|
|
"id": 363,
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"memberName": "at",
|
|
"nodeType": "MemberAccess",
|
|
"referencedDeclaration": 5054,
|
|
"src": "1524:21:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$4931_storage_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_struct$_AddressSet_$4931_storage_ptr_$",
|
|
"typeString": "function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"
|
|
}
|
|
},
|
|
"id": 365,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "1524:28:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
},
|
|
"functionReturnParameters": 359,
|
|
"id": 366,
|
|
"nodeType": "Return",
|
|
"src": "1517:35:1"
|
|
}
|
|
]
|
|
},
|
|
"documentation": {
|
|
"id": 350,
|
|
"nodeType": "StructuredDocumentation",
|
|
"src": "837:574:1",
|
|
"text": " @dev Returns one of the accounts that have `role`. `index` must be a\n value between 0 and {getRoleMemberCount}, non-inclusive.\n Role bearers are not sorted in any particular way, and their ordering may\n change at any point.\n WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\n you perform all queries on the same block. See the following\n https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\n for more information."
|
|
},
|
|
"functionSelector": "9010d07c",
|
|
"id": 368,
|
|
"implemented": true,
|
|
"kind": "function",
|
|
"modifiers": [],
|
|
"name": "getRoleMember",
|
|
"nameLocation": "1425:13:1",
|
|
"nodeType": "FunctionDefinition",
|
|
"overrides": {
|
|
"id": 356,
|
|
"nodeType": "OverrideSpecifier",
|
|
"overrides": [],
|
|
"src": "1480:8:1"
|
|
},
|
|
"parameters": {
|
|
"id": 355,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 352,
|
|
"mutability": "mutable",
|
|
"name": "role",
|
|
"nameLocation": "1447:4:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 368,
|
|
"src": "1439:12:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
},
|
|
"typeName": {
|
|
"id": 351,
|
|
"name": "bytes32",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "1439:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"id": 354,
|
|
"mutability": "mutable",
|
|
"name": "index",
|
|
"nameLocation": "1461:5:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 368,
|
|
"src": "1453:13:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_uint256",
|
|
"typeString": "uint256"
|
|
},
|
|
"typeName": {
|
|
"id": 353,
|
|
"name": "uint256",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "1453:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_uint256",
|
|
"typeString": "uint256"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "1438:29:1"
|
|
},
|
|
"returnParameters": {
|
|
"id": 359,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 358,
|
|
"mutability": "mutable",
|
|
"name": "",
|
|
"nameLocation": "-1:-1:-1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 368,
|
|
"src": "1498:7:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
},
|
|
"typeName": {
|
|
"id": 357,
|
|
"name": "address",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "1498:7:1",
|
|
"stateMutability": "nonpayable",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "1497:9:1"
|
|
},
|
|
"scope": 433,
|
|
"src": "1416:143:1",
|
|
"stateMutability": "view",
|
|
"virtual": false,
|
|
"visibility": "public"
|
|
},
|
|
{
|
|
"baseFunctions": [
|
|
530
|
|
],
|
|
"body": {
|
|
"id": 383,
|
|
"nodeType": "Block",
|
|
"src": "1808:51:1",
|
|
"statements": [
|
|
{
|
|
"expression": {
|
|
"arguments": [],
|
|
"expression": {
|
|
"argumentTypes": [],
|
|
"expression": {
|
|
"baseExpression": {
|
|
"id": 377,
|
|
"name": "_roleMembers",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 327,
|
|
"src": "1825:12:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_AddressSet_$4931_storage_$",
|
|
"typeString": "mapping(bytes32 => struct EnumerableSet.AddressSet storage ref)"
|
|
}
|
|
},
|
|
"id": 379,
|
|
"indexExpression": {
|
|
"id": 378,
|
|
"name": "role",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 371,
|
|
"src": "1838:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"nodeType": "IndexAccess",
|
|
"src": "1825:18:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_struct$_AddressSet_$4931_storage",
|
|
"typeString": "struct EnumerableSet.AddressSet storage ref"
|
|
}
|
|
},
|
|
"id": 380,
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"memberName": "length",
|
|
"nodeType": "MemberAccess",
|
|
"referencedDeclaration": 5027,
|
|
"src": "1825:25:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$4931_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$4931_storage_ptr_$",
|
|
"typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"
|
|
}
|
|
},
|
|
"id": 381,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "1825:27:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_uint256",
|
|
"typeString": "uint256"
|
|
}
|
|
},
|
|
"functionReturnParameters": 376,
|
|
"id": 382,
|
|
"nodeType": "Return",
|
|
"src": "1818:34:1"
|
|
}
|
|
]
|
|
},
|
|
"documentation": {
|
|
"id": 369,
|
|
"nodeType": "StructuredDocumentation",
|
|
"src": "1565:157:1",
|
|
"text": " @dev Returns the number of accounts that have `role`. Can be used\n together with {getRoleMember} to enumerate all bearers of a role."
|
|
},
|
|
"functionSelector": "ca15c873",
|
|
"id": 384,
|
|
"implemented": true,
|
|
"kind": "function",
|
|
"modifiers": [],
|
|
"name": "getRoleMemberCount",
|
|
"nameLocation": "1736:18:1",
|
|
"nodeType": "FunctionDefinition",
|
|
"overrides": {
|
|
"id": 373,
|
|
"nodeType": "OverrideSpecifier",
|
|
"overrides": [],
|
|
"src": "1781:8:1"
|
|
},
|
|
"parameters": {
|
|
"id": 372,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 371,
|
|
"mutability": "mutable",
|
|
"name": "role",
|
|
"nameLocation": "1763:4:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 384,
|
|
"src": "1755:12:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
},
|
|
"typeName": {
|
|
"id": 370,
|
|
"name": "bytes32",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "1755:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "1754:14:1"
|
|
},
|
|
"returnParameters": {
|
|
"id": 376,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 375,
|
|
"mutability": "mutable",
|
|
"name": "",
|
|
"nameLocation": "-1:-1:-1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 384,
|
|
"src": "1799:7:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_uint256",
|
|
"typeString": "uint256"
|
|
},
|
|
"typeName": {
|
|
"id": 374,
|
|
"name": "uint256",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "1799:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_uint256",
|
|
"typeString": "uint256"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "1798:9:1"
|
|
},
|
|
"scope": 433,
|
|
"src": "1727:132:1",
|
|
"stateMutability": "view",
|
|
"virtual": false,
|
|
"visibility": "public"
|
|
},
|
|
{
|
|
"baseFunctions": [
|
|
276
|
|
],
|
|
"body": {
|
|
"id": 407,
|
|
"nodeType": "Block",
|
|
"src": "2024:89:1",
|
|
"statements": [
|
|
{
|
|
"expression": {
|
|
"arguments": [
|
|
{
|
|
"id": 396,
|
|
"name": "role",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 387,
|
|
"src": "2051:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
{
|
|
"id": 397,
|
|
"name": "account",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 389,
|
|
"src": "2057:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
}
|
|
],
|
|
"expression": {
|
|
"argumentTypes": [
|
|
{
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
},
|
|
{
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
],
|
|
"expression": {
|
|
"id": 393,
|
|
"name": "super",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 4294967271,
|
|
"src": "2034:5:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_type$_t_super$_AccessControlEnumerable_$433_$",
|
|
"typeString": "type(contract super AccessControlEnumerable)"
|
|
}
|
|
},
|
|
"id": 395,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"memberName": "_grantRole",
|
|
"nodeType": "MemberAccess",
|
|
"referencedDeclaration": 276,
|
|
"src": "2034:16:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
|
|
"typeString": "function (bytes32,address)"
|
|
}
|
|
},
|
|
"id": 398,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "2034:31:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_tuple$__$",
|
|
"typeString": "tuple()"
|
|
}
|
|
},
|
|
"id": 399,
|
|
"nodeType": "ExpressionStatement",
|
|
"src": "2034:31:1"
|
|
},
|
|
{
|
|
"expression": {
|
|
"arguments": [
|
|
{
|
|
"id": 404,
|
|
"name": "account",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 389,
|
|
"src": "2098:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
}
|
|
],
|
|
"expression": {
|
|
"argumentTypes": [
|
|
{
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
],
|
|
"expression": {
|
|
"baseExpression": {
|
|
"id": 400,
|
|
"name": "_roleMembers",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 327,
|
|
"src": "2075:12:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_AddressSet_$4931_storage_$",
|
|
"typeString": "mapping(bytes32 => struct EnumerableSet.AddressSet storage ref)"
|
|
}
|
|
},
|
|
"id": 402,
|
|
"indexExpression": {
|
|
"id": 401,
|
|
"name": "role",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 387,
|
|
"src": "2088:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"nodeType": "IndexAccess",
|
|
"src": "2075:18:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_struct$_AddressSet_$4931_storage",
|
|
"typeString": "struct EnumerableSet.AddressSet storage ref"
|
|
}
|
|
},
|
|
"id": 403,
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"memberName": "add",
|
|
"nodeType": "MemberAccess",
|
|
"referencedDeclaration": 4958,
|
|
"src": "2075:22:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$4931_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$4931_storage_ptr_$",
|
|
"typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
|
|
}
|
|
},
|
|
"id": 405,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "2075:31:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
}
|
|
},
|
|
"id": 406,
|
|
"nodeType": "ExpressionStatement",
|
|
"src": "2075:31:1"
|
|
}
|
|
]
|
|
},
|
|
"documentation": {
|
|
"id": 385,
|
|
"nodeType": "StructuredDocumentation",
|
|
"src": "1865:77:1",
|
|
"text": " @dev Overload {_grantRole} to track enumerable memberships"
|
|
},
|
|
"id": 408,
|
|
"implemented": true,
|
|
"kind": "function",
|
|
"modifiers": [],
|
|
"name": "_grantRole",
|
|
"nameLocation": "1956:10:1",
|
|
"nodeType": "FunctionDefinition",
|
|
"overrides": {
|
|
"id": 391,
|
|
"nodeType": "OverrideSpecifier",
|
|
"overrides": [],
|
|
"src": "2015:8:1"
|
|
},
|
|
"parameters": {
|
|
"id": 390,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 387,
|
|
"mutability": "mutable",
|
|
"name": "role",
|
|
"nameLocation": "1975:4:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 408,
|
|
"src": "1967:12:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
},
|
|
"typeName": {
|
|
"id": 386,
|
|
"name": "bytes32",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "1967:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"id": 389,
|
|
"mutability": "mutable",
|
|
"name": "account",
|
|
"nameLocation": "1989:7:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 408,
|
|
"src": "1981:15:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
},
|
|
"typeName": {
|
|
"id": 388,
|
|
"name": "address",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "1981:7:1",
|
|
"stateMutability": "nonpayable",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "1966:31:1"
|
|
},
|
|
"returnParameters": {
|
|
"id": 392,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [],
|
|
"src": "2024:0:1"
|
|
},
|
|
"scope": 433,
|
|
"src": "1947:166:1",
|
|
"stateMutability": "nonpayable",
|
|
"virtual": true,
|
|
"visibility": "internal"
|
|
},
|
|
{
|
|
"baseFunctions": [
|
|
307
|
|
],
|
|
"body": {
|
|
"id": 431,
|
|
"nodeType": "Block",
|
|
"src": "2280:93:1",
|
|
"statements": [
|
|
{
|
|
"expression": {
|
|
"arguments": [
|
|
{
|
|
"id": 420,
|
|
"name": "role",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 411,
|
|
"src": "2308:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
{
|
|
"id": 421,
|
|
"name": "account",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 413,
|
|
"src": "2314:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
}
|
|
],
|
|
"expression": {
|
|
"argumentTypes": [
|
|
{
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
},
|
|
{
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
],
|
|
"expression": {
|
|
"id": 417,
|
|
"name": "super",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 4294967271,
|
|
"src": "2290:5:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_type$_t_super$_AccessControlEnumerable_$433_$",
|
|
"typeString": "type(contract super AccessControlEnumerable)"
|
|
}
|
|
},
|
|
"id": 419,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"memberName": "_revokeRole",
|
|
"nodeType": "MemberAccess",
|
|
"referencedDeclaration": 307,
|
|
"src": "2290:17:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
|
|
"typeString": "function (bytes32,address)"
|
|
}
|
|
},
|
|
"id": 422,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "2290:32:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_tuple$__$",
|
|
"typeString": "tuple()"
|
|
}
|
|
},
|
|
"id": 423,
|
|
"nodeType": "ExpressionStatement",
|
|
"src": "2290:32:1"
|
|
},
|
|
{
|
|
"expression": {
|
|
"arguments": [
|
|
{
|
|
"id": 428,
|
|
"name": "account",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 413,
|
|
"src": "2358:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
}
|
|
],
|
|
"expression": {
|
|
"argumentTypes": [
|
|
{
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
],
|
|
"expression": {
|
|
"baseExpression": {
|
|
"id": 424,
|
|
"name": "_roleMembers",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 327,
|
|
"src": "2332:12:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_AddressSet_$4931_storage_$",
|
|
"typeString": "mapping(bytes32 => struct EnumerableSet.AddressSet storage ref)"
|
|
}
|
|
},
|
|
"id": 426,
|
|
"indexExpression": {
|
|
"id": 425,
|
|
"name": "role",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 411,
|
|
"src": "2345:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"nodeType": "IndexAccess",
|
|
"src": "2332:18:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_struct$_AddressSet_$4931_storage",
|
|
"typeString": "struct EnumerableSet.AddressSet storage ref"
|
|
}
|
|
},
|
|
"id": 427,
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"memberName": "remove",
|
|
"nodeType": "MemberAccess",
|
|
"referencedDeclaration": 4985,
|
|
"src": "2332:25:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$4931_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$4931_storage_ptr_$",
|
|
"typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
|
|
}
|
|
},
|
|
"id": 429,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "2332:34:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
}
|
|
},
|
|
"id": 430,
|
|
"nodeType": "ExpressionStatement",
|
|
"src": "2332:34:1"
|
|
}
|
|
]
|
|
},
|
|
"documentation": {
|
|
"id": 409,
|
|
"nodeType": "StructuredDocumentation",
|
|
"src": "2119:78:1",
|
|
"text": " @dev Overload {_revokeRole} to track enumerable memberships"
|
|
},
|
|
"id": 432,
|
|
"implemented": true,
|
|
"kind": "function",
|
|
"modifiers": [],
|
|
"name": "_revokeRole",
|
|
"nameLocation": "2211:11:1",
|
|
"nodeType": "FunctionDefinition",
|
|
"overrides": {
|
|
"id": 415,
|
|
"nodeType": "OverrideSpecifier",
|
|
"overrides": [],
|
|
"src": "2271:8:1"
|
|
},
|
|
"parameters": {
|
|
"id": 414,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 411,
|
|
"mutability": "mutable",
|
|
"name": "role",
|
|
"nameLocation": "2231:4:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 432,
|
|
"src": "2223:12:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
},
|
|
"typeName": {
|
|
"id": 410,
|
|
"name": "bytes32",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "2223:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"id": 413,
|
|
"mutability": "mutable",
|
|
"name": "account",
|
|
"nameLocation": "2245:7:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 432,
|
|
"src": "2237:15:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
},
|
|
"typeName": {
|
|
"id": 412,
|
|
"name": "address",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "2237:7:1",
|
|
"stateMutability": "nonpayable",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "2222:31:1"
|
|
},
|
|
"returnParameters": {
|
|
"id": 416,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [],
|
|
"src": "2280:0:1"
|
|
},
|
|
"scope": 433,
|
|
"src": "2202:171:1",
|
|
"stateMutability": "nonpayable",
|
|
"virtual": true,
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"scope": 434,
|
|
"src": "340:2035:1",
|
|
"usedErrors": []
|
|
}
|
|
],
|
|
"src": "103:2273:1"
|
|
},
|
|
"legacyAST": {
|
|
"absolutePath": "@openzeppelin/contracts/access/AccessControlEnumerable.sol",
|
|
"exportedSymbols": {
|
|
"AccessControl": [
|
|
308
|
|
],
|
|
"AccessControlEnumerable": [
|
|
433
|
|
],
|
|
"Context": [
|
|
3590
|
|
],
|
|
"ERC165": [
|
|
4207
|
|
],
|
|
"EnumerableSet": [
|
|
5218
|
|
],
|
|
"IAccessControl": [
|
|
506
|
|
],
|
|
"IAccessControlEnumerable": [
|
|
531
|
|
],
|
|
"IERC165": [
|
|
4219
|
|
],
|
|
"Strings": [
|
|
3793
|
|
]
|
|
},
|
|
"id": 434,
|
|
"license": "MIT",
|
|
"nodeType": "SourceUnit",
|
|
"nodes": [
|
|
{
|
|
"id": 310,
|
|
"literals": [
|
|
"solidity",
|
|
"^",
|
|
"0.8",
|
|
".0"
|
|
],
|
|
"nodeType": "PragmaDirective",
|
|
"src": "103:23:1"
|
|
},
|
|
{
|
|
"absolutePath": "@openzeppelin/contracts/access/IAccessControlEnumerable.sol",
|
|
"file": "./IAccessControlEnumerable.sol",
|
|
"id": 311,
|
|
"nameLocation": "-1:-1:-1",
|
|
"nodeType": "ImportDirective",
|
|
"scope": 434,
|
|
"sourceUnit": 532,
|
|
"src": "128:40:1",
|
|
"symbolAliases": [],
|
|
"unitAlias": ""
|
|
},
|
|
{
|
|
"absolutePath": "@openzeppelin/contracts/access/AccessControl.sol",
|
|
"file": "./AccessControl.sol",
|
|
"id": 312,
|
|
"nameLocation": "-1:-1:-1",
|
|
"nodeType": "ImportDirective",
|
|
"scope": 434,
|
|
"sourceUnit": 309,
|
|
"src": "169:29:1",
|
|
"symbolAliases": [],
|
|
"unitAlias": ""
|
|
},
|
|
{
|
|
"absolutePath": "@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
|
|
"file": "../utils/structs/EnumerableSet.sol",
|
|
"id": 313,
|
|
"nameLocation": "-1:-1:-1",
|
|
"nodeType": "ImportDirective",
|
|
"scope": 434,
|
|
"sourceUnit": 5219,
|
|
"src": "199:44:1",
|
|
"symbolAliases": [],
|
|
"unitAlias": ""
|
|
},
|
|
{
|
|
"abstract": true,
|
|
"baseContracts": [
|
|
{
|
|
"baseName": {
|
|
"id": 315,
|
|
"name": "IAccessControlEnumerable",
|
|
"nodeType": "IdentifierPath",
|
|
"referencedDeclaration": 531,
|
|
"src": "385:24:1"
|
|
},
|
|
"id": 316,
|
|
"nodeType": "InheritanceSpecifier",
|
|
"src": "385:24:1"
|
|
},
|
|
{
|
|
"baseName": {
|
|
"id": 317,
|
|
"name": "AccessControl",
|
|
"nodeType": "IdentifierPath",
|
|
"referencedDeclaration": 308,
|
|
"src": "411:13:1"
|
|
},
|
|
"id": 318,
|
|
"nodeType": "InheritanceSpecifier",
|
|
"src": "411:13:1"
|
|
}
|
|
],
|
|
"canonicalName": "AccessControlEnumerable",
|
|
"contractDependencies": [],
|
|
"contractKind": "contract",
|
|
"documentation": {
|
|
"id": 314,
|
|
"nodeType": "StructuredDocumentation",
|
|
"src": "245:94:1",
|
|
"text": " @dev Extension of {AccessControl} that allows enumerating the members of each role."
|
|
},
|
|
"fullyImplemented": true,
|
|
"id": 433,
|
|
"linearizedBaseContracts": [
|
|
433,
|
|
308,
|
|
4207,
|
|
4219,
|
|
531,
|
|
506,
|
|
3590
|
|
],
|
|
"name": "AccessControlEnumerable",
|
|
"nameLocation": "358:23:1",
|
|
"nodeType": "ContractDefinition",
|
|
"nodes": [
|
|
{
|
|
"id": 322,
|
|
"libraryName": {
|
|
"id": 319,
|
|
"name": "EnumerableSet",
|
|
"nodeType": "IdentifierPath",
|
|
"referencedDeclaration": 5218,
|
|
"src": "437:13:1"
|
|
},
|
|
"nodeType": "UsingForDirective",
|
|
"src": "431:49:1",
|
|
"typeName": {
|
|
"id": 321,
|
|
"nodeType": "UserDefinedTypeName",
|
|
"pathNode": {
|
|
"id": 320,
|
|
"name": "EnumerableSet.AddressSet",
|
|
"nodeType": "IdentifierPath",
|
|
"referencedDeclaration": 4931,
|
|
"src": "455:24:1"
|
|
},
|
|
"referencedDeclaration": 4931,
|
|
"src": "455:24:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_struct$_AddressSet_$4931_storage_ptr",
|
|
"typeString": "struct EnumerableSet.AddressSet"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"constant": false,
|
|
"id": 327,
|
|
"mutability": "mutable",
|
|
"name": "_roleMembers",
|
|
"nameLocation": "539:12:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 433,
|
|
"src": "486:65:1",
|
|
"stateVariable": true,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_AddressSet_$4931_storage_$",
|
|
"typeString": "mapping(bytes32 => struct EnumerableSet.AddressSet)"
|
|
},
|
|
"typeName": {
|
|
"id": 326,
|
|
"keyType": {
|
|
"id": 323,
|
|
"name": "bytes32",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "494:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"nodeType": "Mapping",
|
|
"src": "486:44:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_AddressSet_$4931_storage_$",
|
|
"typeString": "mapping(bytes32 => struct EnumerableSet.AddressSet)"
|
|
},
|
|
"valueType": {
|
|
"id": 325,
|
|
"nodeType": "UserDefinedTypeName",
|
|
"pathNode": {
|
|
"id": 324,
|
|
"name": "EnumerableSet.AddressSet",
|
|
"nodeType": "IdentifierPath",
|
|
"referencedDeclaration": 4931,
|
|
"src": "505:24:1"
|
|
},
|
|
"referencedDeclaration": 4931,
|
|
"src": "505:24:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_struct$_AddressSet_$4931_storage_ptr",
|
|
"typeString": "struct EnumerableSet.AddressSet"
|
|
}
|
|
}
|
|
},
|
|
"visibility": "private"
|
|
},
|
|
{
|
|
"baseFunctions": [
|
|
62
|
|
],
|
|
"body": {
|
|
"id": 348,
|
|
"nodeType": "Block",
|
|
"src": "710:121:1",
|
|
"statements": [
|
|
{
|
|
"expression": {
|
|
"commonType": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
},
|
|
"id": 346,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"leftExpression": {
|
|
"commonType": {
|
|
"typeIdentifier": "t_bytes4",
|
|
"typeString": "bytes4"
|
|
},
|
|
"id": 341,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"leftExpression": {
|
|
"id": 336,
|
|
"name": "interfaceId",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 330,
|
|
"src": "727:11:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes4",
|
|
"typeString": "bytes4"
|
|
}
|
|
},
|
|
"nodeType": "BinaryOperation",
|
|
"operator": "==",
|
|
"rightExpression": {
|
|
"expression": {
|
|
"arguments": [
|
|
{
|
|
"id": 338,
|
|
"name": "IAccessControlEnumerable",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 531,
|
|
"src": "747:24:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_type$_t_contract$_IAccessControlEnumerable_$531_$",
|
|
"typeString": "type(contract IAccessControlEnumerable)"
|
|
}
|
|
}
|
|
],
|
|
"expression": {
|
|
"argumentTypes": [
|
|
{
|
|
"typeIdentifier": "t_type$_t_contract$_IAccessControlEnumerable_$531_$",
|
|
"typeString": "type(contract IAccessControlEnumerable)"
|
|
}
|
|
],
|
|
"id": 337,
|
|
"name": "type",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 4294967269,
|
|
"src": "742:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
|
|
"typeString": "function () pure"
|
|
}
|
|
},
|
|
"id": 339,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": true,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "742:30:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_magic_meta_type_t_contract$_IAccessControlEnumerable_$531",
|
|
"typeString": "type(contract IAccessControlEnumerable)"
|
|
}
|
|
},
|
|
"id": 340,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": true,
|
|
"lValueRequested": false,
|
|
"memberName": "interfaceId",
|
|
"nodeType": "MemberAccess",
|
|
"src": "742:42:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes4",
|
|
"typeString": "bytes4"
|
|
}
|
|
},
|
|
"src": "727:57:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
}
|
|
},
|
|
"nodeType": "BinaryOperation",
|
|
"operator": "||",
|
|
"rightExpression": {
|
|
"arguments": [
|
|
{
|
|
"id": 344,
|
|
"name": "interfaceId",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 330,
|
|
"src": "812:11:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes4",
|
|
"typeString": "bytes4"
|
|
}
|
|
}
|
|
],
|
|
"expression": {
|
|
"argumentTypes": [
|
|
{
|
|
"typeIdentifier": "t_bytes4",
|
|
"typeString": "bytes4"
|
|
}
|
|
],
|
|
"expression": {
|
|
"id": 342,
|
|
"name": "super",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 4294967271,
|
|
"src": "788:5:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_type$_t_super$_AccessControlEnumerable_$433_$",
|
|
"typeString": "type(contract super AccessControlEnumerable)"
|
|
}
|
|
},
|
|
"id": 343,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"memberName": "supportsInterface",
|
|
"nodeType": "MemberAccess",
|
|
"referencedDeclaration": 62,
|
|
"src": "788:23:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
|
|
"typeString": "function (bytes4) view returns (bool)"
|
|
}
|
|
},
|
|
"id": 345,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "788:36:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
}
|
|
},
|
|
"src": "727:97:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
}
|
|
},
|
|
"functionReturnParameters": 335,
|
|
"id": 347,
|
|
"nodeType": "Return",
|
|
"src": "720:104:1"
|
|
}
|
|
]
|
|
},
|
|
"documentation": {
|
|
"id": 328,
|
|
"nodeType": "StructuredDocumentation",
|
|
"src": "558:56:1",
|
|
"text": " @dev See {IERC165-supportsInterface}."
|
|
},
|
|
"functionSelector": "01ffc9a7",
|
|
"id": 349,
|
|
"implemented": true,
|
|
"kind": "function",
|
|
"modifiers": [],
|
|
"name": "supportsInterface",
|
|
"nameLocation": "628:17:1",
|
|
"nodeType": "FunctionDefinition",
|
|
"overrides": {
|
|
"id": 332,
|
|
"nodeType": "OverrideSpecifier",
|
|
"overrides": [],
|
|
"src": "686:8:1"
|
|
},
|
|
"parameters": {
|
|
"id": 331,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 330,
|
|
"mutability": "mutable",
|
|
"name": "interfaceId",
|
|
"nameLocation": "653:11:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 349,
|
|
"src": "646:18:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes4",
|
|
"typeString": "bytes4"
|
|
},
|
|
"typeName": {
|
|
"id": 329,
|
|
"name": "bytes4",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "646:6:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes4",
|
|
"typeString": "bytes4"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "645:20:1"
|
|
},
|
|
"returnParameters": {
|
|
"id": 335,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 334,
|
|
"mutability": "mutable",
|
|
"name": "",
|
|
"nameLocation": "-1:-1:-1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 349,
|
|
"src": "704:4:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
},
|
|
"typeName": {
|
|
"id": 333,
|
|
"name": "bool",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "704:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "703:6:1"
|
|
},
|
|
"scope": 433,
|
|
"src": "619:212:1",
|
|
"stateMutability": "view",
|
|
"virtual": true,
|
|
"visibility": "public"
|
|
},
|
|
{
|
|
"baseFunctions": [
|
|
522
|
|
],
|
|
"body": {
|
|
"id": 367,
|
|
"nodeType": "Block",
|
|
"src": "1507:52:1",
|
|
"statements": [
|
|
{
|
|
"expression": {
|
|
"arguments": [
|
|
{
|
|
"id": 364,
|
|
"name": "index",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 354,
|
|
"src": "1546:5:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_uint256",
|
|
"typeString": "uint256"
|
|
}
|
|
}
|
|
],
|
|
"expression": {
|
|
"argumentTypes": [
|
|
{
|
|
"typeIdentifier": "t_uint256",
|
|
"typeString": "uint256"
|
|
}
|
|
],
|
|
"expression": {
|
|
"baseExpression": {
|
|
"id": 360,
|
|
"name": "_roleMembers",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 327,
|
|
"src": "1524:12:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_AddressSet_$4931_storage_$",
|
|
"typeString": "mapping(bytes32 => struct EnumerableSet.AddressSet storage ref)"
|
|
}
|
|
},
|
|
"id": 362,
|
|
"indexExpression": {
|
|
"id": 361,
|
|
"name": "role",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 352,
|
|
"src": "1537:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"nodeType": "IndexAccess",
|
|
"src": "1524:18:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_struct$_AddressSet_$4931_storage",
|
|
"typeString": "struct EnumerableSet.AddressSet storage ref"
|
|
}
|
|
},
|
|
"id": 363,
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"memberName": "at",
|
|
"nodeType": "MemberAccess",
|
|
"referencedDeclaration": 5054,
|
|
"src": "1524:21:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$4931_storage_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_struct$_AddressSet_$4931_storage_ptr_$",
|
|
"typeString": "function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"
|
|
}
|
|
},
|
|
"id": 365,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "1524:28:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
},
|
|
"functionReturnParameters": 359,
|
|
"id": 366,
|
|
"nodeType": "Return",
|
|
"src": "1517:35:1"
|
|
}
|
|
]
|
|
},
|
|
"documentation": {
|
|
"id": 350,
|
|
"nodeType": "StructuredDocumentation",
|
|
"src": "837:574:1",
|
|
"text": " @dev Returns one of the accounts that have `role`. `index` must be a\n value between 0 and {getRoleMemberCount}, non-inclusive.\n Role bearers are not sorted in any particular way, and their ordering may\n change at any point.\n WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\n you perform all queries on the same block. See the following\n https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\n for more information."
|
|
},
|
|
"functionSelector": "9010d07c",
|
|
"id": 368,
|
|
"implemented": true,
|
|
"kind": "function",
|
|
"modifiers": [],
|
|
"name": "getRoleMember",
|
|
"nameLocation": "1425:13:1",
|
|
"nodeType": "FunctionDefinition",
|
|
"overrides": {
|
|
"id": 356,
|
|
"nodeType": "OverrideSpecifier",
|
|
"overrides": [],
|
|
"src": "1480:8:1"
|
|
},
|
|
"parameters": {
|
|
"id": 355,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 352,
|
|
"mutability": "mutable",
|
|
"name": "role",
|
|
"nameLocation": "1447:4:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 368,
|
|
"src": "1439:12:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
},
|
|
"typeName": {
|
|
"id": 351,
|
|
"name": "bytes32",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "1439:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"id": 354,
|
|
"mutability": "mutable",
|
|
"name": "index",
|
|
"nameLocation": "1461:5:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 368,
|
|
"src": "1453:13:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_uint256",
|
|
"typeString": "uint256"
|
|
},
|
|
"typeName": {
|
|
"id": 353,
|
|
"name": "uint256",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "1453:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_uint256",
|
|
"typeString": "uint256"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "1438:29:1"
|
|
},
|
|
"returnParameters": {
|
|
"id": 359,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 358,
|
|
"mutability": "mutable",
|
|
"name": "",
|
|
"nameLocation": "-1:-1:-1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 368,
|
|
"src": "1498:7:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
},
|
|
"typeName": {
|
|
"id": 357,
|
|
"name": "address",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "1498:7:1",
|
|
"stateMutability": "nonpayable",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "1497:9:1"
|
|
},
|
|
"scope": 433,
|
|
"src": "1416:143:1",
|
|
"stateMutability": "view",
|
|
"virtual": false,
|
|
"visibility": "public"
|
|
},
|
|
{
|
|
"baseFunctions": [
|
|
530
|
|
],
|
|
"body": {
|
|
"id": 383,
|
|
"nodeType": "Block",
|
|
"src": "1808:51:1",
|
|
"statements": [
|
|
{
|
|
"expression": {
|
|
"arguments": [],
|
|
"expression": {
|
|
"argumentTypes": [],
|
|
"expression": {
|
|
"baseExpression": {
|
|
"id": 377,
|
|
"name": "_roleMembers",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 327,
|
|
"src": "1825:12:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_AddressSet_$4931_storage_$",
|
|
"typeString": "mapping(bytes32 => struct EnumerableSet.AddressSet storage ref)"
|
|
}
|
|
},
|
|
"id": 379,
|
|
"indexExpression": {
|
|
"id": 378,
|
|
"name": "role",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 371,
|
|
"src": "1838:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"nodeType": "IndexAccess",
|
|
"src": "1825:18:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_struct$_AddressSet_$4931_storage",
|
|
"typeString": "struct EnumerableSet.AddressSet storage ref"
|
|
}
|
|
},
|
|
"id": 380,
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"memberName": "length",
|
|
"nodeType": "MemberAccess",
|
|
"referencedDeclaration": 5027,
|
|
"src": "1825:25:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$4931_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$4931_storage_ptr_$",
|
|
"typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"
|
|
}
|
|
},
|
|
"id": 381,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "1825:27:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_uint256",
|
|
"typeString": "uint256"
|
|
}
|
|
},
|
|
"functionReturnParameters": 376,
|
|
"id": 382,
|
|
"nodeType": "Return",
|
|
"src": "1818:34:1"
|
|
}
|
|
]
|
|
},
|
|
"documentation": {
|
|
"id": 369,
|
|
"nodeType": "StructuredDocumentation",
|
|
"src": "1565:157:1",
|
|
"text": " @dev Returns the number of accounts that have `role`. Can be used\n together with {getRoleMember} to enumerate all bearers of a role."
|
|
},
|
|
"functionSelector": "ca15c873",
|
|
"id": 384,
|
|
"implemented": true,
|
|
"kind": "function",
|
|
"modifiers": [],
|
|
"name": "getRoleMemberCount",
|
|
"nameLocation": "1736:18:1",
|
|
"nodeType": "FunctionDefinition",
|
|
"overrides": {
|
|
"id": 373,
|
|
"nodeType": "OverrideSpecifier",
|
|
"overrides": [],
|
|
"src": "1781:8:1"
|
|
},
|
|
"parameters": {
|
|
"id": 372,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 371,
|
|
"mutability": "mutable",
|
|
"name": "role",
|
|
"nameLocation": "1763:4:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 384,
|
|
"src": "1755:12:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
},
|
|
"typeName": {
|
|
"id": 370,
|
|
"name": "bytes32",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "1755:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "1754:14:1"
|
|
},
|
|
"returnParameters": {
|
|
"id": 376,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 375,
|
|
"mutability": "mutable",
|
|
"name": "",
|
|
"nameLocation": "-1:-1:-1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 384,
|
|
"src": "1799:7:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_uint256",
|
|
"typeString": "uint256"
|
|
},
|
|
"typeName": {
|
|
"id": 374,
|
|
"name": "uint256",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "1799:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_uint256",
|
|
"typeString": "uint256"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "1798:9:1"
|
|
},
|
|
"scope": 433,
|
|
"src": "1727:132:1",
|
|
"stateMutability": "view",
|
|
"virtual": false,
|
|
"visibility": "public"
|
|
},
|
|
{
|
|
"baseFunctions": [
|
|
276
|
|
],
|
|
"body": {
|
|
"id": 407,
|
|
"nodeType": "Block",
|
|
"src": "2024:89:1",
|
|
"statements": [
|
|
{
|
|
"expression": {
|
|
"arguments": [
|
|
{
|
|
"id": 396,
|
|
"name": "role",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 387,
|
|
"src": "2051:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
{
|
|
"id": 397,
|
|
"name": "account",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 389,
|
|
"src": "2057:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
}
|
|
],
|
|
"expression": {
|
|
"argumentTypes": [
|
|
{
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
},
|
|
{
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
],
|
|
"expression": {
|
|
"id": 393,
|
|
"name": "super",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 4294967271,
|
|
"src": "2034:5:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_type$_t_super$_AccessControlEnumerable_$433_$",
|
|
"typeString": "type(contract super AccessControlEnumerable)"
|
|
}
|
|
},
|
|
"id": 395,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"memberName": "_grantRole",
|
|
"nodeType": "MemberAccess",
|
|
"referencedDeclaration": 276,
|
|
"src": "2034:16:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
|
|
"typeString": "function (bytes32,address)"
|
|
}
|
|
},
|
|
"id": 398,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "2034:31:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_tuple$__$",
|
|
"typeString": "tuple()"
|
|
}
|
|
},
|
|
"id": 399,
|
|
"nodeType": "ExpressionStatement",
|
|
"src": "2034:31:1"
|
|
},
|
|
{
|
|
"expression": {
|
|
"arguments": [
|
|
{
|
|
"id": 404,
|
|
"name": "account",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 389,
|
|
"src": "2098:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
}
|
|
],
|
|
"expression": {
|
|
"argumentTypes": [
|
|
{
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
],
|
|
"expression": {
|
|
"baseExpression": {
|
|
"id": 400,
|
|
"name": "_roleMembers",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 327,
|
|
"src": "2075:12:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_AddressSet_$4931_storage_$",
|
|
"typeString": "mapping(bytes32 => struct EnumerableSet.AddressSet storage ref)"
|
|
}
|
|
},
|
|
"id": 402,
|
|
"indexExpression": {
|
|
"id": 401,
|
|
"name": "role",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 387,
|
|
"src": "2088:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"nodeType": "IndexAccess",
|
|
"src": "2075:18:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_struct$_AddressSet_$4931_storage",
|
|
"typeString": "struct EnumerableSet.AddressSet storage ref"
|
|
}
|
|
},
|
|
"id": 403,
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"memberName": "add",
|
|
"nodeType": "MemberAccess",
|
|
"referencedDeclaration": 4958,
|
|
"src": "2075:22:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$4931_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$4931_storage_ptr_$",
|
|
"typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
|
|
}
|
|
},
|
|
"id": 405,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "2075:31:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
}
|
|
},
|
|
"id": 406,
|
|
"nodeType": "ExpressionStatement",
|
|
"src": "2075:31:1"
|
|
}
|
|
]
|
|
},
|
|
"documentation": {
|
|
"id": 385,
|
|
"nodeType": "StructuredDocumentation",
|
|
"src": "1865:77:1",
|
|
"text": " @dev Overload {_grantRole} to track enumerable memberships"
|
|
},
|
|
"id": 408,
|
|
"implemented": true,
|
|
"kind": "function",
|
|
"modifiers": [],
|
|
"name": "_grantRole",
|
|
"nameLocation": "1956:10:1",
|
|
"nodeType": "FunctionDefinition",
|
|
"overrides": {
|
|
"id": 391,
|
|
"nodeType": "OverrideSpecifier",
|
|
"overrides": [],
|
|
"src": "2015:8:1"
|
|
},
|
|
"parameters": {
|
|
"id": 390,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 387,
|
|
"mutability": "mutable",
|
|
"name": "role",
|
|
"nameLocation": "1975:4:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 408,
|
|
"src": "1967:12:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
},
|
|
"typeName": {
|
|
"id": 386,
|
|
"name": "bytes32",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "1967:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"id": 389,
|
|
"mutability": "mutable",
|
|
"name": "account",
|
|
"nameLocation": "1989:7:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 408,
|
|
"src": "1981:15:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
},
|
|
"typeName": {
|
|
"id": 388,
|
|
"name": "address",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "1981:7:1",
|
|
"stateMutability": "nonpayable",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "1966:31:1"
|
|
},
|
|
"returnParameters": {
|
|
"id": 392,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [],
|
|
"src": "2024:0:1"
|
|
},
|
|
"scope": 433,
|
|
"src": "1947:166:1",
|
|
"stateMutability": "nonpayable",
|
|
"virtual": true,
|
|
"visibility": "internal"
|
|
},
|
|
{
|
|
"baseFunctions": [
|
|
307
|
|
],
|
|
"body": {
|
|
"id": 431,
|
|
"nodeType": "Block",
|
|
"src": "2280:93:1",
|
|
"statements": [
|
|
{
|
|
"expression": {
|
|
"arguments": [
|
|
{
|
|
"id": 420,
|
|
"name": "role",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 411,
|
|
"src": "2308:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
{
|
|
"id": 421,
|
|
"name": "account",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 413,
|
|
"src": "2314:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
}
|
|
],
|
|
"expression": {
|
|
"argumentTypes": [
|
|
{
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
},
|
|
{
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
],
|
|
"expression": {
|
|
"id": 417,
|
|
"name": "super",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 4294967271,
|
|
"src": "2290:5:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_type$_t_super$_AccessControlEnumerable_$433_$",
|
|
"typeString": "type(contract super AccessControlEnumerable)"
|
|
}
|
|
},
|
|
"id": 419,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"memberName": "_revokeRole",
|
|
"nodeType": "MemberAccess",
|
|
"referencedDeclaration": 307,
|
|
"src": "2290:17:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
|
|
"typeString": "function (bytes32,address)"
|
|
}
|
|
},
|
|
"id": 422,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "2290:32:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_tuple$__$",
|
|
"typeString": "tuple()"
|
|
}
|
|
},
|
|
"id": 423,
|
|
"nodeType": "ExpressionStatement",
|
|
"src": "2290:32:1"
|
|
},
|
|
{
|
|
"expression": {
|
|
"arguments": [
|
|
{
|
|
"id": 428,
|
|
"name": "account",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 413,
|
|
"src": "2358:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
}
|
|
],
|
|
"expression": {
|
|
"argumentTypes": [
|
|
{
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
],
|
|
"expression": {
|
|
"baseExpression": {
|
|
"id": 424,
|
|
"name": "_roleMembers",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 327,
|
|
"src": "2332:12:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_AddressSet_$4931_storage_$",
|
|
"typeString": "mapping(bytes32 => struct EnumerableSet.AddressSet storage ref)"
|
|
}
|
|
},
|
|
"id": 426,
|
|
"indexExpression": {
|
|
"id": 425,
|
|
"name": "role",
|
|
"nodeType": "Identifier",
|
|
"overloadedDeclarations": [],
|
|
"referencedDeclaration": 411,
|
|
"src": "2345:4:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"nodeType": "IndexAccess",
|
|
"src": "2332:18:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_struct$_AddressSet_$4931_storage",
|
|
"typeString": "struct EnumerableSet.AddressSet storage ref"
|
|
}
|
|
},
|
|
"id": 427,
|
|
"isConstant": false,
|
|
"isLValue": true,
|
|
"isPure": false,
|
|
"lValueRequested": false,
|
|
"memberName": "remove",
|
|
"nodeType": "MemberAccess",
|
|
"referencedDeclaration": 4985,
|
|
"src": "2332:25:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$4931_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$4931_storage_ptr_$",
|
|
"typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
|
|
}
|
|
},
|
|
"id": 429,
|
|
"isConstant": false,
|
|
"isLValue": false,
|
|
"isPure": false,
|
|
"kind": "functionCall",
|
|
"lValueRequested": false,
|
|
"names": [],
|
|
"nodeType": "FunctionCall",
|
|
"src": "2332:34:1",
|
|
"tryCall": false,
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bool",
|
|
"typeString": "bool"
|
|
}
|
|
},
|
|
"id": 430,
|
|
"nodeType": "ExpressionStatement",
|
|
"src": "2332:34:1"
|
|
}
|
|
]
|
|
},
|
|
"documentation": {
|
|
"id": 409,
|
|
"nodeType": "StructuredDocumentation",
|
|
"src": "2119:78:1",
|
|
"text": " @dev Overload {_revokeRole} to track enumerable memberships"
|
|
},
|
|
"id": 432,
|
|
"implemented": true,
|
|
"kind": "function",
|
|
"modifiers": [],
|
|
"name": "_revokeRole",
|
|
"nameLocation": "2211:11:1",
|
|
"nodeType": "FunctionDefinition",
|
|
"overrides": {
|
|
"id": 415,
|
|
"nodeType": "OverrideSpecifier",
|
|
"overrides": [],
|
|
"src": "2271:8:1"
|
|
},
|
|
"parameters": {
|
|
"id": 414,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [
|
|
{
|
|
"constant": false,
|
|
"id": 411,
|
|
"mutability": "mutable",
|
|
"name": "role",
|
|
"nameLocation": "2231:4:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 432,
|
|
"src": "2223:12:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
},
|
|
"typeName": {
|
|
"id": 410,
|
|
"name": "bytes32",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "2223:7:1",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_bytes32",
|
|
"typeString": "bytes32"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"id": 413,
|
|
"mutability": "mutable",
|
|
"name": "account",
|
|
"nameLocation": "2245:7:1",
|
|
"nodeType": "VariableDeclaration",
|
|
"scope": 432,
|
|
"src": "2237:15:1",
|
|
"stateVariable": false,
|
|
"storageLocation": "default",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
},
|
|
"typeName": {
|
|
"id": 412,
|
|
"name": "address",
|
|
"nodeType": "ElementaryTypeName",
|
|
"src": "2237:7:1",
|
|
"stateMutability": "nonpayable",
|
|
"typeDescriptions": {
|
|
"typeIdentifier": "t_address",
|
|
"typeString": "address"
|
|
}
|
|
},
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"src": "2222:31:1"
|
|
},
|
|
"returnParameters": {
|
|
"id": 416,
|
|
"nodeType": "ParameterList",
|
|
"parameters": [],
|
|
"src": "2280:0:1"
|
|
},
|
|
"scope": 433,
|
|
"src": "2202:171:1",
|
|
"stateMutability": "nonpayable",
|
|
"virtual": true,
|
|
"visibility": "internal"
|
|
}
|
|
],
|
|
"scope": 434,
|
|
"src": "340:2035:1",
|
|
"usedErrors": []
|
|
}
|
|
],
|
|
"src": "103:2273:1"
|
|
},
|
|
"compiler": {
|
|
"name": "solc",
|
|
"version": "0.8.10+commit.fc410830.Emscripten.clang"
|
|
},
|
|
"networks": {},
|
|
"schemaVersion": "3.4.4",
|
|
"updatedAt": "2022-01-27T10:56:46.901Z",
|
|
"devdoc": {
|
|
"details": "Extension of {AccessControl} that allows enumerating the members of each role.",
|
|
"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}."
|
|
},
|
|
"getRoleMember(bytes32,uint256)": {
|
|
"details": "Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information."
|
|
},
|
|
"getRoleMemberCount(bytes32)": {
|
|
"details": "Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role."
|
|
},
|
|
"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."
|
|
},
|
|
"hasRole(bytes32,address)": {
|
|
"details": "Returns `true` if `account` has been granted `role`."
|
|
},
|
|
"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`."
|
|
},
|
|
"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."
|
|
},
|
|
"supportsInterface(bytes4)": {
|
|
"details": "See {IERC165-supportsInterface}."
|
|
}
|
|
},
|
|
"version": 1
|
|
},
|
|
"userdoc": {
|
|
"kind": "user",
|
|
"methods": {},
|
|
"version": 1
|
|
}
|
|
} |