{"version":3,"file":"static/chunks/1600-0161fa95b11bba9a.js","mappings":"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","sources":["webpack://_N_E/./utils/calculator/data.ts","webpack://_N_E/./utils/calculator/helper.ts","webpack://_N_E/./utils/calculator/math.ts","webpack://_N_E/./views/style.ts","webpack://_N_E/<anon>"],"sourcesContent":["import { priceToTick } from \"@/helper/positionHelper\";\nimport {\n  ISubgraphToken,\n  Pool,\n  Position,\n  Tick,\n} from \"@/interfaces/calculator/uniswap.interface\";\nimport {\n  ApertureSupportedChainId,\n  getLogger,\n  viem,\n} from \"@aperture_finance/uniswap-v3-automation-sdk\";\nimport {\n  Pool as SDKPool,\n  Position as SDKPosition,\n} from \"@aperture_finance/uniswap-v3-sdk\";\nimport { Token as SDKToken } from \"@uniswap/sdk-core\";\nimport axios from \"axios\";\nimport Big from \"big.js\";\nimport BigNumber from \"bignumber.js\";\nimport { getUniqueItems, sortTokens } from \"./helper\";\nimport {\n  averageArray,\n  getLiquidityDelta,\n  getTokensAmountFromDepositAmountUSD,\n} from \"./math\";\n\nconst _querySupgraph = async (\n  subgraphEndpoint: string,\n  query: string\n): Promise<any> => {\n  const { data } = await axios({\n    url: subgraphEndpoint,\n    method: \"post\",\n    data: {\n      query,\n    },\n  });\n\n  const errors = data.errors;\n  if (errors && errors.length > 0) {\n    throw new Error(`Uniswap Subgraph Errors: ${JSON.stringify(errors)}`);\n  }\n\n  return data.data;\n};\n\nexport const getPoolVolumes = async (\n  subgraphEndpoint: string,\n  poolAddress: string,\n  numberOfDays: number = 30\n) => {\n  const { poolDayDatas } = await _querySupgraph(\n    subgraphEndpoint,\n    `{\n    poolDayDatas(skip: 1, first: ${numberOfDays}, orderBy: date, orderDirection: desc, where:{pool: \"${poolAddress}\"}) {\n      volumeUSD\n    }\n  }`\n  );\n\n  return poolDayDatas;\n};\n\nexport const getPositionBreakdown = async (\n  networkId: ApertureSupportedChainId,\n  mockPool: SDKPool,\n  priceAssumptionValue: number,\n  priceRangeMinValue: number,\n  priceRangeMaxValue: number,\n  token0CurrentPrice: number,\n  token1CurrentPrice: number,\n  depositAmount: string,\n  token0: ISubgraphToken,\n  token1: ISubgraphToken\n) => {\n  const positionBreakdown = [];\n  const { amount0, amount1 } = getTokensAmountFromDepositAmountUSD(\n    priceAssumptionValue,\n    priceRangeMinValue,\n    priceRangeMaxValue,\n    token1CurrentPrice,\n    token0CurrentPrice,\n    Number(depositAmount)\n  );\n  const deltaL = getLiquidityDelta(\n    priceAssumptionValue,\n    priceRangeMinValue,\n    priceRangeMaxValue,\n    amount0,\n    amount1,\n    Number(token0?.decimals || 18),\n    Number(token1?.decimals || 18)\n  );\n  const tokenA = new SDKToken(\n    networkId,\n    mockPool.token0.address,\n    mockPool.token0.decimals\n  );\n  const tokenB = new SDKToken(\n    networkId,\n    mockPool.token1.address,\n    mockPool.token1.decimals\n  );\n  const tickLower = priceToTick(\n    tokenA,\n    tokenB,\n    new BigNumber(priceRangeMinValue).toFixed(),\n    mockPool.tickSpacing,\n    true\n  );\n  const tickUpper = priceToTick(\n    tokenA,\n    tokenB,\n    new BigNumber(priceRangeMaxValue).toFixed(),\n    mockPool.tickSpacing,\n    true\n  );\n  if (tickLower === tickUpper) return [];\n  const mockPosition = new SDKPosition({\n    pool: mockPool,\n    liquidity: deltaL.toFixed(0),\n    tickLower: Math.min(tickLower, tickUpper),\n    tickUpper: Math.max(tickLower, tickUpper),\n  });\n\n  const multiplier = 2; // Max price for breakdown is priceAssumptionValue * 2\n  const splits = 200; // Fetch price breakdown for 200 times\n  const denominator = splits / multiplier;\n  const decimals = Math.pow(\n    10,\n    mockPool.token1.decimals - mockPool.token0.decimals\n  );\n  for (let count = 1; count <= splits; count++) {\n    try {\n      const mockPrice = viem.getPositionAtPrice(\n        mockPosition,\n        new Big((priceAssumptionValue * decimals * count) / denominator)\n      );\n      positionBreakdown.push({\n        price: (priceAssumptionValue * count) / denominator,\n        token0Amount: Number(mockPrice.amount0.toExact()),\n        token1Amount: Number(mockPrice.amount1.toExact()),\n      });\n    } catch (error) {\n      console.log(error);\n      getLogger().error(`Failed to getPositionAtPrice:`, error as Error);\n    }\n  }\n  return positionBreakdown;\n};\n\nexport const getAvgTradingVolume = async (\n  subgraphEndpoint: string,\n  poolAddress: string,\n  numberOfDays: number = 7\n): Promise<number> => {\n  const poolDayDatas = await getPoolVolumes(\n    subgraphEndpoint,\n    poolAddress,\n    numberOfDays\n  );\n\n  const volumes = poolDayDatas.map((d: { volumeUSD: string }) =>\n    Number(d.volumeUSD)\n  );\n  return averageArray(volumes);\n};\n\nconst _getPoolTicksByPage = async (\n  subgraphEndpoint: string,\n  poolAddress: string,\n  page: number\n): Promise<Tick[]> => {\n  try {\n    const res = await _querySupgraph(\n      subgraphEndpoint,\n      `{\n    ticks(first: 1000, skip: ${\n      page * 1000\n    }, where: { poolAddress: \"${poolAddress}\" }, orderBy: tickIdx) {\n      tickIdx\n      liquidityNet\n      price0\n      price1\n    }\n  }`\n    );\n    return res.ticks;\n  } catch (e) {\n    getLogger().warn(\"Failed to get pool ticks\", {\n      error: (e as Error).message,\n    });\n    return [];\n  }\n};\nexport const getPoolTicks = async (\n  subgraphEndpoint: string,\n  poolAddress: string\n): Promise<Tick[]> => {\n  const PAGE_SIZE = 3;\n  let result: Tick[] = [];\n  let page = 0;\n  while (true) {\n    const [pool1, pool2, pool3] = await Promise.all([\n      _getPoolTicksByPage(subgraphEndpoint, poolAddress, page),\n      _getPoolTicksByPage(subgraphEndpoint, poolAddress, page + 1),\n      _getPoolTicksByPage(subgraphEndpoint, poolAddress, page + 2),\n    ]);\n\n    result = [...result, ...pool1, ...pool2, ...pool3];\n    if (pool1.length === 0 || pool2.length === 0 || pool3.length === 0) {\n      break;\n    }\n    page += PAGE_SIZE;\n  }\n  return result;\n};\n\n// TODO\nconst _processTokenInfo = (token: ISubgraphToken) => {\n  // token.logoURI = getTokenLogoURL(getCurrentNetwork().id, token.id);\n  // // TODO: check the network id before replace the token name\n\n  // if (token.name === \"Wrapped Ether\" || token.name === \"Wrapped Ethereum\") {\n  //   token.name = \"Ethereum\";\n  //   token.symbol = \"ETH\";\n  //   token.logoURI =\n  //     \"https://cdn.iconscout.com/icon/free/png-128/ethereum-2752194-2285011.png\";\n  // }\n  // if (token.name === \"Wrapped Matic\") {\n  //   token.name = \"Polygon Native Token\";\n  //   token.symbol = \"MATIC\";\n  // }\n  // if (token.name === \"Wrapped BNB\") {\n  //   token.name = \"BSC Native Token\";\n  //   token.symbol = \"BNB\";\n  // }\n\n  return token;\n};\n\nexport const getTopTokenList = async (\n  subgraphEndpoint: string\n): Promise<ISubgraphToken[]> => {\n  const res = await _querySupgraph(\n    subgraphEndpoint,\n    `{\n    tokens(skip: 0, first: 500, orderBy: volumeUSD, orderDirection: desc) {\n      id\n      name\n      symbol\n      volumeUSD\n      decimals\n    }\n  }`\n  );\n\n  if (res === undefined || res.tokens.length === 0) {\n    return [];\n  }\n\n  const tokens = res.tokens as ISubgraphToken[];\n  let result = tokens\n    .map(_processTokenInfo)\n    .filter((token) => token.symbol.length < 30);\n\n  return result;\n};\n\nexport const getToken = async (\n  subgraphEndpoint: string,\n  tokenAddress: string\n): Promise<ISubgraphToken> => {\n  const res = await _querySupgraph(\n    subgraphEndpoint,\n    `{\n    token(id: \"${tokenAddress.toLowerCase()}\") {\n      id\n      name\n      symbol\n      volumeUSD\n      decimals\n    }\n  }`\n  );\n\n  if (res.token !== null) {\n    res.token = _processTokenInfo(res.token);\n  }\n\n  return res.token;\n};\n\nexport const getPoolFromPair = async (\n  subgraphEndpoint: string,\n  token0: ISubgraphToken,\n  token1: ISubgraphToken,\n  disabledTopPositions?: boolean\n): Promise<Pool[]> => {\n  const sortedTokens = sortTokens(token0, token1);\n\n  let feeGrowthGlobal = `feeGrowthGlobal0X128\\nfeeGrowthGlobal1X128`;\n  if (disabledTopPositions) {\n    feeGrowthGlobal = \"\";\n  }\n\n  const { pools } = await _querySupgraph(\n    subgraphEndpoint,\n    `{\n    pools(orderBy: feeTier, where: {\n        token0: \"${sortedTokens[0].id}\",\n        token1: \"${sortedTokens[1].id}\"}) {\n      id\n      tick\n      sqrtPrice\n      feeTier\n      liquidity\n      token0Price\n      token1Price\n      ${feeGrowthGlobal}\n    }\n  }`\n  );\n\n  return pools as Pool[];\n};\n\nexport const getCurrentTick = async (\n  subgraphEndpoint: string,\n  poolId: string\n): Promise<string> => {\n  const { pool } = await _querySupgraph(\n    subgraphEndpoint,\n    `{\n    pool(id: \"${poolId}\") {\n      tick\n    }\n  }`\n  );\n  return pool.tick;\n};\n\nconst _getPoolPositionsByPage = async (\n  subgraphEndpoint: string,\n  poolAddress: string,\n  page: number\n): Promise<Position[]> => {\n  try {\n    const res = await _querySupgraph(\n      subgraphEndpoint,\n      `{\n    positions(where: {\n      pool: \"${poolAddress}\",\n      liquidity_gt: 0,\n    }, first: 1000, skip: ${page * 1000}) {\n      id\n      owner\n      pool {\n        id\n        liquidity\n        feesUSD\n        feeTier\n        tick\n        sqrtPrice\n        token0Price\n        token1Price\n        feeGrowthGlobal0X128\n        feeGrowthGlobal1X128\n        totalValueLockedUSD\n        token0 {\n            id\n            name\n            symbol\n            derivedETH\n            decimals\n        }\n        token1 {\n            id\n            name\n            symbol\n            derivedETH\n            decimals\n        }\n      }\n      tickLower {\n        tickIdx\n        feeGrowthOutside0X128\n        feeGrowthOutside1X128\n      }\n      tickUpper {\n        tickIdx\n        feeGrowthOutside0X128\n        feeGrowthOutside1X128\n      }\n      depositedToken0\n      depositedToken1\n      liquidity\n      collectedFeesToken0\n      collectedFeesToken1\n      feeGrowthInside0LastX128\n      feeGrowthInside1LastX128\n      transaction {\n        timestamp\n      }\n    }\n  }`\n    );\n\n    return res.positions;\n  } catch (e) {\n    return [];\n  }\n};\n\nexport const getPoolPositions = async (\n  subgraphEndpoint: string,\n  poolAddress: string\n): Promise<Position[]> => {\n  const PAGE_SIZE = 3;\n  let result: Position[] = [];\n  let page = 0;\n  while (true) {\n    const [p1, p2, p3] = await Promise.all([\n      _getPoolPositionsByPage(subgraphEndpoint, poolAddress, page),\n      _getPoolPositionsByPage(subgraphEndpoint, poolAddress, page + 1),\n      _getPoolPositionsByPage(subgraphEndpoint, poolAddress, page + 2),\n    ]);\n\n    result = [...result, ...p1, ...p2, ...p3];\n    if (p1.length === 0 || p2.length === 0 || p3.length === 0) {\n      break;\n    }\n    page += PAGE_SIZE;\n  }\n  return result;\n};\n\nconst getBulkTokens = async (\n  subgraphEndpoint: string,\n  tokenAddresses: string[]\n): Promise<ISubgraphToken[]> => {\n  const res = await _querySupgraph(\n    subgraphEndpoint,\n    `{\n    tokens(where: {id_in: [${tokenAddresses\n      .map((id) => `\"${id}\"`)\n      .join(\",\")}]}) {\n      id\n      name\n      symbol\n      volumeUSD\n      decimals\n      totalValueLockedUSD\n      tokenDayData(first: 1, orderBy: date, orderDirection: desc) {\n        priceUSD\n      }\n    }\n  }`\n  );\n\n  if (res.tokens !== null) {\n    res.tokens = res.tokens.map(_processTokenInfo);\n  }\n\n  return res.tokens;\n};\n\nexport const getPools = async (\n  subgraphEndpoint: string,\n  totalValueLockedUSD_gte: number,\n  volumeUSD_gte: number\n): Promise<{\n  pools: Pool[];\n  tokens: ISubgraphToken[];\n}> => {\n  try {\n    const res = await _querySupgraph(\n      subgraphEndpoint,\n      `{\n      pools (first: 300, orderBy: totalValueLockedUSD, orderDirection: desc, where: {liquidity_gt: 0, totalValueLockedUSD_gte: ${totalValueLockedUSD_gte}, volumeUSD_gte: ${volumeUSD_gte}}) {\n        id\n        token0 {\n          id\n        }\n        token1 {\n          id\n        }\n        feeTier\n        liquidity\n        tick\n        totalValueLockedUSD\n        poolDayData(first: 90, skip: 1, orderBy: date, orderDirection: desc) {\n          date\n          volumeUSD\n          open \n          high\n          low\n          close\n        }\n      }\n    }`\n    );\n\n    if (res === undefined || res.pools.length === 0) {\n      return { pools: [], tokens: [] };\n    }\n\n    const tokenIds = getUniqueItems(\n      res.pools.reduce(\n        (acc: string[], p: Pool) => [...acc, p.token0.id, p.token1.id],\n        []\n      )\n    );\n    const queryPage = Math.ceil(tokenIds.length / 100);\n    // batch query getBulkTokens function by page using Promise.all\n    const tokens = await Promise.all(\n      Array.from({ length: queryPage }, (_, i) => {\n        const start = i * 100;\n        const end = start + 100;\n        return getBulkTokens(subgraphEndpoint, tokenIds.slice(start, end));\n      })\n    ).then((res) => res.flat());\n    // sort token by volume\n    tokens.sort((a, b) => Number(b.volumeUSD) - Number(a.volumeUSD));\n    // map poolCount\n    const poolCountByTokenHash = res.pools.reduce((acc: any, p: Pool) => {\n      acc[p.token0.id] = (acc[p.token0.id] || 0) + 1;\n      acc[p.token1.id] = (acc[p.token1.id] || 0) + 1;\n      return acc;\n    }, {});\n    const _tokens = tokens.map((t: ISubgraphToken) => {\n      return {\n        ...t,\n        poolCount: poolCountByTokenHash[t.id],\n      };\n    });\n    // create hash of tokens id\n    const tokenHash = _tokens.reduce((acc: any, t: ISubgraphToken) => {\n      acc[t.id] = t;\n      return acc;\n    }, {});\n    // map token0 and token1 to pool\n    const pools = res.pools\n      .map((p: Pool) => {\n        return {\n          ...p,\n          token0: tokenHash[p.token0.id],\n          token1: tokenHash[p.token1.id],\n        };\n      })\n      // fix poolDayData incorrect data\n      .map((p: Pool) => {\n        const poolDayData = [];\n        for (let i = 0; i < p.poolDayData.length - 1; ++i) {\n          p.poolDayData[i].open = p.poolDayData[i + 1].close;\n          poolDayData.push(p.poolDayData[i]);\n        }\n        p.poolDayData = poolDayData;\n        return p;\n      })\n      // filter out if poolDayData < 14\n      .filter((p: Pool) => p.poolDayData.length >= 14);\n\n    return { pools, tokens };\n  } catch (e) {\n    return { pools: [], tokens: [] };\n  }\n};\n","import { PriceChart } from \"@/interfaces/calculator/coingecko.interface\";\nimport {\n  ISubgraphToken,\n  Pool,\n} from \"@/interfaces/calculator/uniswap.interface\";\nimport {\n  BasicInfo,\n  CalculatorAmmInfo,\n  Calculator_AMM,\n  ChartToken,\n  E_AMM,\n  SupportedChainId,\n} from \"@aperture/uikitv2\";\nimport { ApertureSupportedChainId } from \"@aperture_finance/uniswap-v3-automation-sdk\";\nimport { Token } from \"@uniswap/sdk-core\";\nimport { getTickFromPrice } from \"./math\";\n\nexport const DEFAULT_AMM = E_AMM.Uniswap as Calculator_AMM;\nexport const isCalculatorAMM = (amm: BasicInfo) => {\n  return !!CalculatorAmmInfo[amm.name];\n};\n\nexport const getFeeTierPercentage = (tier: string): number => {\n  if (tier === \"100\") return 0.01 / 100;\n  if (tier === \"500\") return 0.05 / 100;\n  if (tier === \"3000\") return 0.3 / 100;\n  if (tier === \"10000\") return 1 / 100;\n  return 0;\n};\n\nexport const sortTokens = (\n  token0: ISubgraphToken,\n  token1: ISubgraphToken\n): ISubgraphToken[] => {\n  if (token0.id < token1.id) {\n    return [token0, token1];\n  }\n  return [token1, token0];\n};\n\n// return unique string in string[]\nexport const getUniqueItems = (arr: string[]): string[] => {\n  return arr.filter((v, i, a) => a.indexOf(v) === i);\n};\n\nconst apiKey = \"f9ed9810e15cd166e224bf88fe4d5b61\";\n\nexport const SubgraphURLs: Record<\n  Calculator_AMM,\n  Partial<Record<SupportedChainId, string>>\n> = {\n  [E_AMM.Uniswap]: {\n    [SupportedChainId.ETHEREUM]: `https://gateway.thegraph.com/api/${apiKey}/subgraphs/id/5zvR82QoaXYFyDEKLZ9t6v9adgnptxYpKpSbxtgVENFV`,\n    [SupportedChainId.ARBITRUM]: `https://gateway.thegraph.com/api/${apiKey}/subgraphs/id/FbCGRftH4a3yZugY7TnbYgPJVEv2LvMT6oF1fxPe9aJM`, // still has some issues\n    [SupportedChainId.OPTIMISM]: `https://gateway.thegraph.com/api/${apiKey}/subgraphs/id/Cghf4LfVqPiFw6fp6Y5X5Ubc8UpmUhSfJL82zwiBFLaj`,\n    [SupportedChainId.POLYGON]: `https://gateway.thegraph.com/api/${apiKey}/subgraphs/id/3hCPRGf4z88VC5rsBKU5AA9FBBq5nF3jbKJG7VZCbhjm`,\n    [SupportedChainId.BASE]: `https://gateway.thegraph.com/api/${apiKey}/subgraphs/id/43Hwfi3dJSoGpyas9VwNoDAv55yjgGrPpNSmbQZArzMG`,\n    [SupportedChainId.BNB]: `https://gateway.thegraph.com/api/${apiKey}/subgraphs/id/G5MUbSBM7Nsrm9tH2tGQUiAF4SZDGf2qeo1xPLYjKr7K`,\n    [SupportedChainId.AVALANCHE]: `https://gateway.thegraph.com/api/${apiKey}/subgraphs/id/GVH9h9KZ9CqheUEL93qMbq7QwgoBu32QXQDPR6bev4Eo`,\n    [SupportedChainId.SCROLL]: `https://gateway.thegraph.com/api/${apiKey}/subgraphs/id/5ixVdGDt3MtSPZdzqE4TdhJuFBfQZPcmAkgTctt5eAZv`,\n  },\n  [E_AMM.PancakeSwap]: {\n    [SupportedChainId.ETHEREUM]: `https://gateway.thegraph.com/api/${apiKey}/subgraphs/id/CJYGNhb7RvnhfBDjqpRnD3oxgyhibzc7fkAMa38YV3oS`,\n    [SupportedChainId.BNB]: `https://gateway.thegraph.com/api/${apiKey}/subgraphs/id/A1fvJWQLBeUAggX2WQTMm3FKjXTekNXo77ZySun4YN2m`,\n  },\n};\n\nexport const getDefaultPoolTicks = (\n  token0: ISubgraphToken,\n  token1: ISubgraphToken,\n  selectedPool: Pool\n) => {\n  const price0 = Number.MAX_SAFE_INTEGER;\n  const price1 = 1 / Number.MAX_SAFE_INTEGER;\n  const minTick = getTickFromPrice(price0, token0.decimals, token1.decimals);\n  const maxTick = getTickFromPrice(price1, token0.decimals, token1.decimals);\n  return [\n    {\n      tickIdx: String(minTick),\n      price0: String(price0),\n      price1: String(price1),\n      liquidityNet: selectedPool.liquidity,\n    },\n    {\n      tickIdx: String(maxTick),\n      price0: String(price1),\n      price1: String(price0),\n      liquidityNet: \"-\" + selectedPool.liquidity,\n    },\n  ];\n};\n\ntype IVolumeTVL = {\n  totalValueLockedUSD_gte: number;\n  volumeUSD_gte: number;\n};\nexport const NetworkVolumeTVL: Partial<Record<SupportedChainId, IVolumeTVL>> = {\n  [SupportedChainId.ETHEREUM]: {\n    totalValueLockedUSD_gte: 1000000,\n    volumeUSD_gte: 500000,\n  },\n  [SupportedChainId.POLYGON]: {\n    totalValueLockedUSD_gte: 100000,\n    volumeUSD_gte: 50000,\n  },\n  [SupportedChainId.OPTIMISM]: {\n    totalValueLockedUSD_gte: 1000000,\n    volumeUSD_gte: 500000,\n  },\n  [SupportedChainId.ARBITRUM]: {\n    totalValueLockedUSD_gte: 0,\n    volumeUSD_gte: 0,\n  },\n  [SupportedChainId.BNB]: {\n    totalValueLockedUSD_gte: 100000,\n    volumeUSD_gte: 50000,\n  },\n};\nexport const DefaultVolumeTVL: IVolumeTVL = {\n  totalValueLockedUSD_gte: 100000,\n  volumeUSD_gte: 50000,\n};\n\nexport const getTokenFromSubgraphToken = (\n  token: ISubgraphToken,\n  networkId: ApertureSupportedChainId\n) => {\n  const _token = new Token(networkId, token.id, Number(token.decimals));\n  return _token;\n};\n\nexport const convertToChartToken = (\n  token: ISubgraphToken,\n  priceChart: PriceChart\n): ChartToken => {\n  return {\n    ticker: token.symbol,\n    decimals: Number(token.decimals),\n    price: priceChart.currentPriceUSD.toFixed(2),\n  };\n};\n","import {\n  ISubgraphToken,\n  Pool,\n  Position,\n  Tick,\n} from \"@/interfaces/calculator/uniswap.interface\";\nimport bn from \"bignumber.js\";\nimport { getFeeTierPercentage } from \"./helper\";\n\nbn.config({ EXPONENTIAL_AT: 999999, DECIMAL_PLACES: 40 });\n\nconst Q96 = new bn(2).pow(96);\nconst Q128 = new bn(2).pow(128);\nconst ZERO = new bn(0);\n\n// Ref: https://ethereum.stackexchange.com/a/144704\nexport const calculatePositionFees = (\n  pool: Pool,\n  position: Position,\n  token0: ISubgraphToken | null,\n  token1: ISubgraphToken | null\n) => {\n  const tickCurrent = Number(pool.tick);\n  const tickLower = Number(position.tickLower.tickIdx);\n  const tickUpper = Number(position.tickUpper.tickIdx);\n  const liquidity = new bn(position.liquidity);\n\n  // Check out the relevant formulas below which are from Uniswap Whitepaper Section 6.3 and 6.4\n  // 𝑓𝑟 =𝑓𝑔−𝑓𝑏(𝑖𝑙)−𝑓𝑎(𝑖𝑢)\n  // 𝑓𝑢 =𝑙·(𝑓𝑟(𝑡1)−𝑓𝑟(𝑡0))\n  // Global fee growth per liquidity '𝑓𝑔' for both token 0 and token 1\n  let feeGrowthGlobal_0 = new bn(pool.feeGrowthGlobal0X128);\n  let feeGrowthGlobal_1 = new bn(pool.feeGrowthGlobal1X128);\n\n  // Fee growth outside '𝑓𝑜' of our lower tick for both token 0 and token 1\n  let tickLowerFeeGrowthOutside_0 = new bn(\n    position.tickLower.feeGrowthOutside0X128\n  );\n  let tickLowerFeeGrowthOutside_1 = new bn(\n    position.tickLower.feeGrowthOutside1X128\n  );\n\n  // Fee growth outside '𝑓𝑜' of our upper tick for both token 0 and token 1\n  let tickUpperFeeGrowthOutside_0 = new bn(\n    position.tickUpper.feeGrowthOutside0X128\n  );\n  let tickUpperFeeGrowthOutside_1 = new bn(\n    position.tickUpper.feeGrowthOutside1X128\n  );\n\n  // These are '𝑓𝑏(𝑖𝑙)' and '𝑓𝑎(𝑖𝑢)' from the formula\n  // for both token 0 and token 1\n  let tickLowerFeeGrowthBelow_0 = ZERO;\n  let tickLowerFeeGrowthBelow_1 = ZERO;\n  let tickUpperFeeGrowthAbove_0 = ZERO;\n  let tickUpperFeeGrowthAbove_1 = ZERO;\n\n  // These are the calculations for '𝑓b(𝑖)' from the formula\n  // for both token 0 and token 1\n  if (tickCurrent >= tickLower) {\n    tickLowerFeeGrowthBelow_0 = tickLowerFeeGrowthOutside_0;\n    tickLowerFeeGrowthBelow_1 = tickLowerFeeGrowthOutside_1;\n  } else {\n    tickLowerFeeGrowthBelow_0 = feeGrowthGlobal_0.minus(\n      tickLowerFeeGrowthOutside_0\n    );\n    tickLowerFeeGrowthBelow_1 = feeGrowthGlobal_1.minus(\n      tickLowerFeeGrowthOutside_1\n    );\n  }\n\n  // These are the calculations for '𝑓𝑎(𝑖)' from the formula\n  // for both token 0 and token 1\n  if (tickCurrent < tickUpper) {\n    tickUpperFeeGrowthAbove_0 = tickUpperFeeGrowthOutside_0;\n    tickUpperFeeGrowthAbove_1 = tickUpperFeeGrowthOutside_1;\n  } else {\n    tickUpperFeeGrowthAbove_0 = feeGrowthGlobal_0.minus(\n      tickUpperFeeGrowthOutside_0\n    );\n    tickUpperFeeGrowthAbove_1 = feeGrowthGlobal_1.minus(\n      tickUpperFeeGrowthOutside_1\n    );\n  }\n\n  // Calculations for '𝑓𝑟(𝑡1)' part of the '𝑓𝑢 =𝑙·(𝑓𝑟(𝑡1)−𝑓𝑟(𝑡0))' formula\n  // for both token 0 and token 1\n  let fr_t1_0 = feeGrowthGlobal_0\n    .minus(tickLowerFeeGrowthBelow_0)\n    .minus(tickUpperFeeGrowthAbove_0);\n  let fr_t1_1 = feeGrowthGlobal_1\n    .minus(tickLowerFeeGrowthBelow_1)\n    .minus(tickUpperFeeGrowthAbove_1);\n\n  // '𝑓𝑟(𝑡0)' part of the '𝑓𝑢 =𝑙·(𝑓𝑟(𝑡1)−𝑓𝑟(𝑡0))' formula\n  // for both token 0 and token 1\n  let feeGrowthInsideLast_0 = new bn(position.feeGrowthInside0LastX128);\n  let feeGrowthInsideLast_1 = new bn(position.feeGrowthInside1LastX128);\n\n  // The final calculations for the '𝑓𝑢 =𝑙·(𝑓𝑟(𝑡1)−𝑓𝑟(𝑡0))' uncollected fees formula\n  // for both token 0 and token 1 since we now know everything that is needed to compute it\n  let uncollectedFees_0 = mulDiv(\n    liquidity,\n    fr_t1_0.minus(feeGrowthInsideLast_0),\n    Q128\n  );\n  let uncollectedFees_1 = mulDiv(\n    liquidity,\n    fr_t1_1.minus(feeGrowthInsideLast_1),\n    Q128\n  );\n\n  // Decimal adjustment to get final results\n  let uncollectedFeesAdjusted_0 = uncollectedFees_0.div(\n    expandDecimals(1, Number(token0?.decimals || 18)).toFixed(\n      Number(token0?.decimals || 18)\n    )\n  );\n  let uncollectedFeesAdjusted_1 = uncollectedFees_1.div(\n    expandDecimals(1, Number(token1?.decimals || 18)).toFixed(\n      Number(token1?.decimals || 18)\n    )\n  );\n\n  return [\n    uncollectedFeesAdjusted_0.toNumber(),\n    uncollectedFeesAdjusted_1.toNumber(),\n  ];\n};\n\nexport const getTickFromPrice = (\n  price: number,\n  token0Decimal: string | number,\n  token1Decimal: string | number\n): number => {\n  const token0 = expandDecimals(price, Number(token0Decimal));\n  const token1 = expandDecimals(1, Number(token1Decimal));\n  const sqrtPrice = encodeSqrtPriceX96(token1).div(encodeSqrtPriceX96(token0));\n\n  return Math.log(sqrtPrice.toNumber()) / Math.log(Math.sqrt(1.0001));\n};\n\nexport const getPriceFromTick = (\n  tick: number,\n  token0Decimal: string,\n  token1Decimal: string\n): number => {\n  const sqrtPrice = new bn(Math.pow(Math.sqrt(1.0001), tick)).multipliedBy(\n    new bn(2).pow(96)\n  );\n  const token0 = expandDecimals(1, Number(token0Decimal));\n  const token1 = expandDecimals(1, Number(token1Decimal));\n  const L2 = mulDiv(\n    encodeSqrtPriceX96(token0),\n    encodeSqrtPriceX96(token1),\n    Q96\n  );\n  const price = mulDiv(L2, Q96, sqrtPrice)\n    .div(new bn(2).pow(96))\n    .div(new bn(10).pow(token0Decimal))\n    .pow(2);\n\n  return price.toNumber();\n};\n\n// Calculate the position tokens deposit ratio.\nexport const getPositionTokensDepositRatio = (\n  P: number,\n  Pl: number,\n  Pu: number\n): number => {\n  const deltaL = 1000; // can be any number\n\n  let deltaY = deltaL * (Math.sqrt(P) - Math.sqrt(Pl));\n  if (P < Pl) deltaY = 0;\n  if (P >= Pu) deltaY = deltaL * (Math.sqrt(Pu) - Math.sqrt(Pl));\n\n  let deltaX = deltaL * (1 / Math.sqrt(P) - 1 / Math.sqrt(Pu));\n  if (P < Pl) deltaX = deltaL * (1 / Math.sqrt(Pl) - 1 / Math.sqrt(Pu));\n  if (P >= Pu) deltaX = 0;\n\n  return deltaY / deltaX;\n};\n\n// for calculation detail, please visit README.md (Section: Calculation Breakdown, No. 1)\ninterface TokensAmount {\n  amount0: number;\n  amount1: number;\n  liquidityDelta: number;\n}\n\nexport const getTokensAmountFromDepositAmountUSD = (\n  P: number,\n  Pl: number,\n  Pu: number,\n  priceUSDX: number,\n  priceUSDY: number,\n  depositAmountUSD: number\n): TokensAmount => {\n  let deltaL = 0;\n  let deltaY = 0;\n  let deltaX = 0;\n  const sqrtP = Math.sqrt(P);\n  const sqrtPl = Math.sqrt(Pl);\n  const sqrtPu = Math.sqrt(Pu);\n\n  // check division by 0\n  const invSqrtP = sqrtP !== 0 ? 1 / sqrtP : 0;\n  const invSqrtPu = sqrtPu !== 0 ? 1 / sqrtPu : 0;\n\n  const denominator =\n    (sqrtP - sqrtPl) * priceUSDY + (invSqrtP - invSqrtPu) * priceUSDX;\n  if (denominator !== 0 && isFinite(denominator)) {\n    deltaL = depositAmountUSD / denominator;\n  }\n\n  deltaY = deltaL * (sqrtP - sqrtPl);\n  // Validate deltaY\n  if (!isFinite(deltaY) || isNaN(deltaY) || deltaY * priceUSDY < 0) {\n    deltaY = 0;\n  } else if (deltaY * priceUSDY > depositAmountUSD) {\n    deltaY = depositAmountUSD / priceUSDY;\n  }\n\n  deltaX = deltaL * (invSqrtP - invSqrtPu);\n  // Validate deltaX\n  if (!isFinite(deltaX) || isNaN(deltaX) || deltaX * priceUSDX < 0) {\n    deltaX = 0;\n  } else if (deltaX * priceUSDX > depositAmountUSD) {\n    deltaX = depositAmountUSD / priceUSDX;\n  }\n\n  return { amount0: deltaX, amount1: deltaY, liquidityDelta: deltaL };\n};\n\n// for calculation detail, please visit README.md (Section: Calculation Breakdown, No. 2)\nconst getLiquidityForAmount0 = (\n  sqrtRatioAX96: bn,\n  sqrtRatioBX96: bn,\n  amount0: bn\n): bn => {\n  // amount0 * (sqrt(upper) * sqrt(lower)) / (sqrt(upper) - sqrt(lower))\n  const intermediate = mulDiv(sqrtRatioBX96, sqrtRatioAX96, Q96);\n  return mulDiv(amount0, intermediate, sqrtRatioBX96.minus(sqrtRatioAX96));\n};\n\nconst getLiquidityForAmount1 = (\n  sqrtRatioAX96: bn,\n  sqrtRatioBX96: bn,\n  amount1: bn\n): bn => {\n  // amount1 / (sqrt(upper) - sqrt(lower))\n  return mulDiv(amount1, Q96, sqrtRatioBX96.minus(sqrtRatioAX96));\n};\n\nexport const getSqrtPriceX96 = (\n  price: number,\n  token0Decimal: number,\n  token1Decimal: number\n): bn => {\n  const token0 = expandDecimals(price, token0Decimal);\n  const token1 = expandDecimals(1, token1Decimal);\n\n  return token0.div(token1).sqrt().multipliedBy(Q96);\n};\n\nexport const getLiquidityDelta = (\n  P: number,\n  lowerP: number,\n  upperP: number,\n  amount0: number,\n  amount1: number,\n  token0Decimal: number,\n  token1Decimal: number\n): bn => {\n  const amt0 = expandDecimals(amount0, token1Decimal);\n  const amt1 = expandDecimals(amount1, token0Decimal);\n\n  const sqrtRatioX96 = getSqrtPriceX96(P, token0Decimal, token1Decimal);\n  const sqrtRatioAX96 = getSqrtPriceX96(lowerP, token0Decimal, token1Decimal);\n  const sqrtRatioBX96 = getSqrtPriceX96(upperP, token0Decimal, token1Decimal);\n\n  let liquidity: bn;\n  if (sqrtRatioX96.lte(sqrtRatioAX96)) {\n    liquidity = getLiquidityForAmount0(sqrtRatioAX96, sqrtRatioBX96, amt0);\n  } else if (sqrtRatioX96.lt(sqrtRatioBX96)) {\n    const liquidity0 = getLiquidityForAmount0(\n      sqrtRatioX96,\n      sqrtRatioBX96,\n      amt0\n    );\n    const liquidity1 = getLiquidityForAmount1(\n      sqrtRatioAX96,\n      sqrtRatioX96,\n      amt1\n    );\n\n    liquidity = bn.min(liquidity0, liquidity1);\n  } else {\n    liquidity = getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, amt1);\n  }\n\n  return liquidity;\n};\n\nexport const estimateFee = (\n  liquidityDelta: bn,\n  liquidity: bn,\n  volume24H: number,\n  feeTier: string\n): number => {\n  const feeTierPercentage = getFeeTierPercentage(feeTier);\n  const liquidityPercentage = liquidityDelta\n    .div(liquidity.plus(liquidityDelta))\n    .toNumber();\n\n  return feeTierPercentage * volume24H * liquidityPercentage;\n};\n\nexport const getLiquidityFromTick = (poolTicks: Tick[], tick: number): bn => {\n  // calculate a cumulative of liquidityNet from all ticks that poolTicks[i] <= tick\n  let liquidity: bn = new bn(0);\n  for (let i = 0; i < poolTicks.length - 1; ++i) {\n    liquidity = liquidity.plus(new bn(poolTicks[i].liquidityNet));\n\n    const lowerTick = Number(poolTicks[i].tickIdx);\n    const upperTick = Number(poolTicks[i + 1]?.tickIdx);\n\n    if (lowerTick <= tick && tick <= upperTick) {\n      break;\n    }\n  }\n\n  return liquidity;\n};\n\n// private helper functions\nconst encodeSqrtPriceX96 = (price: number | string | bn): bn => {\n  return new bn(price).sqrt().multipliedBy(Q96).integerValue(3);\n};\n\nconst expandDecimals = (n: number | string | bn, exp: number): bn => {\n  return new bn(n).multipliedBy(new bn(10).pow(exp));\n};\n\nconst mulDiv = (a: bn, b: bn, multiplier: bn) => {\n  return a.multipliedBy(b).div(multiplier);\n};\n\nexport const averageArray = (data: number[]): number => {\n  if (data.length < 1) return 0;\n  return data.reduce((result, val) => result + val, 0) / data.length;\n};\n","import { ApertureLogos } from \"@aperture/assetkit\";\nimport {\n  CommonLgText,\n  FlexColumn,\n  Headline1,\n  Headline5,\n  T1Regular,\n} from \"@aperture/uikit\";\nimport styled from \"styled-components\";\nimport { LayoutProps, SpaceProps, compose, layout, space } from \"styled-system\";\n\nexport const Headline = styled(T1Regular)`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  font-family: \"Roboto Flex\";\n`;\n\nexport const Title = styled.div`\n  display: flex;\n  align-items: center;\n  flex-direction: row;\n`;\n\nexport const TitleText = styled(Headline1)`\n  width: 100%;\n  font-weight: 500;\n  font-family: \"Dunbar Tall\";\n  text-align: start;\n  color: ${({ theme }) => theme.colors.global.text.T1};\n`;\n\nexport const Container = styled.div`\n  box-sizing: border-box;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  gap: ${({ theme }) => theme.spacing.xl};\n`;\n\nexport const Row = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n`;\n\nexport const RowWithGap = styled.div<{ gap: string }>`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: ${({ gap }) => gap};\n`;\n\nexport const PageContainer = styled(FlexColumn)`\n  margin-top: 20px;\n  align-items: center;\n  gap: ${({ theme }) => theme.spacing[\"3xl\"]};\n  width: 100%;\n  max-width: calc(100vw * 0.75);\n  padding-bottom: 30px;\n`;\n\nexport const EmptyBox = styled.div<LayoutProps & SpaceProps>`\n  width: 100%;\n  height: 276px;\n  font-weight: 500;\n  border-radius: ${({ theme }) => theme.radii.md};\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  gap: ${({ theme }) => theme.spacing.lg};\n  border: 1px solid ${({ theme }) => theme.colors.global.line.Line1};\n  color: ${({ theme }) => theme.colors.global.text.T3};\n  > svg,\n  path {\n    fill: ${({ theme }) => theme.colors.global.text.T1};\n  }\n  ${compose(layout, space)}\n`;\n\nexport const CommonContainer = styled.div<LayoutProps & { padding?: string }>`\n  padding: ${({ padding }) => padding || \"0\"};\n  background: ${({ theme }) => theme.colors.global.background.BG2};\n  color: ${({ theme }) => theme.colors.global.text.T1};\n  border: ${({ padding }) =>\n    !padding\n      ? \"none\"\n      : `1px solid ${({ theme }) => theme.colors.global.line.Line2};`};\n  border-radius: ${({ theme }) => theme.radii.md};\n  box-sizing: border-box;\n  ${layout}\n`;\n\nexport const PositionContainer = styled(CommonContainer)`\n  width: 100%;\n`;\n\nexport const OtherInfo = styled(CommonContainer)<{ gap?: string }>`\n  display: flex;\n  flex-direction: column;\n  gap: ${({ theme, gap }) => gap ?? theme.spacing.md};\n  color: ${({ theme }) => theme.colors.global.text.T1};\n`;\n\nexport const RowTitle = styled(Headline5)`\n  color: ${({ theme }) => theme.colors.global.text.T1};\n`;\nexport const Text1 = styled(Headline5)`\n  font-size: 16px;\n  line-height: 20px;\n  font-weight: 500;\n  color: ${({ theme }) => theme.colors.global.text.T1};\n`;\nexport const Text2 = styled(Text1)`\n  font-weight: 400;\n  font-size: 14px;\n  line-height: 16px;\n`;\n\nexport const Expires = styled(FlexColumn)`\n  width: 160px;\n  align-items: flex-end;\n  justify-content: center;\n  gap: ${({ theme }) => theme.spacing.xl};\n  color: ${({ theme }) => theme.colors.global.text.T1};\n`;\n\nexport const DividerHorizontal = styled.div`\n  height: 1px;\n  width: 100%;\n  background-color: ${({ theme }) => theme.colors.global.line.Line2};\n  align-self: stretch;\n`;\n\nexport const DividerVertical = styled.div`\n  ::after {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    content: \"\";\n    width: 1px;\n    height: 100%;\n    background-color: ${({ theme }) => theme.colors.global.line.Line2};\n  }\n`;\n\nexport const TimeZone = styled(CommonLgText)`\n  text-align: right;\n  color: ${({ theme }) => theme.colors.global.text.T3};\n  margin-top: -8px;\n`;\n\nexport const IconDiv = styled.div<{ width: number; height: number }>`\n  height: ${({ height }) => height}px;\n  width: ${({ width }) => width}px;\n  flex: 1 1 0%;\n  display: flex;\n  align-items: center;\n  gap: ${({ theme }) => theme.spacing.md};\n`;\n\nexport const Loader = styled(ApertureLogos.TransparentLogo)`\n  height: 80px;\n  width: 80px;\n  animation: rotation infinite 3s linear;\n\n  @keyframes rotation {\n    from {\n      transform: rotate(0deg);\n    }\n\n    to {\n      transform: rotate(360deg);\n    }\n  }\n`;\n"],"names":["_querySupgraph","subgraphEndpoint","query","data","axios","url","method","errors","length","concat","JSON","stringify","getPoolVolumes","poolAddress","numberOfDays","poolDayDatas","getPositionBreakdown","networkId","mockPool","priceAssumptionValue","priceRangeMinValue","priceRangeMaxValue","token0CurrentPrice","token1CurrentPrice","depositAmount","token0","token1","positionBreakdown","amount0","amount1","getTokensAmountFromDepositAmountUSD","Number","deltaL","getLiquidityDelta","decimals","tokenA","SDKToken","address","tokenB","tickLower","priceToTick","BigNumber","toFixed","tickSpacing","tickUpper","mockPosition","SDKPosition","pool","liquidity","Math","min","max","pow","count","mockPrice","viem","Big","splits","push","price","token0Amount","toExact","token1Amount","error","console","log","getLogger","getAvgTradingVolume","volumes","map","d","volumeUSD","averageArray","_getPoolTicksByPage","page","res","ticks","e","warn","message","getPoolTicks","result","pool1","pool2","pool3","Promise","all","_processTokenInfo","token","getToken","tokenAddress","toLowerCase","getPoolFromPair","disabledTopPositions","sortedTokens","sortTokens","feeGrowthGlobal","pools","id","getBulkTokens","tokenAddresses","join","tokens","getPools","totalValueLockedUSD_gte","volumeUSD_gte","undefined","tokenIds","getUniqueItems","reduce","acc","p","queryPage","ceil","Array","from","_","i","start","slice","then","flat","sort","a","b","poolCountByTokenHash","_tokens","t","poolCount","tokenHash","poolDayData","open","close","filter","DEFAULT_AMM","E_AMM","isCalculatorAMM","CalculatorAmmInfo","amm","name","getFeeTierPercentage","tier","arr","v","indexOf","apiKey","SubgraphURLs","SupportedChainId","getDefaultPoolTicks","selectedPool","price0","MAX_SAFE_INTEGER","price1","minTick","getTickFromPrice","maxTick","tickIdx","String","liquidityNet","NetworkVolumeTVL","DefaultVolumeTVL","getTokenFromSubgraphToken","_token","Token","convertToChartToken","priceChart","ticker","symbol","currentPriceUSD","bn","EXPONENTIAL_AT","DECIMAL_PLACES","Q96","token0Decimal","token1Decimal","expandDecimals","sqrtPrice","encodeSqrtPriceX96","div","toNumber","sqrt","getPriceFromTick","tick","multipliedBy","L2","mulDiv","P","Pl","Pu","priceUSDX","priceUSDY","depositAmountUSD","deltaY","deltaX","sqrtP","sqrtPl","sqrtPu","invSqrtP","invSqrtPu","denominator","isFinite","isNaN","liquidityDelta","getLiquidityForAmount0","sqrtRatioAX96","sqrtRatioBX96","intermediate","minus","getLiquidityForAmount1","getSqrtPriceX96","lowerP","upperP","amt0","amt1","sqrtRatioX96","lte","lt","liquidity0","liquidity1","estimateFee","volume24H","feeTier","feeTierPercentage","liquidityPercentage","plus","getLiquidityFromTick","poolTicks","lowerTick","upperTick","integerValue","n","exp","multiplier","val","Headline","styled","T1Regular","Title","TitleText","Headline1","theme","param","colors","global","text","T1","Container","spacing","xl","Row","RowWithGap","gap","PageContainer","FlexColumn","EmptyBox","radii","md","lg","line","Line1","T3","compose","layout","space","CommonContainer","padding","background","BG2","Line2","OtherInfo","RowTitle","Headline5","Text1","Text2","Expires","DividerHorizontal","TimeZone","CommonLgText","IconDiv","height","width","Loader","ApertureLogos","withConfig"],"sourceRoot":""}