{ "abi": [ { "inputs": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "uint160", "name": "sqrtPriceX96", "type": "uint160" } ], "name": "createAndInitializePoolIfNecessary", "outputs": [ { "internalType": "address", "name": "pool", "type": "address" } ], "stateMutability": "payable", "type": "function" } ], "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, "methodIdentifiers": { "createAndInitializePoolIfNecessary(address,address,uint24,uint160)": "13ead562" }, "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"createAndInitializePoolIfNecessary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"createAndInitializePoolIfNecessary(address,address,uint24,uint160)\":{\"details\":\"This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool\",\"params\":{\"fee\":\"The fee amount of the v3 pool for the specified token pair\",\"sqrtPriceX96\":\"The initial square root price of the pool as a Q64.96 value\",\"token0\":\"The contract address of token0 of the pool\",\"token1\":\"The contract address of token1 of the pool\"},\"returns\":{\"pool\":\"Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary\"}}},\"title\":\"Creates and initializes V3 Pools\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"createAndInitializePoolIfNecessary(address,address,uint24,uint160)\":{\"notice\":\"Creates a new pool if it does not exist, then initializes if not initialized\"}},\"notice\":\"Provides a method for creating and initializing a pool, if necessary, for bundling with other methods that require the pool to exist.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib_uniswap/v3-periphery/contracts/interfaces/IPoolInitializer.sol\":\"IPoolInitializer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoD[xarrscLMcCTU]uljmul:fDnTOcmu\",\"stackAllocation\":true}},\"runs\":999999999},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@uniswap/v3-core/=lib_uniswap/v3-core/\",\":@uniswap/v3-periphery/=lib_uniswap/v3-periphery/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":v3-core/=lib_uniswap/v3-core/\",\":v3-periphery/libraries/=lib_uniswap/v3-periphery/contracts/libraries/\"]},\"sources\":{\"lib_uniswap/v3-periphery/contracts/interfaces/IPoolInitializer.sol\":{\"keccak256\":\"0x9d7695e8d94c22cc5fcced602017aabb988de89981ea7bee29ea629d5328a862\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://61b50933026ee1017db2a6273af8cedc3238c95dca58880db0918dbdbb2f064f\",\"dweb:/ipfs/QmUebR26pqG25d18aBELKz8aFFKkmHa8PxntzXTA7o9Ldu\"]}},\"version\":1}", "metadata": { "compiler": { "version": "0.8.22+commit.4fc1097e" }, "language": "Solidity", "output": { "abi": [ { "inputs": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "uint160", "name": "sqrtPriceX96", "type": "uint160" } ], "stateMutability": "payable", "type": "function", "name": "createAndInitializePoolIfNecessary", "outputs": [ { "internalType": "address", "name": "pool", "type": "address" } ] } ], "devdoc": { "kind": "dev", "methods": { "createAndInitializePoolIfNecessary(address,address,uint24,uint160)": { "details": "This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool", "params": { "fee": "The fee amount of the v3 pool for the specified token pair", "sqrtPriceX96": "The initial square root price of the pool as a Q64.96 value", "token0": "The contract address of token0 of the pool", "token1": "The contract address of token1 of the pool" }, "returns": { "pool": "Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary" } } }, "version": 1 }, "userdoc": { "kind": "user", "methods": { "createAndInitializePoolIfNecessary(address,address,uint24,uint160)": { "notice": "Creates a new pool if it does not exist, then initializes if not initialized" } }, "version": 1 } }, "settings": { "remappings": [ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@uniswap/v3-core/=lib_uniswap/v3-core/", "@uniswap/v3-periphery/=lib_uniswap/v3-periphery/", "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "v3-core/=lib_uniswap/v3-core/", "v3-periphery/libraries/=lib_uniswap/v3-periphery/contracts/libraries/" ], "optimizer": { "runs": 999999999, "details": { "peephole": true, "inliner": true, "jumpdestRemover": true, "orderLiterals": true, "deduplicate": true, "cse": true, "constantOptimizer": true, "yul": true, "yulDetails": { "stackAllocation": true, "optimizerSteps": "dhfoD[xarrscLMcCTU]uljmul:fDnTOcmu" } } }, "metadata": { "bytecodeHash": "ipfs" }, "compilationTarget": { "lib_uniswap/v3-periphery/contracts/interfaces/IPoolInitializer.sol": "IPoolInitializer" }, "libraries": {} }, "sources": { "lib_uniswap/v3-periphery/contracts/interfaces/IPoolInitializer.sol": { "keccak256": "0x9d7695e8d94c22cc5fcced602017aabb988de89981ea7bee29ea629d5328a862", "urls": [ "bzz-raw://61b50933026ee1017db2a6273af8cedc3238c95dca58880db0918dbdbb2f064f", "dweb:/ipfs/QmUebR26pqG25d18aBELKz8aFFKkmHa8PxntzXTA7o9Ldu" ], "license": "GPL-2.0-or-later" } }, "version": 1 }, "ast": { "absolutePath": "lib_uniswap/v3-periphery/contracts/interfaces/IPoolInitializer.sol", "id": 45355, "exportedSymbols": { "IPoolInitializer": [ 45354 ] }, "nodeType": "SourceUnit", "src": "45:1117:43", "nodes": [ { "id": 45337, "nodeType": "PragmaDirective", "src": "45:24:43", "nodes": [], "literals": [ "solidity", ">=", "0.7", ".5" ] }, { "id": 45338, "nodeType": "PragmaDirective", "src": "70:19:43", "nodes": [], "literals": [ "abicoder", "v2" ] }, { "id": 45354, "nodeType": "ContractDefinition", "src": "285:876:43", "nodes": [ { "id": 45353, "nodeType": "FunctionDefinition", "src": "971:188:43", "nodes": [], "documentation": { "id": 45340, "nodeType": "StructuredDocumentation", "src": "318:648:43", "text": "@notice Creates a new pool if it does not exist, then initializes if not initialized\n @dev This method can be bundled with others via IMulticall for the first action (e.g. mint) performed against a pool\n @param token0 The contract address of token0 of the pool\n @param token1 The contract address of token1 of the pool\n @param fee The fee amount of the v3 pool for the specified token pair\n @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value\n @return pool Returns the pool address based on the pair of tokens and fee, will return the newly created pool address if necessary" }, "functionSelector": "13ead562", "implemented": false, "kind": "function", "modifiers": [], "name": "createAndInitializePoolIfNecessary", "nameLocation": "980:34:43", "parameters": { "id": 45349, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 45342, "mutability": "mutable", "name": "token0", "nameLocation": "1032:6:43", "nodeType": "VariableDeclaration", "scope": 45353, "src": "1024:14:43", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 45341, "name": "address", "nodeType": "ElementaryTypeName", "src": "1024:7:43", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "visibility": "internal" }, { "constant": false, "id": 45344, "mutability": "mutable", "name": "token1", "nameLocation": "1056:6:43", "nodeType": "VariableDeclaration", "scope": 45353, "src": "1048:14:43", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 45343, "name": "address", "nodeType": "ElementaryTypeName", "src": "1048:7:43", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "visibility": "internal" }, { "constant": false, "id": 45346, "mutability": "mutable", "name": "fee", "nameLocation": "1079:3:43", "nodeType": "VariableDeclaration", "scope": 45353, "src": "1072:10:43", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint24", "typeString": "uint24" }, "typeName": { "id": 45345, "name": "uint24", "nodeType": "ElementaryTypeName", "src": "1072:6:43", "typeDescriptions": { "typeIdentifier": "t_uint24", "typeString": "uint24" } }, "visibility": "internal" }, { "constant": false, "id": 45348, "mutability": "mutable", "name": "sqrtPriceX96", "nameLocation": "1100:12:43", "nodeType": "VariableDeclaration", "scope": 45353, "src": "1092:20:43", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint160", "typeString": "uint160" }, "typeName": { "id": 45347, "name": "uint160", "nodeType": "ElementaryTypeName", "src": "1092:7:43", "typeDescriptions": { "typeIdentifier": "t_uint160", "typeString": "uint160" } }, "visibility": "internal" } ], "src": "1014:104:43" }, "returnParameters": { "id": 45352, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 45351, "mutability": "mutable", "name": "pool", "nameLocation": "1153:4:43", "nodeType": "VariableDeclaration", "scope": 45353, "src": "1145:12:43", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 45350, "name": "address", "nodeType": "ElementaryTypeName", "src": "1145:7:43", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "visibility": "internal" } ], "src": "1144:14:43" }, "scope": 45354, "stateMutability": "payable", "virtual": false, "visibility": "external" } ], "abstract": false, "baseContracts": [], "canonicalName": "IPoolInitializer", "contractDependencies": [], "contractKind": "interface", "documentation": { "id": 45339, "nodeType": "StructuredDocumentation", "src": "91:194:43", "text": "@title Creates and initializes V3 Pools\n @notice Provides a method for creating and initializing a pool, if necessary, for bundling with other methods that\n require the pool to exist." }, "fullyImplemented": false, "linearizedBaseContracts": [ 45354 ], "name": "IPoolInitializer", "nameLocation": "295:16:43", "scope": 45355, "usedErrors": [], "usedEvents": [] } ], "license": "GPL-2.0-or-later" }, "id": 43 }