{ "abi": [], "bytecode": { "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d3d44550c43ff7fceb906699b4da7332701b5e303f9329423298b9e310111a9164736f6c63430008160033", "sourceMap": "167:1661:46:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;167:1661:46;;;;;;;;;;;;;;;;;", "linkReferences": {} }, "deployedBytecode": { "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d3d44550c43ff7fceb906699b4da7332701b5e303f9329423298b9e310111a9164736f6c63430008160033", "sourceMap": "167:1661:46:-:0;;;;;;;;", "linkReferences": {} }, "methodIdentifiers": {}, "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"Provides functions for deriving a pool address from the factory, tokens, and the fee\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib_uniswap/v3-periphery/contracts/libraries/PoolAddress.sol\":\"PoolAddress\"},\"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/libraries/PoolAddress.sol\":{\"keccak256\":\"0x0a107d09991fd2dc9a3ca13bf0745f0b6f6f6ffea3e55ad3677ecdbadef089b4\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e179110a9ec825b7f15384a9c61f90261fe6227b289dac9996b0ed9cf1655b48\",\"dweb:/ipfs/Qma2amC8zJSW2PzPCk1nBYiFd4mjZiAW9z4kxjoYZPCtRr\"]}},\"version\":1}", "metadata": { "compiler": { "version": "0.8.22+commit.4fc1097e" }, "language": "Solidity", "output": { "abi": [], "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, "userdoc": { "kind": "user", "methods": {}, "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/libraries/PoolAddress.sol": "PoolAddress" }, "libraries": {} }, "sources": { "lib_uniswap/v3-periphery/contracts/libraries/PoolAddress.sol": { "keccak256": "0x0a107d09991fd2dc9a3ca13bf0745f0b6f6f6ffea3e55ad3677ecdbadef089b4", "urls": [ "bzz-raw://e179110a9ec825b7f15384a9c61f90261fe6227b289dac9996b0ed9cf1655b48", "dweb:/ipfs/Qma2amC8zJSW2PzPCk1nBYiFd4mjZiAW9z4kxjoYZPCtRr" ], "license": "GPL-2.0-or-later" } }, "version": 1 }, "ast": { "absolutePath": "lib_uniswap/v3-periphery/contracts/libraries/PoolAddress.sol", "id": 45893, "exportedSymbols": { "PoolAddress": [ 45892 ] }, "nodeType": "SourceUnit", "src": "45:1784:46", "nodes": [ { "id": 45796, "nodeType": "PragmaDirective", "src": "45:24:46", "nodes": [], "literals": [ "solidity", ">=", "0.5", ".0" ] }, { "id": 45892, "nodeType": "ContractDefinition", "src": "167:1661:46", "nodes": [ { "id": 45800, "nodeType": "VariableDeclaration", "src": "193:114:46", "nodes": [], "constant": true, "mutability": "constant", "name": "POOL_INIT_CODE_HASH", "nameLocation": "219:19:46", "scope": 45892, "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 45798, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "193:7:46", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": { "hexValue": "307865333466313939623139623262346634376636383434323631396435353535323764323434663738613332393765613839333235663834336638376238623534", "id": 45799, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "241:66:46", "typeDescriptions": { "typeIdentifier": "t_rational_102814774271675688723325049954498779091328469440286648861889194717372678376276_by_1", "typeString": "int_const 1028...(70 digits omitted)...6276" }, "value": "0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54" }, "visibility": "internal" }, { "id": 45808, "nodeType": "StructDefinition", "src": "362:90:46", "nodes": [], "canonicalName": "PoolAddress.PoolKey", "documentation": { "id": 45801, "nodeType": "StructuredDocumentation", "src": "314:43:46", "text": "@notice The identifying key of the pool" }, "members": [ { "constant": false, "id": 45803, "mutability": "mutable", "name": "token0", "nameLocation": "395:6:46", "nodeType": "VariableDeclaration", "scope": 45808, "src": "387:14:46", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 45802, "name": "address", "nodeType": "ElementaryTypeName", "src": "387:7:46", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "visibility": "internal" }, { "constant": false, "id": 45805, "mutability": "mutable", "name": "token1", "nameLocation": "419:6:46", "nodeType": "VariableDeclaration", "scope": 45808, "src": "411:14:46", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 45804, "name": "address", "nodeType": "ElementaryTypeName", "src": "411:7:46", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "visibility": "internal" }, { "constant": false, "id": 45807, "mutability": "mutable", "name": "fee", "nameLocation": "442:3:46", "nodeType": "VariableDeclaration", "scope": 45808, "src": "435:10:46", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint24", "typeString": "uint24" }, "typeName": { "id": 45806, "name": "uint24", "nodeType": "ElementaryTypeName", "src": "435:6:46", "typeDescriptions": { "typeIdentifier": "t_uint24", "typeString": "uint24" } }, "visibility": "internal" } ], "name": "PoolKey", "nameLocation": "369:7:46", "scope": 45892, "visibility": "public" }, { "id": 45840, "nodeType": "FunctionDefinition", "src": "784:274:46", "nodes": [], "body": { "id": 45839, "nodeType": "Block", "src": "917:141:46", "nodes": [], "statements": [ { "condition": { "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 45823, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "id": 45821, "name": "tokenA", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45811, "src": "931:6:46", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": ">", "rightExpression": { "id": 45822, "name": "tokenB", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45813, "src": "940:6:46", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "931:15:46", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 45832, "nodeType": "IfStatement", "src": "927:56:46", "trueBody": { "expression": { "id": 45830, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "components": [ { "id": 45824, "name": "tokenA", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45811, "src": "949:6:46", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "id": 45825, "name": "tokenB", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45813, "src": "957:6:46", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "id": 45826, "isConstant": false, "isInlineArray": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "TupleExpression", "src": "948:16:46", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_address_$_t_address_$", "typeString": "tuple(address,address)" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "components": [ { "id": 45827, "name": "tokenB", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45813, "src": "968:6:46", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "id": 45828, "name": "tokenA", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45811, "src": "976:6:46", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "id": 45829, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "967:16:46", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_address_$_t_address_$", "typeString": "tuple(address,address)" } }, "src": "948:35:46", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 45831, "nodeType": "ExpressionStatement", "src": "948:35:46" } }, { "expression": { "arguments": [ { "id": 45834, "name": "tokenA", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45811, "src": "1017:6:46", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "id": 45835, "name": "tokenB", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45813, "src": "1033:6:46", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "id": 45836, "name": "fee", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45815, "src": "1046:3:46", "typeDescriptions": { "typeIdentifier": "t_uint24", "typeString": "uint24" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint24", "typeString": "uint24" } ], "id": 45833, "name": "PoolKey", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45808, "src": "1000:7:46", "typeDescriptions": { "typeIdentifier": "t_type$_t_struct$_PoolKey_$45808_storage_ptr_$", "typeString": "type(struct PoolAddress.PoolKey storage pointer)" } }, "id": 45837, "isConstant": false, "isLValue": false, "isPure": false, "kind": "structConstructorCall", "lValueRequested": false, "nameLocations": [ "1009:6:46", "1025:6:46", "1041:3:46" ], "names": [ "token0", "token1", "fee" ], "nodeType": "FunctionCall", "src": "1000:51:46", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr", "typeString": "struct PoolAddress.PoolKey memory" } }, "functionReturnParameters": 45820, "id": 45838, "nodeType": "Return", "src": "993:58:46" } ] }, "documentation": { "id": 45809, "nodeType": "StructuredDocumentation", "src": "458:321:46", "text": "@notice Returns PoolKey: the ordered tokens with the matched fee levels\n @param tokenA The first token of a pool, unsorted\n @param tokenB The second token of a pool, unsorted\n @param fee The fee level of the pool\n @return Poolkey The pool details with ordered token0 and token1 assignments" }, "implemented": true, "kind": "function", "modifiers": [], "name": "getPoolKey", "nameLocation": "793:10:46", "parameters": { "id": 45816, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 45811, "mutability": "mutable", "name": "tokenA", "nameLocation": "821:6:46", "nodeType": "VariableDeclaration", "scope": 45840, "src": "813:14:46", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 45810, "name": "address", "nodeType": "ElementaryTypeName", "src": "813:7:46", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "visibility": "internal" }, { "constant": false, "id": 45813, "mutability": "mutable", "name": "tokenB", "nameLocation": "845:6:46", "nodeType": "VariableDeclaration", "scope": 45840, "src": "837:14:46", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 45812, "name": "address", "nodeType": "ElementaryTypeName", "src": "837:7:46", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "visibility": "internal" }, { "constant": false, "id": 45815, "mutability": "mutable", "name": "fee", "nameLocation": "868:3:46", "nodeType": "VariableDeclaration", "scope": 45840, "src": "861:10:46", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint24", "typeString": "uint24" }, "typeName": { "id": 45814, "name": "uint24", "nodeType": "ElementaryTypeName", "src": "861:6:46", "typeDescriptions": { "typeIdentifier": "t_uint24", "typeString": "uint24" } }, "visibility": "internal" } ], "src": "803:74:46" }, "returnParameters": { "id": 45820, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 45819, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 45840, "src": "901:14:46", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr", "typeString": "struct PoolAddress.PoolKey" }, "typeName": { "id": 45818, "nodeType": "UserDefinedTypeName", "pathNode": { "id": 45817, "name": "PoolKey", "nameLocations": [ "901:7:46" ], "nodeType": "IdentifierPath", "referencedDeclaration": 45808, "src": "901:7:46" }, "referencedDeclaration": 45808, "src": "901:7:46", "typeDescriptions": { "typeIdentifier": "t_struct$_PoolKey_$45808_storage_ptr", "typeString": "struct PoolAddress.PoolKey" } }, "visibility": "internal" } ], "src": "900:16:46" }, "scope": 45892, "stateMutability": "pure", "virtual": false, "visibility": "internal" }, { "id": 45891, "nodeType": "FunctionDefinition", "src": "1305:521:46", "nodes": [], "body": { "id": 45890, "nodeType": "Block", "src": "1403:423:46", "nodes": [], "statements": [ { "expression": { "arguments": [ { "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 45856, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "expression": { "id": 45852, "name": "key", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45846, "src": "1421:3:46", "typeDescriptions": { "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr", "typeString": "struct PoolAddress.PoolKey memory" } }, "id": 45853, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberLocation": "1425:6:46", "memberName": "token0", "nodeType": "MemberAccess", "referencedDeclaration": 45803, "src": "1421:10:46", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "<", "rightExpression": { "expression": { "id": 45854, "name": "key", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45846, "src": "1434:3:46", "typeDescriptions": { "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr", "typeString": "struct PoolAddress.PoolKey memory" } }, "id": 45855, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberLocation": "1438:6:46", "memberName": "token1", "nodeType": "MemberAccess", "referencedDeclaration": 45805, "src": "1434:10:46", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "1421:23:46", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 45851, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ -18, -18 ], "referencedDeclaration": -18, "src": "1413:7:46", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, "id": 45857, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1413:32:46", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 45858, "nodeType": "ExpressionStatement", "src": "1413:32:46" }, { "expression": { "id": 45888, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "id": 45859, "name": "pool", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45849, "src": "1455:4:46", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "arguments": [ { "arguments": [ { "arguments": [ { "arguments": [ { "arguments": [ { "hexValue": "ff", "id": 45869, "isConstant": false, "isLValue": false, "isPure": true, "kind": "hexString", "lValueRequested": false, "nodeType": "Literal", "src": "1589:7:46", "typeDescriptions": { "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9", "typeString": "literal_string hex\"ff\"" } }, { "id": 45870, "name": "factory", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45843, "src": "1622:7:46", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "arguments": [ { "arguments": [ { "expression": { "id": 45874, "name": "key", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45846, "src": "1676:3:46", "typeDescriptions": { "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr", "typeString": "struct PoolAddress.PoolKey memory" } }, "id": 45875, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberLocation": "1680:6:46", "memberName": "token0", "nodeType": "MemberAccess", "referencedDeclaration": 45803, "src": "1676:10:46", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "expression": { "id": 45876, "name": "key", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45846, "src": "1688:3:46", "typeDescriptions": { "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr", "typeString": "struct PoolAddress.PoolKey memory" } }, "id": 45877, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberLocation": "1692:6:46", "memberName": "token1", "nodeType": "MemberAccess", "referencedDeclaration": 45805, "src": "1688:10:46", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "expression": { "id": 45878, "name": "key", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45846, "src": "1700:3:46", "typeDescriptions": { "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr", "typeString": "struct PoolAddress.PoolKey memory" } }, "id": 45879, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "memberLocation": "1704:3:46", "memberName": "fee", "nodeType": "MemberAccess", "referencedDeclaration": 45807, "src": "1700:7:46", "typeDescriptions": { "typeIdentifier": "t_uint24", "typeString": "uint24" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint24", "typeString": "uint24" } ], "expression": { "id": 45872, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -1, "src": "1665:3:46", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 45873, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberLocation": "1669:6:46", "memberName": "encode", "nodeType": "MemberAccess", "src": "1665:10:46", "typeDescriptions": { "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 45880, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1665:43:46", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 45871, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -8, "src": "1655:9:46", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 45881, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1655:54:46", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "id": 45882, "name": "POOL_INIT_CODE_HASH", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 45800, "src": "1735:19:46", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9", "typeString": "literal_string hex\"ff\"" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "expression": { "id": 45867, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -1, "src": "1547:3:46", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 45868, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberLocation": "1551:12:46", "memberName": "encodePacked", "nodeType": "MemberAccess", "src": "1547:16:46", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 45883, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1547:229:46", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 45866, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": -8, "src": "1516:9:46", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, "id": 45884, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1516:278:46", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 45865, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "1491:7:46", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": { "id": 45864, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1491:7:46", "typeDescriptions": {} } }, "id": 45885, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1491:317:46", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 45863, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "1470:7:46", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint160_$", "typeString": "type(uint160)" }, "typeName": { "id": 45862, "name": "uint160", "nodeType": "ElementaryTypeName", "src": "1470:7:46", "typeDescriptions": {} } }, "id": 45886, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1470:348:46", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_uint160", "typeString": "uint160" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_uint160", "typeString": "uint160" } ], "id": 45861, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "1462:7:46", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": { "id": 45860, "name": "address", "nodeType": "ElementaryTypeName", "src": "1462:7:46", "typeDescriptions": {} } }, "id": 45887, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "1462:357:46", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "1455:364:46", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 45889, "nodeType": "ExpressionStatement", "src": "1455:364:46" } ] }, "documentation": { "id": 45841, "nodeType": "StructuredDocumentation", "src": "1064:236:46", "text": "@notice Deterministically computes the pool address given the factory and PoolKey\n @param factory The Uniswap V3 factory contract address\n @param key The PoolKey\n @return pool The contract address of the V3 pool" }, "implemented": true, "kind": "function", "modifiers": [], "name": "computeAddress", "nameLocation": "1314:14:46", "parameters": { "id": 45847, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 45843, "mutability": "mutable", "name": "factory", "nameLocation": "1337:7:46", "nodeType": "VariableDeclaration", "scope": 45891, "src": "1329:15:46", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 45842, "name": "address", "nodeType": "ElementaryTypeName", "src": "1329:7:46", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "visibility": "internal" }, { "constant": false, "id": 45846, "mutability": "mutable", "name": "key", "nameLocation": "1361:3:46", "nodeType": "VariableDeclaration", "scope": 45891, "src": "1346:18:46", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_struct$_PoolKey_$45808_memory_ptr", "typeString": "struct PoolAddress.PoolKey" }, "typeName": { "id": 45845, "nodeType": "UserDefinedTypeName", "pathNode": { "id": 45844, "name": "PoolKey", "nameLocations": [ "1346:7:46" ], "nodeType": "IdentifierPath", "referencedDeclaration": 45808, "src": "1346:7:46" }, "referencedDeclaration": 45808, "src": "1346:7:46", "typeDescriptions": { "typeIdentifier": "t_struct$_PoolKey_$45808_storage_ptr", "typeString": "struct PoolAddress.PoolKey" } }, "visibility": "internal" } ], "src": "1328:37:46" }, "returnParameters": { "id": 45850, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 45849, "mutability": "mutable", "name": "pool", "nameLocation": "1397:4:46", "nodeType": "VariableDeclaration", "scope": 45891, "src": "1389:12:46", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 45848, "name": "address", "nodeType": "ElementaryTypeName", "src": "1389:7:46", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "visibility": "internal" } ], "src": "1388:14:46" }, "scope": 45892, "stateMutability": "pure", "virtual": false, "visibility": "internal" } ], "abstract": false, "baseContracts": [], "canonicalName": "PoolAddress", "contractDependencies": [], "contractKind": "library", "documentation": { "id": 45797, "nodeType": "StructuredDocumentation", "src": "71:96:46", "text": "@title Provides functions for deriving a pool address from the factory, tokens, and the fee" }, "fullyImplemented": true, "linearizedBaseContracts": [ 45892 ], "name": "PoolAddress", "nameLocation": "175:11:46", "scope": 45893, "usedErrors": [], "usedEvents": [] } ], "license": "GPL-2.0-or-later" }, "id": 46 }