UNPKG

@gooddollar/goodcontracts

Version:
1,130 lines 80.5 kB
{ "contractName": "Initializable", "abi": [], "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_initialized\":{\"details\":\"Indicates that the contract has been initialized.\"},\"_initializing\":{\"details\":\"Indicates that the contract is in the process of being initialized.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":\"Initializable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"keccak256\":\"0xae7044b7c89ed74327b0979ae6f317c65d87b8d17a42d0c62d698d77d5de5511\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d676c978d8ecee5c4510f045b747d94f3a1381e39feb870d2675d5b6d45a371b\",\"dweb:/ipfs/QmUAokuHWPVAf14QkhPtSdYFyNa8HVje9CBEzwCcxH3xkP\"]}},\"version\":1}", "bytecode": "0x", "deployedBytecode": "0x", "immutableReferences": {}, "sourceMap": "", "deployedSourceMap": "", "source": "// SPDX-License-Identifier: MIT\n\n// solhint-disable-next-line compiler-version\npragma solidity >=0.4.24 <0.8.0;\n\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n * \n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\n * \n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n */\nabstract contract Initializable {\n\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n require(_initializing || _isConstructor() || !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /// @dev Returns true if and only if the function is running in the constructor\n function _isConstructor() private view returns (bool) {\n // extcodesize checks the size of the code stored in an address, and\n // address returns the current address. Since the code is still not\n // deployed when running a constructor, any checks on its code size will\n // yield zero, making it an effective way to detect if a contract is\n // under construction or not.\n address self = address(this);\n uint256 cs;\n // solhint-disable-next-line no-inline-assembly\n assembly { cs := extcodesize(self) }\n return cs == 0;\n }\n}\n", "sourcePath": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol", "ast": { "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol", "exportedSymbols": { "Initializable": [ 8211 ] }, "id": 8212, "license": "MIT", "nodeType": "SourceUnit", "nodes": [ { "id": 8142, "literals": [ "solidity", ">=", "0.4", ".24", "<", "0.8", ".0" ], "nodeType": "PragmaDirective", "src": "79:32:16" }, { "abstract": true, "baseContracts": [], "contractDependencies": [], "contractKind": "contract", "documentation": { "id": 8143, "nodeType": "StructuredDocumentation", "src": "114:940:16", "text": " @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\n external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n \n TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\n \n CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n that all initializers are idempotent. This is not verified automatically as constructors are by Solidity." }, "fullyImplemented": true, "id": 8211, "linearizedBaseContracts": [ 8211 ], "name": "Initializable", "nodeType": "ContractDefinition", "nodes": [ { "constant": false, "documentation": { "id": 8144, "nodeType": "StructuredDocumentation", "src": "1094:73:16", "text": " @dev Indicates that the contract has been initialized." }, "id": 8146, "mutability": "mutable", "name": "_initialized", "nodeType": "VariableDeclaration", "overrides": null, "scope": 8211, "src": "1172:25:16", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 8145, "name": "bool", "nodeType": "ElementaryTypeName", "src": "1172:4:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "private" }, { "constant": false, "documentation": { "id": 8147, "nodeType": "StructuredDocumentation", "src": "1204:91:16", "text": " @dev Indicates that the contract is in the process of being initialized." }, "id": 8149, "mutability": "mutable", "name": "_initializing", "nodeType": "VariableDeclaration", "overrides": null, "scope": 8211, "src": "1300:26:16", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 8148, "name": "bool", "nodeType": "ElementaryTypeName", "src": "1300:4:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "private" }, { "body": { "id": 8187, "nodeType": "Block", "src": "1454:368:16", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bool", "typeString": "bool" }, "id": 8159, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bool", "typeString": "bool" }, "id": 8156, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 8153, "name": "_initializing", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 8149, "src": "1472:13:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "BinaryOperation", "operator": "||", "rightExpression": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 8154, "name": "_isConstructor", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 8210, "src": "1489:14:16", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", "typeString": "function () view returns (bool)" } }, "id": 8155, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1489:16:16", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "1472:33:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "BinaryOperation", "operator": "||", "rightExpression": { "argumentTypes": null, "id": 8158, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "!", "prefix": true, "src": "1509:13:16", "subExpression": { "argumentTypes": null, "id": 8157, "name": "_initialized", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 8146, "src": "1510:12:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "1472:50:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564", "id": 8160, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "1524:48:16", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759", "typeString": "literal_string \"Initializable: contract is already initialized\"" }, "value": "Initializable: contract is already initialized" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759", "typeString": "literal_string \"Initializable: contract is already initialized\"" } ], "id": 8152, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ -18, -18 ], "referencedDeclaration": -18, "src": "1464:7:16", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 8161, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1464:109:16", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 8162, "nodeType": "ExpressionStatement", "src": "1464:109:16" }, { "assignments": [ 8164 ], "declarations": [ { "constant": false, "id": 8164, "mutability": "mutable", "name": "isTopLevelCall", "nodeType": "VariableDeclaration", "overrides": null, "scope": 8187, "src": "1584:19:16", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 8163, "name": "bool", "nodeType": "ElementaryTypeName", "src": "1584:4:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "id": 8167, "initialValue": { "argumentTypes": null, "id": 8166, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "!", "prefix": true, "src": "1606:14:16", "subExpression": { "argumentTypes": null, "id": 8165, "name": "_initializing", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 8149, "src": "1607:13:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", "src": "1584:36:16" }, { "condition": { "argumentTypes": null, "id": 8168, "name": "isTopLevelCall", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 8164, "src": "1634:14:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 8178, "nodeType": "IfStatement", "src": "1630:98:16", "trueBody": { "id": 8177, "nodeType": "Block", "src": "1650:78:16", "statements": [ { "expression": { "argumentTypes": null, "id": 8171, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 8169, "name": "_initializing", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 8149, "src": "1664:13:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", "id": 8170, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "1680:4:16", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "true" }, "src": "1664:20:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 8172, "nodeType": "ExpressionStatement", "src": "1664:20:16" }, { "expression": { "argumentTypes": null, "id": 8175, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 8173, "name": "_initialized", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 8146, "src": "1698:12:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", "id": 8174, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "1713:4:16", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "true" }, "src": "1698:19:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 8176, "nodeType": "ExpressionStatement", "src": "1698:19:16" } ] } }, { "id": 8179, "nodeType": "PlaceholderStatement", "src": "1738:1:16" }, { "condition": { "argumentTypes": null, "id": 8180, "name": "isTopLevelCall", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 8164, "src": "1754:14:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 8186, "nodeType": "IfStatement", "src": "1750:66:16", "trueBody": { "id": 8185, "nodeType": "Block", "src": "1770:46:16", "statements": [ { "expression": { "argumentTypes": null, "id": 8183, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 8181, "name": "_initializing", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 8149, "src": "1784:13:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "hexValue": "66616c7365", "id": 8182, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "1800:5:16", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" }, "src": "1784:21:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 8184, "nodeType": "ExpressionStatement", "src": "1784:21:16" } ] } } ] }, "documentation": { "id": 8150, "nodeType": "StructuredDocumentation", "src": "1333:93:16", "text": " @dev Modifier to protect an initializer function from being invoked twice." }, "id": 8188, "name": "initializer", "nodeType": "ModifierDefinition", "overrides": null, "parameters": { "id": 8151, "nodeType": "ParameterList", "parameters": [], "src": "1451:2:16" }, "src": "1431:391:16", "virtual": false, "visibility": "internal" }, { "body": { "id": 8209, "nodeType": "Block", "src": "1966:539:16", "statements": [ { "assignments": [ 8195 ], "declarations": [ { "constant": false, "id": 8195, "mutability": "mutable", "name": "self", "nodeType": "VariableDeclaration", "overrides": null, "scope": 8209, "src": "2325:12:16", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 8194, "name": "address", "nodeType": "ElementaryTypeName", "src": "2325:7:16", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "id": 8200, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 8198, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -28, "src": "2348:4:16", "typeDescriptions": { "typeIdentifier": "t_contract$_Initializable_$8211", "typeString": "contract Initializable" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_contract$_Initializable_$8211", "typeString": "contract Initializable" } ], "id": 8197, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "2340:7:16", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": { "id": 8196, "name": "address", "nodeType": "ElementaryTypeName", "src": "2340:7:16", "typeDescriptions": { "typeIdentifier": null, "typeString": null } } }, "id": 8199, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2340:13:16", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "VariableDeclarationStatement", "src": "2325:28:16" }, { "assignments": [ 8202 ], "declarations": [ { "constant": false, "id": 8202, "mutability": "mutable", "name": "cs", "nodeType": "VariableDeclaration", "overrides": null, "scope": 8209, "src": "2363:10:16", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 8201, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2363:7:16", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 8203, "initialValue": null, "nodeType": "VariableDeclarationStatement", "src": "2363:10:16" }, { "AST": { "nodeType": "YulBlock", "src": "2448:27:16", "statements": [ { "nodeType": "YulAssignment", "src": "2450:23:16", "value": { "arguments": [ { "name": "self", "nodeType": "YulIdentifier", "src": "2468:4:16" } ], "functionName": { "name": "extcodesize", "nodeType": "YulIdentifier", "src": "2456:11:16" }, "nodeType": "YulFunctionCall", "src": "2456:17:16" }, "variableNames": [ { "name": "cs", "nodeType": "YulIdentifier", "src": "2450:2:16" } ] } ] }, "evmVersion": "istanbul", "externalReferences": [ { "declaration": 8202, "isOffset": false, "isSlot": false, "src": "2450:2:16", "valueSize": 1 }, { "declaration": 8195, "isOffset": false, "isSlot": false, "src": "2468:4:16", "valueSize": 1 } ], "id": 8204, "nodeType": "InlineAssembly", "src": "2439:36:16" }, { "expression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 8207, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 8205, "name": "cs", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 8202, "src": "2491:2:16", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 8206, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "2497:1:16", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "2491:7:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "functionReturnParameters": 8193, "id": 8208, "nodeType": "Return", "src": "2484:14:16" } ] }, "documentation": { "id": 8189, "nodeType": "StructuredDocumentation", "src": "1828:79:16", "text": "@dev Returns true if and only if the function is running in the constructor" }, "id": 8210, "implemented": true, "kind": "function", "modifiers": [], "name": "_isConstructor", "nodeType": "FunctionDefinition", "overrides": null, "parameters": { "id": 8190, "nodeType": "ParameterList", "parameters": [], "src": "1935:2:16" }, "returnParameters": { "id": 8193, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 8192, "mutability": "mutable", "name": "", "nodeType": "VariableDeclaration", "overrides": null, "scope": 8210, "src": "1960:4:16", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 8191, "name": "bool", "nodeType": "ElementaryTypeName", "src": "1960:4:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "1959:6:16" }, "scope": 8211, "src": "1912:593:16", "stateMutability": "view", "virtual": false, "visibility": "private" } ], "scope": 8212, "src": "1055:1452:16" } ], "src": "79:2429:16" }, "legacyAST": { "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol", "exportedSymbols": { "Initializable": [ 8211 ] }, "id": 8212, "license": "MIT", "nodeType": "SourceUnit", "nodes": [ { "id": 8142, "literals": [ "solidity", ">=", "0.4", ".24", "<", "0.8", ".0" ], "nodeType": "PragmaDirective", "src": "79:32:16" }, { "abstract": true, "baseContracts": [], "contractDependencies": [], "contractKind": "contract", "documentation": { "id": 8143, "nodeType": "StructuredDocumentation", "src": "114:940:16", "text": " @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\n external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n \n TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\n \n CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n that all initializers are idempotent. This is not verified automatically as constructors are by Solidity." }, "fullyImplemented": true, "id": 8211, "linearizedBaseContracts": [ 8211 ], "name": "Initializable", "nodeType": "ContractDefinition", "nodes": [ { "constant": false, "documentation": { "id": 8144, "nodeType": "StructuredDocumentation", "src": "1094:73:16", "text": " @dev Indicates that the contract has been initialized." }, "id": 8146, "mutability": "mutable", "name": "_initialized", "nodeType": "VariableDeclaration", "overrides": null, "scope": 8211, "src": "1172:25:16", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 8145, "name": "bool", "nodeType": "ElementaryTypeName", "src": "1172:4:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "private" }, { "constant": false, "documentation": { "id": 8147, "nodeType": "StructuredDocumentation", "src": "1204:91:16", "text": " @dev Indicates that the contract is in the process of being initialized." }, "id": 8149, "mutability": "mutable", "name": "_initializing", "nodeType": "VariableDeclaration", "overrides": null, "scope": 8211, "src": "1300:26:16", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 8148, "name": "bool", "nodeType": "ElementaryTypeName", "src": "1300:4:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "private" }, { "body": { "id": 8187, "nodeType": "Block", "src": "1454:368:16", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bool", "typeString": "bool" }, "id": 8159, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bool", "typeString": "bool" }, "id": 8156, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 8153, "name": "_initializing", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 8149, "src": "1472:13:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "BinaryOperation", "operator": "||", "rightExpression": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 8154, "name": "_isConstructor", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 8210, "src": "1489:14:16", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", "typeString": "function () view returns (bool)" } }, "id": 8155, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1489:16:16", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "1472:33:16", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "BinaryOperation", "operator": "||", "rightExpres