secretstore-contracts
Version:
Secret Store permissioning and service contracts collection and toolkit.
1,084 lines (1,083 loc) • 154 kB
JSON
{
"contractName": "ERC165Checker",
"abi": [],
"bytecode": "0x604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a7230582098bcbbed1bd7b49562a79a8802827e7363ae29f5f39f974b419d64e1ed9cb4c90029",
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fd00a165627a7a7230582098bcbbed1bd7b49562a79a8802827e7363ae29f5f39f974b419d64e1ed9cb4c90029",
"sourceMap": "193:5019:13:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24",
"deployedSourceMap": "193:5019:13:-;;;;;;;;",
"source": "pragma solidity ^0.4.24;\n\n/**\n * @title ERC165Checker\n * @dev Use `using ERC165Checker for address`; to include this library\n * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _InterfaceId_Invalid = 0xffffffff;\n\n bytes4 private constant _InterfaceId_ERC165 = 0x01ffc9a7;\n /**\n * 0x01ffc9a7 ===\n * bytes4(keccak256('supportsInterface(bytes4)'))\n */\n\n /**\n * @notice Query if a contract supports ERC165\n * @param account The address of the contract to query for support of ERC165\n * @return true if the contract at account implements ERC165\n */\n function _supportsERC165(address account)\n internal\n view\n returns (bool)\n {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return _supportsERC165Interface(account, _InterfaceId_ERC165) &&\n !_supportsERC165Interface(account, _InterfaceId_Invalid);\n }\n\n /**\n * @notice Query if a contract implements an interface, also checks support of ERC165\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Interface identification is specified in ERC-165.\n */\n function _supportsInterface(address account, bytes4 interfaceId)\n internal\n view\n returns (bool)\n {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return _supportsERC165(account) &&\n _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @notice Query if a contract implements interfaces, also checks support of ERC165\n * @param account The address of the contract to query for support of an interface\n * @param interfaceIds A list of interface identifiers, as specified in ERC-165\n * @return true if the contract at account indicates support all interfaces in the\n * interfaceIds list, false otherwise\n * @dev Interface identification is specified in ERC-165.\n */\n function _supportsAllInterfaces(address account, bytes4[] interfaceIds)\n internal\n view\n returns (bool)\n {\n // query support of ERC165 itself\n if (!_supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with the `supportsERC165` method in this library.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId)\n private\n view\n returns (bool)\n {\n // success determines whether the staticcall succeeded and result determines\n // whether the contract at account indicates support of _interfaceId\n (bool success, bool result) = _callERC165SupportsInterface(\n account, interfaceId);\n\n return (success && result);\n }\n\n /**\n * @notice Calls the function with selector 0x01ffc9a7 (ERC165) and suppresses throw\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return success true if the STATICCALL succeeded, false otherwise\n * @return result true if the STATICCALL succeeded and the contract at account\n * indicates support of the interface with identifier interfaceId, false otherwise\n */\n function _callERC165SupportsInterface(\n address account,\n bytes4 interfaceId\n )\n private\n view\n returns (bool success, bool result)\n {\n bytes memory encodedParams = abi.encodeWithSelector(\n _InterfaceId_ERC165,\n interfaceId\n );\n\n // solium-disable-next-line security/no-inline-assembly\n assembly {\n let encodedParams_data := add(0x20, encodedParams)\n let encodedParams_size := mload(encodedParams)\n\n let output := mload(0x40) // Find empty storage location using \"free memory pointer\"\n mstore(output, 0x0)\n\n success := staticcall(\n 30000, // 30k gas\n account, // To addr\n encodedParams_data,\n encodedParams_size,\n output,\n 0x20 // Outputs are 32 bytes long\n )\n\n result := mload(output) // Load the result\n }\n }\n}\n",
"sourcePath": "openzeppelin-solidity/contracts/introspection/ERC165Checker.sol",
"ast": {
"absolutePath": "openzeppelin-solidity/contracts/introspection/ERC165Checker.sol",
"exportedSymbols": {
"ERC165Checker": [
2485
]
},
"id": 2486,
"nodeType": "SourceUnit",
"nodes": [
{
"id": 2350,
"literals": [
"solidity",
"^",
"0.4",
".24"
],
"nodeType": "PragmaDirective",
"src": "0:24:13"
},
{
"baseContracts": [],
"contractDependencies": [],
"contractKind": "library",
"documentation": "@title ERC165Checker\n@dev Use `using ERC165Checker for address`; to include this library\nhttps://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md",
"fullyImplemented": true,
"id": 2485,
"linearizedBaseContracts": [
2485
],
"name": "ERC165Checker",
"nodeType": "ContractDefinition",
"nodes": [
{
"constant": true,
"id": 2353,
"name": "_InterfaceId_Invalid",
"nodeType": "VariableDeclaration",
"scope": 2485,
"src": "291:57:13",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
},
"typeName": {
"id": 2351,
"name": "bytes4",
"nodeType": "ElementaryTypeName",
"src": "291:6:13",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"value": {
"argumentTypes": null,
"hexValue": "30786666666666666666",
"id": 2352,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "338:10:13",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_4294967295_by_1",
"typeString": "int_const 4294967295"
},
"value": "0xffffffff"
},
"visibility": "private"
},
{
"constant": true,
"id": 2356,
"name": "_InterfaceId_ERC165",
"nodeType": "VariableDeclaration",
"scope": 2485,
"src": "353:56:13",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
},
"typeName": {
"id": 2354,
"name": "bytes4",
"nodeType": "ElementaryTypeName",
"src": "353:6:13",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"value": {
"argumentTypes": null,
"hexValue": "30783031666663396137",
"id": 2355,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "399:10:13",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_33540519_by_1",
"typeString": "int_const 33540519"
},
"value": "0x01ffc9a7"
},
"visibility": "private"
},
{
"body": {
"id": 2374,
"nodeType": "Block",
"src": "788:302:13",
"statements": [
{
"expression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 2372,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2364,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2358,
"src": "990:7:13",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 2365,
"name": "_InterfaceId_ERC165",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2356,
"src": "999:19:13",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
],
"id": 2363,
"name": "_supportsERC165Interface",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2463,
"src": "965:24:13",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
"typeString": "function (address,bytes4) view returns (bool)"
}
},
"id": 2366,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "965:54:13",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"argumentTypes": null,
"id": 2371,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "1029:56:13",
"subExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2368,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2358,
"src": "1055:7:13",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 2369,
"name": "_InterfaceId_Invalid",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2353,
"src": "1064:20:13",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
],
"id": 2367,
"name": "_supportsERC165Interface",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2463,
"src": "1030:24:13",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
"typeString": "function (address,bytes4) view returns (bool)"
}
},
"id": 2370,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1030:55:13",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "965:120:13",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 2362,
"id": 2373,
"nodeType": "Return",
"src": "958:127:13"
}
]
},
"documentation": "@notice Query if a contract supports ERC165\n@param account The address of the contract to query for support of ERC165\n@return true if the contract at account implements ERC165",
"id": 2375,
"implemented": true,
"isConstructor": false,
"isDeclaredConst": true,
"modifiers": [],
"name": "_supportsERC165",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 2359,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 2358,
"name": "account",
"nodeType": "VariableDeclaration",
"scope": 2375,
"src": "728:15:13",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 2357,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "728:7:13",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "727:17:13"
},
"payable": false,
"returnParameters": {
"id": 2362,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 2361,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 2375,
"src": "780:4:13",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 2360,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "780:4:13",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "779:6:13"
},
"scope": 2485,
"src": "703:387:13",
"stateMutability": "view",
"superFunction": null,
"visibility": "internal"
},
{
"body": {
"id": 2393,
"nodeType": "Block",
"src": "1651:178:13",
"statements": [
{
"expression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 2391,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2385,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2377,
"src": "1760:7:13",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 2384,
"name": "_supportsERC165",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2375,
"src": "1744:15:13",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
"typeString": "function (address) view returns (bool)"
}
},
"id": 2386,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1744:24:13",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2388,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2377,
"src": "1803:7:13",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 2389,
"name": "interfaceId",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2379,
"src": "1812:11:13",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
],
"id": 2387,
"name": "_supportsERC165Interface",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2463,
"src": "1778:24:13",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
"typeString": "function (address,bytes4) view returns (bool)"
}
},
"id": 2390,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1778:46:13",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "1744:80:13",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 2383,
"id": 2392,
"nodeType": "Return",
"src": "1737:87:13"
}
]
},
"documentation": "@notice Query if a contract implements an interface, also checks support of ERC165\n@param account The address of the contract to query for support of an interface\n@param interfaceId The interface identifier, as specified in ERC-165\n@return true if the contract at account indicates support of the interface with\nidentifier interfaceId, false otherwise\n@dev Interface identification is specified in ERC-165.",
"id": 2394,
"implemented": true,
"isConstructor": false,
"isDeclaredConst": true,
"modifiers": [],
"name": "_supportsInterface",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 2380,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 2377,
"name": "account",
"nodeType": "VariableDeclaration",
"scope": 2394,
"src": "1571:15:13",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 2376,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1571:7:13",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 2379,
"name": "interfaceId",
"nodeType": "VariableDeclaration",
"scope": 2394,
"src": "1588:18:13",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
},
"typeName": {
"id": 2378,
"name": "bytes4",
"nodeType": "ElementaryTypeName",
"src": "1588:6:13",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1570:37:13"
},
"payable": false,
"returnParameters": {
"id": 2383,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 2382,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 2394,
"src": "1643:4:13",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 2381,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "1643:4:13",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1642:6:13"
},
"scope": 2485,
"src": "1543:286:13",
"stateMutability": "view",
"superFunction": null,
"visibility": "internal"
},
{
"body": {
"id": 2438,
"nodeType": "Block",
"src": "2398:370:13",
"statements": [
{
"condition": {
"argumentTypes": null,
"id": 2407,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "2446:25:13",
"subExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2405,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2396,
"src": "2463:7:13",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 2404,
"name": "_supportsERC165",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2375,
"src": "2447:15:13",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
"typeString": "function (address) view returns (bool)"
}
},
"id": 2406,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2447:24:13",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 2411,
"nodeType": "IfStatement",
"src": "2442:58:13",
"trueBody": {
"id": 2410,
"nodeType": "Block",
"src": "2473:27:13",
"statements": [
{
"expression": {
"argumentTypes": null,
"hexValue": "66616c7365",
"id": 2408,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2488:5:13",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
},
"functionReturnParameters": 2403,
"id": 2409,
"nodeType": "Return",
"src": "2481:12:13"
}
]
}
},
{
"body": {
"id": 2434,
"nodeType": "Block",
"src": "2612:102:13",
"statements": [
{
"condition": {
"argumentTypes": null,
"id": 2429,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "2624:51:13",
"subExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 2424,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2396,
"src": "2650:7:13",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 2425,
"name": "interfaceIds",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2399,
"src": "2659:12:13",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
"typeString": "bytes4[] memory"
}
},
"id": 2427,
"indexExpression": {
"argumentTypes": null,
"id": 2426,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2413,
"src": "2672:1:13",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "2659:15:13",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
],
"id": 2423,
"name": "_supportsERC165Interface",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2463,
"src": "2625:24:13",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$",
"typeString": "function (address,bytes4) view returns (bool)"
}
},
"id": 2428,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2625:50:13",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 2433,
"nodeType": "IfStatement",
"src": "2620:88:13",
"trueBody": {
"id": 2432,
"nodeType": "Block",
"src": "2677:31:13",
"statements": [
{
"expression": {
"argumentTypes": null,
"hexValue": "66616c7365",
"id": 2430,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2694:5:13",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
},
"functionReturnParameters": 2403,
"id": 2431,
"nodeType": "Return",
"src": "2687:12:13"
}
]
}
}
]
},
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 2419,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 2416,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2413,
"src": "2582:1:13",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 2417,
"name": "interfaceIds",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2399,
"src": "2586:12:13",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
"typeString": "bytes4[] memory"
}
},
"id": 2418,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "2586:19:13",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "2582:23:13",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 2435,
"initializationExpression": {
"assignments": [
2413
],
"declarations": [
{
"constant": false,
"id": 2413,
"name": "i",
"nodeType": "VariableDeclaration",
"scope": 2439,
"src": "2567:9:13",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2412,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2567:7:13",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 2415,
"initialValue": {
"argumentTypes": null,
"hexValue": "30",
"id": 2414,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2579:1:13",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "2567:13:13"
},
"loopExpression": {
"expression": {
"argumentTypes": null,
"id": 2421,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "++",
"prefix": false,
"src": "2607:3:13",
"subExpression": {
"argumentTypes": null,
"id": 2420,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2413,
"src": "2607:1:13",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 2422,
"nodeType": "ExpressionStatement",
"src": "2607:3:13"
},
"nodeType": "ForStatement",
"src": "2562:152:13"
},
{
"expression": {
"argumentTypes": null,
"hexValue": "74727565",
"id": 2436,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2759:4:13",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"functionReturnParameters": 2403,
"id": 2437,
"nodeType": "Return",