@etherisc/gif-contracts
Version:
This repository holds the GIF core contracts and tools to develop, test and deploy GIF instances.
1,264 lines (1,263 loc) • 143 kB
JSON
{
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_registry",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"stateMutability": "nonpayable",
"type": "fallback"
},
{
"inputs": [],
"name": "NAME",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_contractName",
"type": "bytes32"
}
],
"name": "getContractFromRegistry",
"outputs": [
{
"internalType": "address",
"name": "_addr",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "registry",
"outputs": [
{
"internalType": "contract IRegistry",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"allSourcePaths": {
"22": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Context.sol",
"40": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/ILicense.sol",
"44": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/IRegistry.sol",
"86": "contracts/services/ProductService.sol",
"91": "contracts/shared/WithRegistry.sol"
},
"ast": {
"absolutePath": "contracts/services/ProductService.sol",
"exportedSymbols": {
"Context": [
24074
],
"ILicense": [
22433
],
"IRegistry": [
21750
],
"ProductService": [
14014
],
"WithRegistry": [
15290
]
},
"id": 14015,
"license": "Apache-2.0",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 13938,
"literals": [
"solidity",
"0.8",
".2"
],
"nodeType": "PragmaDirective",
"src": "39:22:86"
},
{
"absolutePath": "contracts/shared/WithRegistry.sol",
"file": "../shared/WithRegistry.sol",
"id": 13939,
"nameLocation": "-1:-1:-1",
"nodeType": "ImportDirective",
"scope": 14015,
"sourceUnit": 15291,
"src": "63:36:86",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/vscode/.brownie/packages/etherisc/gif-interface@3b0002a/contracts/modules/ILicense.sol",
"file": "@etherisc/gif-interface/contracts/modules/ILicense.sol",
"id": 13940,
"nameLocation": "-1:-1:-1",
"nodeType": "ImportDirective",
"scope": 14015,
"sourceUnit": 22434,
"src": "142:64:86",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Context.sol",
"file": "@openzeppelin/contracts/utils/Context.sol",
"id": 13941,
"nameLocation": "-1:-1:-1",
"nodeType": "ImportDirective",
"scope": 14015,
"sourceUnit": 24075,
"src": "208:51:86",
"symbolAliases": [],
"unitAlias": ""
},
{
"abstract": false,
"baseContracts": [
{
"baseName": {
"id": 13942,
"name": "WithRegistry",
"nodeType": "IdentifierPath",
"referencedDeclaration": 15290,
"src": "292:12:86"
},
"id": 13943,
"nodeType": "InheritanceSpecifier",
"src": "292:12:86"
},
{
"baseName": {
"id": 13944,
"name": "Context",
"nodeType": "IdentifierPath",
"referencedDeclaration": 24074,
"src": "332:7:86"
},
"id": 13945,
"nodeType": "InheritanceSpecifier",
"src": "332:7:86"
}
],
"contractDependencies": [
15290,
24074
],
"contractKind": "contract",
"fullyImplemented": true,
"id": 14014,
"linearizedBaseContracts": [
14014,
24074,
15290
],
"name": "ProductService",
"nameLocation": "270:14:86",
"nodeType": "ContractDefinition",
"nodes": [
{
"constant": true,
"functionSelector": "a3f4df7e",
"id": 13948,
"mutability": "constant",
"name": "NAME",
"nameLocation": "371:4:86",
"nodeType": "VariableDeclaration",
"scope": 14014,
"src": "347:47:86",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 13946,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "347:7:86",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": {
"hexValue": "50726f6475637453657276696365",
"id": 13947,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "378:16:86",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_a0656cfcc1bc970b947aca201a5cc1b43cf3c3649a4b2d6f82968797074fe0b8",
"typeString": "literal_string \"ProductService\""
},
"value": "ProductService"
},
"visibility": "public"
},
{
"body": {
"id": 13956,
"nodeType": "Block",
"src": "505:2:86",
"statements": []
},
"id": 13957,
"implemented": true,
"kind": "constructor",
"modifiers": [
{
"arguments": [
{
"id": 13953,
"name": "_registry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 13950,
"src": "494:9:86",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"id": 13954,
"modifierName": {
"id": 13952,
"name": "WithRegistry",
"nodeType": "IdentifierPath",
"referencedDeclaration": 15290,
"src": "481:12:86"
},
"nodeType": "ModifierInvocation",
"src": "481:23:86"
}
],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 13951,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 13950,
"mutability": "mutable",
"name": "_registry",
"nameLocation": "470:9:86",
"nodeType": "VariableDeclaration",
"scope": 13957,
"src": "462:17:86",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 13949,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "462:7:86",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "461:19:86"
},
"returnParameters": {
"id": 13955,
"nodeType": "ParameterList",
"parameters": [],
"src": "505:0:86"
},
"scope": 14014,
"src": "450:57:86",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 13990,
"nodeType": "Block",
"src": "533:368:86",
"statements": [
{
"assignments": [
null,
13961,
13963
],
"declarations": [
null,
{
"constant": false,
"id": 13961,
"mutability": "mutable",
"name": "isAuthorized",
"nameLocation": "631:12:86",
"nodeType": "VariableDeclaration",
"scope": 13990,
"src": "626:17:86",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 13960,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "626:4:86",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 13963,
"mutability": "mutable",
"name": "policyFlow",
"nameLocation": "653:10:86",
"nodeType": "VariableDeclaration",
"scope": 13990,
"src": "645:18:86",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 13962,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "645:7:86",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"id": 13970,
"initialValue": {
"arguments": [
{
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 13967,
"name": "_msgSender",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 24064,
"src": "701:10:86",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
"typeString": "function () view returns (address)"
}
},
"id": 13968,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "701:12:86",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"expression": {
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 13964,
"name": "_license",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 14013,
"src": "667:8:86",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILicense_$22433_$",
"typeString": "function () view returns (contract ILicense)"
}
},
"id": 13965,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "667:10:86",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_contract$_ILicense_$22433",
"typeString": "contract ILicense"
}
},
"id": 13966,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "getAuthorizationStatus",
"nodeType": "MemberAccess",
"referencedDeclaration": 22432,
"src": "667:33:86",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$_t_address_$",
"typeString": "function (address) view external returns (uint256,bool,address)"
}
},
"id": 13969,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "667:47:86",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$_t_address_$",
"typeString": "tuple(uint256,bool,address)"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "624:90:86"
},
{
"expression": {
"arguments": [
{
"id": 13972,
"name": "isAuthorized",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 13961,
"src": "733:12:86",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"hexValue": "4552524f523a5052532d3030313a4e4f545f415554484f52495a4544",
"id": 13973,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "747:30:86",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_2ea29d619e783380245e9479bc50992b7e9e66d498084c15d9aeb14649a09dc3",
"typeString": "literal_string \"ERROR:PRS-001:NOT_AUTHORIZED\""
},
"value": "ERROR:PRS-001:NOT_AUTHORIZED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_2ea29d619e783380245e9479bc50992b7e9e66d498084c15d9aeb14649a09dc3",
"typeString": "literal_string \"ERROR:PRS-001:NOT_AUTHORIZED\""
}
],
"id": 13971,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "725:7:86",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 13974,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "725:53:86",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 13975,
"nodeType": "ExpressionStatement",
"src": "725:53:86"
},
{
"expression": {
"arguments": [
{
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 13982,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 13977,
"name": "policyFlow",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 13963,
"src": "796:10:86",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"arguments": [
{
"hexValue": "30",
"id": 13980,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "818:1:86",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 13979,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "810:7:86",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 13978,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "810:7:86",
"typeDescriptions": {}
}
},
"id": 13981,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "810:10:86",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "796:24:86",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"hexValue": "4552524f523a5052532d3030323a504f4c4943595f464c4f575f4e4f545f5245534f4c564544",
"id": 13983,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "821:40:86",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_3481a442355178eff70c53b479d1406dd857fddda3e91ffea746909cf740d5cd",
"typeString": "literal_string \"ERROR:PRS-002:POLICY_FLOW_NOT_RESOLVED\""
},
"value": "ERROR:PRS-002:POLICY_FLOW_NOT_RESOLVED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_3481a442355178eff70c53b479d1406dd857fddda3e91ffea746909cf740d5cd",
"typeString": "literal_string \"ERROR:PRS-002:POLICY_FLOW_NOT_RESOLVED\""
}
],
"id": 13976,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "788:7:86",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 13984,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "788:74:86",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 13985,
"nodeType": "ExpressionStatement",
"src": "788:74:86"
},
{
"expression": {
"arguments": [
{
"id": 13987,
"name": "policyFlow",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 13963,
"src": "883:10:86",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 13986,
"name": "_delegate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 13999,
"src": "873:9:86",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
"typeString": "function (address)"
}
},
"id": 13988,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "873:21:86",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 13989,
"nodeType": "ExpressionStatement",
"src": "873:21:86"
}
]
},
"id": 13991,
"implemented": true,
"kind": "fallback",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 13958,
"nodeType": "ParameterList",
"parameters": [],
"src": "521:2:86"
},
"returnParameters": {
"id": 13959,
"nodeType": "ParameterList",
"parameters": [],
"src": "533:0:86"
},
"scope": 14014,
"src": "513:388:86",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"body": {
"id": 13998,
"nodeType": "Block",
"src": "1314:835:86",
"statements": [
{
"AST": {
"nodeType": "YulBlock",
"src": "1333:810:86",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1586:1:86",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1589:1:86",
"type": "",
"value": "0"
},
{
"arguments": [],
"functionName": {
"name": "calldatasize",
"nodeType": "YulIdentifier",
"src": "1592:12:86"
},
"nodeType": "YulFunctionCall",
"src": "1592:14:86"
}
],
"functionName": {
"name": "calldatacopy",
"nodeType": "YulIdentifier",
"src": "1573:12:86"
},
"nodeType": "YulFunctionCall",
"src": "1573:34:86"
},
"nodeType": "YulExpressionStatement",
"src": "1573:34:86"
},
{
"nodeType": "YulVariableDeclaration",
"src": "1734:74:86",
"value": {
"arguments": [
{
"arguments": [],
"functionName": {
"name": "gas",
"nodeType": "YulIdentifier",
"src": "1761:3:86"
},
"nodeType": "YulFunctionCall",
"src": "1761:5:86"
},
{
"name": "implementation",
"nodeType": "YulIdentifier",
"src": "1768:14:86"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1784:1:86",
"type": "",
"value": "0"
},
{
"arguments": [],
"functionName": {
"name": "calldatasize",
"nodeType": "YulIdentifier",
"src": "1787:12:86"
},
"nodeType": "YulFunctionCall",
"src": "1787:14:86"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1803:1:86",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1806:1:86",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "delegatecall",
"nodeType": "YulIdentifier",
"src": "1748:12:86"
},
"nodeType": "YulFunctionCall",
"src": "1748:60:86"
},
"variables": [
{
"name": "result",
"nodeType": "YulTypedName",
"src": "1738:6:86",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1876:1:86",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1879:1:86",
"type": "",
"value": "0"
},
{
"arguments": [],
"functionName": {
"name": "returndatasize",
"nodeType": "YulIdentifier",
"src": "1882:14:86"
},
"nodeType": "YulFunctionCall",
"src": "1882:16:86"
}
],
"functionName": {
"name": "returndatacopy",
"nodeType": "YulIdentifier",
"src": "1861:14:86"
},
"nodeType": "YulFunctionCall",
"src": "1861:38:86"
},
"nodeType": "YulExpressionStatement",
"src": "1861:38:86"
},
{
"cases": [
{
"body": {
"nodeType": "YulBlock",
"src": "1994:59:86",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2019:1:86",
"type": "",
"value": "0"
},
{
"arguments": [],
"functionName": {
"name": "returndatasize",
"nodeType": "YulIdentifier",
"src": "2022:14:86"
},
"nodeType": "YulFunctionCall",
"src": "2022:16:86"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2012:6:86"
},
"nodeType": "YulFunctionCall",
"src": "2012:27:86"
},
"nodeType": "YulExpressionStatement",
"src": "2012:27:86"
}
]
},
"nodeType": "YulCase",
"src": "1987:66:86",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "1992:1:86",
"type": "",
"value": "0"
}
},
{
"body": {
"nodeType": "YulBlock",
"src": "2074:59:86",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2099:1:86",
"type": "",
"value": "0"
},
{
"arguments": [],
"functionName": {
"name": "returndatasize",
"nodeType": "YulIdentifier",
"src": "2102:14:86"
},
"nodeType": "YulFunctionCall",
"src": "2102:16:86"
}
],
"functionName": {
"name": "return",
"nodeType": "YulIdentifier",
"src": "2092:6:86"
},
"nodeType": "YulFunctionCall",
"src": "2092:27:86"
},
"nodeType": "YulExpressionStatement",
"src": "2092:27:86"
}
]
},
"nodeType": "YulCase",
"src": "2066:67:86",
"value": "default"
}
],
"expression": {
"name": "result",
"nodeType": "YulIdentifier",
"src": "1920:6:86"
},
"nodeType": "YulSwitch",
"src": "1913:220:86"
}
]
},
"evmVersion": "istanbul",
"externalReferences": [
{
"declaration": 13994,
"isOffset": false,
"isSlot": false,
"src": "1768:14:86",
"valueSize": 1
}
],
"id": 13997,
"nodeType": "InlineAssembly",
"src": "1324:819:86"
}
]
},
"documentation": {
"id": 13992,
"nodeType": "StructuredDocumentation",
"src": "908:349:86",
"text": " @dev Delegates the current call to `implementation`.\n This function does not return to its internal call site, it will return directly to the external caller.\n This function is a 1:1 copy of _delegate from\n https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.6/contracts/proxy/Proxy.sol"
},
"id": 13999,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_delegate",
"nameLocation": "1271:9:86",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 13995,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 13994,
"mutability": "mutable",
"name": "implementation",
"nameLocation": "1289:14:86",
"nodeType": "VariableDeclaration",
"scope": 13999,
"src": "1281:22:86",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 13993,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1281:7:86",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "1280:24:86"
},
"returnParameters": {
"id": 13996,
"nodeType": "ParameterList",
"parameters": [],
"src": "1314:0:86"
},
"scope": 14014,
"src": "1262:887:86",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 14012,
"nodeType": "Block",
"src": "2208:65:86",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"hexValue": "4c6963656e7365",
"id": 14008,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2255:9:86",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_3b9d03c09d4e108ca3b630bc72507e91ae7da8eb1de63663acbce1d12cfbfb3a",
"typeString": "literal_string \"License\""
},
"value": "License"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_stringliteral_3b9d03c09d4e108ca3b630bc72507e91ae7da8eb1de63663acbce1d12cfbfb3a",
"typeString": "literal_string \"License\""
}
],
"expression": {
"id": 14006,
"name": "registry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 15176,
"src": "2234:8:86",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IRegistry_$21750",
"typeString": "contract IRegistry"
}
},
"id": 14007,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "getContract",
"nodeType": "MemberAccess",
"referencedDeclaration": 21723,
"src": "2234:20:86",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
"typeString": "function (bytes32) view external returns (address)"
}
},
"id": 14009,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2234:31:86",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 14005,
"name": "ILicense",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22433,
"src": "2225:8:86",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_ILicense_$22433_$",
"typeString": "type(contract ILicense)"
}
},
"id": 14010,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2225:41:86",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_contract$_ILicense_$22433",
"typeString": "contract ILicense"
}
},
"functionReturnParameters": 14004,
"id": 14011,
"nodeType": "Return",
"src": "2218:48:86"
}
]
},
"id": 14013,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_license",
"nameLocation": "2164:8:86",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 14000,