UNPKG

@ethsub/sol

Version:
1,320 lines (1,319 loc) 57.7 kB
{ "contractName": "ERC165", "abi": [ { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ], "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC165} interface. Contracts may inherit from this and call {_registerInterface} to declare their support of an interface.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"}},\"stateVariables\":{\"_supportedInterfaces\":{\"details\":\"Mapping of interface ids to whether or not it's supported.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0x24141d2f6b98d4cb77a8936eae8cbaad2e261d9062bdc08036096f4550092501\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b710eb003944777135f027500a5a57b479fe857849f5f467c1ef9687401e3c95\",\"dweb:/ipfs/QmcELzi6KRzAs3DXwxdsoKWRJ13KSeipKQsJgD3unctdZM\"]},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd970f51e3a77790c2f02b5b1759827c3b897c3d98c407b3631e8af32e3dc93c\",\"dweb:/ipfs/QmPF85Amgbqjk3SNZKsPCsqCw8JfwYEPMnnhvMJUyX58je\"]}},\"version\":1}", "bytecode": "0x", "deployedBytecode": "0x", "immutableReferences": {}, "sourceMap": "", "deployedSourceMap": "", "source": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165 is IERC165 {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n constructor () internal {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n", "sourcePath": "@openzeppelin/contracts/introspection/ERC165.sol", "ast": { "absolutePath": "@openzeppelin/contracts/introspection/ERC165.sol", "exportedSymbols": { "ERC165": [ 342 ] }, "id": 343, "license": "MIT", "nodeType": "SourceUnit", "nodes": [ { "id": 287, "literals": [ "solidity", ">=", "0.6", ".0", "<", "0.8", ".0" ], "nodeType": "PragmaDirective", "src": "33:31:2" }, { "absolutePath": "@openzeppelin/contracts/introspection/IERC165.sol", "file": "./IERC165.sol", "id": 288, "nodeType": "ImportDirective", "scope": 343, "sourceUnit": 583, "src": "66:23:2", "symbolAliases": [], "unitAlias": "" }, { "abstract": true, "baseContracts": [ { "arguments": null, "baseName": { "contractScope": null, "id": 290, "name": "IERC165", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 582, "src": "291:7:2", "typeDescriptions": { "typeIdentifier": "t_contract$_IERC165_$582", "typeString": "contract IERC165" } }, "id": 291, "nodeType": "InheritanceSpecifier", "src": "291:7:2" } ], "contractDependencies": [ 582 ], "contractKind": "contract", "documentation": { "id": 289, "nodeType": "StructuredDocumentation", "src": "91:171:2", "text": " @dev Implementation of the {IERC165} interface.\n Contracts may inherit from this and call {_registerInterface} to declare\n their support of an interface." }, "fullyImplemented": true, "id": 342, "linearizedBaseContracts": [ 342, 582 ], "name": "ERC165", "nodeType": "ContractDefinition", "nodes": [ { "constant": true, "id": 294, "mutability": "constant", "name": "_INTERFACE_ID_ERC165", "nodeType": "VariableDeclaration", "overrides": null, "scope": 342, "src": "388:57:2", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" }, "typeName": { "id": 292, "name": "bytes4", "nodeType": "ElementaryTypeName", "src": "388:6:2", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } }, "value": { "argumentTypes": null, "hexValue": "30783031666663396137", "id": 293, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "435:10:2", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_33540519_by_1", "typeString": "int_const 33540519" }, "value": "0x01ffc9a7" }, "visibility": "private" }, { "constant": false, "documentation": { "id": 295, "nodeType": "StructuredDocumentation", "src": "452:82:2", "text": " @dev Mapping of interface ids to whether or not it's supported." }, "id": 299, "mutability": "mutable", "name": "_supportedInterfaces", "nodeType": "VariableDeclaration", "overrides": null, "scope": 342, "src": "539:52:2", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$", "typeString": "mapping(bytes4 => bool)" }, "typeName": { "id": 298, "keyType": { "id": 296, "name": "bytes4", "nodeType": "ElementaryTypeName", "src": "547:6:2", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } }, "nodeType": "Mapping", "src": "539:23:2", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$", "typeString": "mapping(bytes4 => bool)" }, "valueType": { "id": 297, "name": "bool", "nodeType": "ElementaryTypeName", "src": "557:4:2", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } }, "value": null, "visibility": "private" }, { "body": { "id": 306, "nodeType": "Block", "src": "622:193:2", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 303, "name": "_INTERFACE_ID_ERC165", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 294, "src": "787:20:2", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } ], "id": 302, "name": "_registerInterface", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 341, "src": "768:18:2", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_bytes4_$returns$__$", "typeString": "function (bytes4)" } }, "id": 304, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "768:40:2", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 305, "nodeType": "ExpressionStatement", "src": "768:40:2" } ] }, "documentation": null, "id": 307, "implemented": true, "kind": "constructor", "modifiers": [], "name": "", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { "id": 300, "nodeType": "ParameterList", "parameters": [], "src": "610:2:2" }, "returnParameters": { "id": 301, "nodeType": "ParameterList", "parameters": [], "src": "622:0:2" }, "scope": 342, "src": "598:217:2", "stateMutability": "nonpayable", "virtual": false, "visibility": "internal" }, { "baseFunctions": [ 581 ], "body": { "id": 320, "nodeType": "Block", "src": "1056:57:2", "statements": [ { "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 316, "name": "_supportedInterfaces", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 299, "src": "1073:20:2", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$", "typeString": "mapping(bytes4 => bool)" } }, "id": 318, "indexExpression": { "argumentTypes": null, "id": 317, "name": "interfaceId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 310, "src": "1094:11:2", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "1073:33:2", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "functionReturnParameters": 315, "id": 319, "nodeType": "Return", "src": "1066:40:2" } ] }, "documentation": { "id": 308, "nodeType": "StructuredDocumentation", "src": "821:139:2", "text": " @dev See {IERC165-supportsInterface}.\n Time complexity O(1), guaranteed to always use less than 30 000 gas." }, "functionSelector": "01ffc9a7", "id": 321, "implemented": true, "kind": "function", "modifiers": [], "name": "supportsInterface", "nodeType": "FunctionDefinition", "overrides": { "id": 312, "nodeType": "OverrideSpecifier", "overrides": [], "src": "1032:8:2" }, "parameters": { "id": 311, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 310, "mutability": "mutable", "name": "interfaceId", "nodeType": "VariableDeclaration", "overrides": null, "scope": 321, "src": "992:18:2", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" }, "typeName": { "id": 309, "name": "bytes4", "nodeType": "ElementaryTypeName", "src": "992:6:2", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } }, "value": null, "visibility": "internal" } ], "src": "991:20:2" }, "returnParameters": { "id": 315, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 314, "mutability": "mutable", "name": "", "nodeType": "VariableDeclaration", "overrides": null, "scope": 321, "src": "1050:4:2", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 313, "name": "bool", "nodeType": "ElementaryTypeName", "src": "1050:4:2", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "1049:6:2" }, "scope": 342, "src": "965:148:2", "stateMutability": "view", "virtual": true, "visibility": "public" }, { "body": { "id": 340, "nodeType": "Block", "src": "1572:133:2", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" }, "id": 330, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 328, "name": "interfaceId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 324, "src": "1590:11:2", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } }, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": { "argumentTypes": null, "hexValue": "30786666666666666666", "id": 329, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1605:10:2", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_4294967295_by_1", "typeString": "int_const 4294967295" }, "value": "0xffffffff" }, "src": "1590:25:2", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "4552433136353a20696e76616c696420696e74657266616365206964", "id": 331, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1617:30:2", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_282912c0dfceceb28d77d0333f496b83948f9ba5b3154358a8b140b849289dee", "typeString": "literal_string \"ERC165: invalid interface id\"" }, "value": "ERC165: invalid interface id" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_282912c0dfceceb28d77d0333f496b83948f9ba5b3154358a8b140b849289dee", "typeString": "literal_string \"ERC165: invalid interface id\"" } ], "id": 327, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ -18, -18 ], "referencedDeclaration": -18, "src": "1582:7:2", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 332, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1582:66:2", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 333, "nodeType": "ExpressionStatement", "src": "1582:66:2" }, { "expression": { "argumentTypes": null, "id": 338, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 334, "name": "_supportedInterfaces", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 299, "src": "1658:20:2", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$", "typeString": "mapping(bytes4 => bool)" } }, "id": 336, "indexExpression": { "argumentTypes": null, "id": 335, "name": "interfaceId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 324, "src": "1679:11:2", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "1658:33:2", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", "id": 337, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "1694:4:2", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "true" }, "src": "1658:40:2", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 339, "nodeType": "ExpressionStatement", "src": "1658:40:2" } ] }, "documentation": { "id": 322, "nodeType": "StructuredDocumentation", "src": "1119:383:2", "text": " @dev Registers the contract as an implementer of the interface defined by\n `interfaceId`. Support of the actual ERC165 interface is automatic and\n registering its interface id is not required.\n See {IERC165-supportsInterface}.\n Requirements:\n - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`)." }, "id": 341, "implemented": true, "kind": "function", "modifiers": [], "name": "_registerInterface", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { "id": 325, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 324, "mutability": "mutable", "name": "interfaceId", "nodeType": "VariableDeclaration", "overrides": null, "scope": 341, "src": "1535:18:2", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" }, "typeName": { "id": 323, "name": "bytes4", "nodeType": "ElementaryTypeName", "src": "1535:6:2", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } }, "value": null, "visibility": "internal" } ], "src": "1534:20:2" }, "returnParameters": { "id": 326, "nodeType": "ParameterList", "parameters": [], "src": "1572:0:2" }, "scope": 342, "src": "1507:198:2", "stateMutability": "nonpayable", "virtual": true, "visibility": "internal" } ], "scope": 343, "src": "263:1444:2" } ], "src": "33:1675:2" }, "legacyAST": { "attributes": { "absolutePath": "@openzeppelin/contracts/introspection/ERC165.sol", "exportedSymbols": { "ERC165": [ 342 ] }, "license": "MIT" }, "children": [ { "attributes": { "literals": [ "solidity", ">=", "0.6", ".0", "<", "0.8", ".0" ] }, "id": 287, "name": "PragmaDirective", "src": "33:31:2" }, { "attributes": { "SourceUnit": 583, "absolutePath": "@openzeppelin/contracts/introspection/IERC165.sol", "file": "./IERC165.sol", "scope": 343, "symbolAliases": [ null ], "unitAlias": "" }, "id": 288, "name": "ImportDirective", "src": "66:23:2" }, { "attributes": { "abstract": true, "contractDependencies": [ 582 ], "contractKind": "contract", "fullyImplemented": true, "linearizedBaseContracts": [ 342, 582 ], "name": "ERC165", "scope": 343 }, "children": [ { "attributes": { "text": " @dev Implementation of the {IERC165} interface.\n Contracts may inherit from this and call {_registerInterface} to declare\n their support of an interface." }, "id": 289, "name": "StructuredDocumentation", "src": "91:171:2" }, { "attributes": { "arguments": null }, "children": [ { "attributes": { "contractScope": null, "name": "IERC165", "referencedDeclaration": 582, "type": "contract IERC165" }, "id": 290, "name": "UserDefinedTypeName", "src": "291:7:2" } ], "id": 291, "name": "InheritanceSpecifier", "src": "291:7:2" }, { "attributes": { "constant": true, "mutability": "constant", "name": "_INTERFACE_ID_ERC165", "overrides": null, "scope": 342, "stateVariable": true, "storageLocation": "default", "type": "bytes4", "visibility": "private" }, "children": [ { "attributes": { "name": "bytes4", "type": "bytes4" }, "id": 292, "name": "ElementaryTypeName", "src": "388:6:2" }, { "attributes": { "argumentTypes": null, "hexvalue": "30783031666663396137", "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "subdenomination": null, "token": "number", "type": "int_const 33540519", "value": "0x01ffc9a7" }, "id": 293, "name": "Literal", "src": "435:10:2" } ], "id": 294, "name": "VariableDeclaration", "src": "388:57:2" }, { "attributes": { "constant": false, "mutability": "mutable", "name": "_supportedInterfaces", "overrides": null, "scope": 342, "stateVariable": true, "storageLocation": "default", "type": "mapping(bytes4 => bool)", "value": null, "visibility": "private" }, "children": [ { "attributes": { "type": "mapping(bytes4 => bool)" }, "children": [ { "attributes": { "name": "bytes4", "type": "bytes4" }, "id": 296, "name": "ElementaryTypeName", "src": "547:6:2" }, { "attributes": { "name": "bool", "type": "bool" }, "id": 297, "name": "ElementaryTypeName", "src": "557:4:2" } ], "id": 298, "name": "Mapping", "src": "539:23:2" }, { "attributes": { "text": " @dev Mapping of interface ids to whether or not it's supported." }, "id": 295, "name": "StructuredDocumentation", "src": "452:82:2" } ], "id": 299, "name": "VariableDeclaration", "src": "539:52:2" }, { "attributes": { "documentation": null, "implemented": true, "isConstructor": true, "kind": "constructor", "modifiers": [ null ], "name": "", "overrides": null, "scope": 342, "stateMutability": "nonpayable", "virtual": false, "visibility": "internal" }, "children": [ { "attributes": { "parameters": [ null ] }, "children": [], "id": 300, "name": "ParameterList", "src": "610:2:2" }, { "attributes": { "parameters": [ null ] }, "children": [], "id": 301, "name": "ParameterList", "src": "622:0:2" }, { "children": [ { "children": [ { "attributes": { "argumentTypes": null, "isConstant": false, "isLValue": false, "isPure": false, "isStructConstructorCall": false, "lValueRequested": false, "names": [ null ], "tryCall": false, "type": "tuple()", "type_conversion": false }, "children": [ { "attributes": { "argumentTypes": [ { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } ], "overloadedDeclarations": [ null ], "referencedDeclaration": 341, "type": "function (bytes4)", "value": "_registerInterface" }, "id": 302, "name": "Identifier", "src": "768:18:2" }, { "attributes": { "argumentTypes": null, "overloadedDeclarations": [ null ], "referencedDeclaration": 294, "type": "bytes4", "value": "_INTERFACE_ID_ERC165" }, "id": 303, "name": "Identifier", "src": "787:20:2" } ], "id": 304, "name": "FunctionCall", "src": "768:40:2" } ], "id": 305, "name": "ExpressionStatement", "src": "768:40:2" } ], "id": 306, "name": "Block", "src": "622:193:2" } ], "id": 307, "name": "FunctionDefinition", "src": "598:217:2" }, { "attributes": { "baseFunctions": [ 581 ], "functionSelector": "01ffc9a7", "implemented": true, "isConstructor": false, "kind": "function", "modifiers": [ null ], "name": "supportsInterface", "scope": 342, "stateMutability": "view", "virtual": true, "visibility": "public" }, "children": [ { "attributes": { "text": " @dev See {IERC165-supportsInterface}.\n Time complexity O(1), guaranteed to always use less than 30 000 gas." }, "id": 308, "name": "StructuredDocumentation", "src": "821:139:2" }, { "attributes": { "overrides": [ null ] }, "id": 312, "name": "OverrideSpecifier", "src": "1032:8:2" }, { "children": [ { "attributes": { "constant": false, "mutability": "mutable", "name": "interfaceId", "overrides": null, "scope": 321, "stateVariable": false, "storageLocation": "default", "type": "bytes4", "value": null, "visibility": "internal" }, "children": [ { "attributes": { "name": "bytes4", "type": "bytes4" }, "id": 309, "name": "ElementaryTypeName", "src": "992:6:2" } ], "id": 310, "name": "VariableDeclaration", "src": "992:18:2" } ], "id": 311, "name": "ParameterList", "src": "991:20:2" }, { "children": [ { "attributes": { "constant": false, "mutability": "mutable", "name": "", "overrides": null, "scope": 321, "stateVariable": false, "storageLocation": "default", "type": "bool", "value": null, "visibility": "internal" }, "children": [ { "attributes": { "name": "bool", "type": "bool" }, "id": 313, "name": "ElementaryTypeName", "src": "1050:4:2" } ], "id": 314, "name": "VariableDeclaration", "src": "1050:4:2" } ], "id": 315, "name": "ParameterList", "src": "1049:6:2" }, { "children": [ { "attributes": { "functionReturnParameters": 315 }, "children": [ { "attributes": { "argumentTypes": null, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "type": "bool" }, "children": [ { "attributes": { "argumentTypes": null, "overloadedDeclarations": [ null ], "referencedDeclaration": 299, "type": "mapping(bytes4 => bool)", "value": "_supportedInterfaces" }, "id": 316, "name": "Identifier", "src": "1073:20:2" }, { "attributes": { "argumentTypes": null, "overloadedDeclarations": [ null ], "referencedDeclaration": 310, "type": "bytes4", "value": "interfaceId" }, "id": 317, "name": "Identifier", "src": "1094:11:2" } ], "id": 318, "name": "IndexAccess", "src": "1073:33:2" } ], "id": 319, "name": "Return", "src": "1066:40:2" } ], "id": 320, "name": "Block", "src": "1056:57:2" } ], "id": 321, "name": "FunctionDefinition", "src": "965:148:2" }, { "attributes": { "implemented": true, "isConstructor": false, "kind": "function", "modifiers": [ null ], "name": "_registerInterface", "overrides": null, "scope": 342, "stateMutability": "nonpayable", "virtual": true, "visibility": "internal" }, "children": [ { "attributes": { "text": " @dev Registers the contract as an implementer of the interface defined by\n `interfaceId`. Support of the actual ERC165 interface is automatic and\n registering its interface id is not required.\n See {IERC165-supportsInterface}.\n Requirements:\n - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`)." }, "id": 322, "name": "StructuredDocumentation", "src": "1119:383:2" }, { "children": [ { "attributes": { "constant": false, "mutability": "mutable", "name": "interfaceId", "overrides": null, "scope": 341, "stateVariable": false, "storageLocation": "default", "type": "bytes4", "value": null, "visibility": "internal" }, "children": [ { "attributes": { "name": "bytes4", "type": "bytes4" }, "id": 323, "name": "ElementaryTypeName", "src": "1535:6:2" } ], "id": 324, "name": "VariableDeclaration", "src": "1535:18:2" } ], "id": 325, "name": "ParameterList", "src": "1534:20:2" }, { "attributes": { "parameters": [ null ] }, "children": [], "id": 326, "name": "ParameterList", "src": "1572:0:2" }, { "children": [ { "children": [ { "attributes": { "argumentTypes": null, "isConstant": false, "isLValue": false, "isPure": false, "isStructConstructorCall": false, "lValueRequested": false, "names": [ null ], "tryCall": false, "type": "tuple()", "type_conversion": false }, "children": [ { "attributes": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_282912c0dfceceb28d77d0333f496b83948f9ba5b3154358a8b140b849289dee", "typeString": "literal_string \"ERC165: invalid interface id\"" } ], "overloadedDeclarations": [ -18, -18 ], "referencedDeclaration": -18, "type": "function (bool,string memory) pure", "value": "require" }, "id": 327, "name": "Identifier", "src": "1582:7:2" }, { "attributes": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" }, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "operator": "!=", "type": "bool" }, "children": [ { "attributes": { "argumentTypes": null,