{"version":3,"sources":["../src/utils.ts","../src/constants.ts","../src/BigNumber.ts","../src/lodash.ts","../src/queries.ts","../src/farming/genesis.ts","../src/farming/faas.ts","../src/liquidity/v2/getLiquidity.ts","../src/liquidity/v3/getUserLiquidityV3.ts","../src/liquidity/v3/math/clmm.ts","../src/liquidity/v3/utils/numbers.ts","../src/liquidity/v3/utils/common.ts","../src/liquidity/v3/utils/decimal.ts","../src/liquidity/v3/errors/errors.ts","../src/liquidity/v3/types/constants.ts","../src/liquidity/v3/math/swap.ts","../src/liquidity/v3/math/utils.ts","../src/liquidity/v3/math/tick.ts","../src/liquidity/v3/getTxCollectRewardLiquidV3.ts","../src/liquidity/v3/getTxCollectLiquidV3.ts","../src/liquidity/v3/buildTxAddLiquidV3.ts","../src/swap/libs/handleGetCoinAmount.ts","../src/swap/libs/getCoinOjectIdsByAmount.ts","../src/swap/libs/getSuiCoinForTx.ts","../src/liquidity/v3/getTxIncreasePositionLiquidV3.ts","../src/liquidity/v3/getTxCreatePoolLiquidV3.ts","../src/liquidity/v3/getTxOpenPositionLiquidV3.ts","../src/liquidity/v3/getListPoolLiquidV3.ts","../src/liquidity/v3/buildTxIncreaseLiquidV3.ts","../src/liquidity/v3/buildTxRemoveLiquidV3.ts","../src/liquidity/v3/getTxDecreasePositionLiquidV3.ts","../src/liquidity/v3/getTxClosePositionLiquidV3.ts","../src/liquidity/v3/queries/getTickClmm.ts","../src/swap/libs/Graph.ts","../src/swap/libs/calculateAmountInFromPath.ts","../src/swap/libs/calculateAmountOutFromPath.ts","../src/swap/getSmartRoute.ts","../src/swap/calculateRoute.ts","../src/swap/swapExactInput.ts","../src/swap-routing/libs/EstimateGasFee.ts","../src/swap-routing/libs/GetSplitCoinForTx.ts","../src/swap-routing/libs/InitPath.ts","../src/swap-routing/libs/InitRouting.ts","../src/swap-routing/libs/NextRouting.ts","../src/swap-routing/libs/SwapFlowXHandle.ts","../src/swap-routing/libs/SwapKriyaHandle.ts","../src/swap-routing/libs/SwapCetusHandle.ts","../src/swap-routing/libs/SwapTurbosHandle.ts","../src/swap-routing/libs/SwapAftermathHandle.ts","../src/swap-routing/libs/SwapDeepBookHandle.ts","../src/swap-routing/libs/RouteTxBuild.ts","../src/swap-routing/libs/SettleRouting.ts","../src/swap-routing/libs/Txbuild.ts","../src/swap-routing/estimatePriceImpact.ts","../src/swap-routing/computeSwapExactIn.ts","../src/swap-routing/getSmartRouting.ts","../src/types.ts"],"sourcesContent":["import {\n  JsonRpcProvider,\n  PaginatedObjectsResponse,\n  SuiObjectDataFilter,\n  SuiObjectDataOptions,\n  SuiObjectResponse,\n  TransactionBlock,\n  getPureSerializationType,\n} from \"@mysten/sui.js\";\nimport {\n  FUNCTION,\n  LP_DECIMAL,\n  MAX_LIMIT_PER_RPC_CALL,\n  SUI_FULL_TYPE,\n  SUI_TYPE,\n  client,\n  provider,\n} from \"./constants\";\nimport { BIG_TEN, BigNumber, BigNumb } from \"./BigNumber\";\nimport {\n  CoinMetadata,\n  ICoinBalance,\n  IGetLpPrice,\n  IGetPools,\n  IPairsRankingItem,\n  IPoolInfo,\n  IPools,\n  PairSetting,\n  PoolInfo,\n} from \"./types\";\nimport Lodash from \"./lodash\";\nimport {\n  COIN_SETTING_QUERY,\n  GET_PAIRS,\n  GET_PAIR_RANKING_INFO,\n} from \"./queries\";\nimport { isObject } from \"lodash\";\n\nexport const nowInMilliseconds = () => {\n  return Date.now();\n};\n\nexport const wait = (ms: number) => {\n  return new Promise<void>((resolve) => {\n    setTimeout(() => {\n      resolve();\n    }, ms);\n  });\n};\n\nexport function last<T>(collections: T[]) {\n  return collections[collections.length - 1];\n}\n\nexport const fetchOwnedObjects = async (\n  owner: string,\n  objectType: string,\n  jsonRpcProvider: JsonRpcProvider\n) => {\n  let cursor = null,\n    hasNextPage = false,\n    objects = [];\n  do {\n    const res = await jsonRpcProvider.getOwnedObjects({\n      owner,\n      cursor,\n      limit: MAX_LIMIT_PER_RPC_CALL,\n      filter: {\n        StructType: objectType,\n      },\n      options: {\n        showContent: true,\n        showOwner: true,\n        showType: true,\n      },\n    });\n    hasNextPage = res.hasNextPage;\n    cursor = res.nextCursor;\n    objects.push(res.data.map((item) => item.data));\n  } while (!!hasNextPage);\n\n  return objects;\n};\n\nexport const callGraphQL = async (\n  url: string,\n  payload: {\n    query: string;\n    variables: any;\n  },\n  extractor?: (res: any) => any\n) => {\n  const res = await fetch(url, {\n    method: \"POST\",\n    body: JSON.stringify(payload),\n    headers: {\n      \"content-type\": \"application/json\",\n    },\n  })\n    .catch((error) => {\n      throw error;\n    })\n    .then((res) => res.json());\n\n  if (!!res.errors) {\n    console.error(\n      \"callGraphQL: could not execute graphQL request due to error\",\n      res.errors\n    );\n    throw new Error(res.errors[0].extensions.code);\n  }\n\n  if (!!extractor) {\n    return extractor(res.data);\n  }\n\n  return res.data;\n};\n\nexport const SuiTypeMiniNormalize = (type: string) => {\n  return type === SUI_FULL_TYPE ? SUI_TYPE : type;\n};\nexport const removeLeadingZeros = (hexString) => {\n  return hexString.replace(/^0+/, \"\");\n};\n\nexport const convertAmountDecimal = (amount: number, decimals: number) => {\n  return amount / 10 ** decimals;\n};\nexport const stripZeros = (a: string): string => {\n  let first = a[0];\n  while (a.length > 0 && first.toString() === \"0\") {\n    a = a.slice(1);\n    first = a[0];\n  }\n  return a;\n};\nexport const addZerosX = (text: string): string => {\n  return `${text.startsWith(\"0x\") ? \"\" : \"0x\"}${text}`;\n};\nexport const getLpType = (lpType: string, coinX: string, coinY: string) => {\n  if (!lpType) {\n    return \"\";\n  }\n  let lpTypeFormatted: any = lpType.split(\"Supply\")[1].slice(1, -1);\n  lpTypeFormatted = lpTypeFormatted.split(\"<\");\n  return `${lpTypeFormatted[0]}<${coinX}, ${coinY}>`;\n};\nexport const formatCoinType = (type: string): string => {\n  const COIN_TYPE_ARG_REGEX = /^0x2::coin::Coin<(.+)>$/;\n  const [, res] = type.match(COIN_TYPE_ARG_REGEX) ?? [];\n  const typeFormatted = stripZeros(res.slice(2) || \"\");\n\n  return `0x${typeFormatted}`;\n};\nexport const getDecimalAmount = (\n  amount: string | number,\n  decimals = LP_DECIMAL\n) => {\n  return BigNumb(amount).times(BIG_TEN.pow(decimals)).toFixed();\n};\n\nexport const getBalanceAmount = (\n  amount: string | number,\n  decimals = LP_DECIMAL\n) => {\n  return BigNumb(amount).div(BIG_TEN.pow(decimals));\n};\n\nexport const calculateReceiveAmount = (\n  poolInfo: IPoolInfo,\n  coinX: CoinMetadata,\n  coinY: CoinMetadata\n) => {\n  if (!poolInfo) {\n    return { amountX: 0, amountY: 0 };\n  }\n  const lpRate = 1 / getBalanceAmount(poolInfo.totalLpSupply).toNumber();\n  const amountX =\n    lpRate *\n    getBalanceAmount(\n      typeof poolInfo.reserveX === \"string\"\n        ? poolInfo.reserveX\n        : poolInfo.reserveX.fields.balance,\n      coinX.decimals\n    ).toNumber();\n  const amountY =\n    lpRate *\n    getBalanceAmount(\n      typeof poolInfo.reserveY === \"string\"\n        ? poolInfo.reserveY\n        : poolInfo.reserveY.fields.balance,\n      coinY.decimals\n    ).toNumber();\n  return { amountX, amountY };\n};\nexport const standardizeType = (type: string, fullTypeIfSui?: boolean) => {\n  const OBJECT_ID_LENGTH = 64;\n  const REGEX_MOVE_OBJECT_ID = /^(0x)?[0-9a-fA-F]{1,64}/g;\n  let originalCoinX = null;\n  originalCoinX = type?.replace(REGEX_MOVE_OBJECT_ID, (match: string) => {\n    return `0x${stripZeros(\n      match.replace(\"0x\", \"\").padStart(OBJECT_ID_LENGTH, \"0\")\n    )}`;\n  });\n  return type === SUI_FULL_TYPE && !fullTypeIfSui\n    ? SUI_TYPE\n    : originalCoinX === SUI_TYPE && fullTypeIfSui\n    ? SUI_FULL_TYPE\n    : originalCoinX;\n};\nexport const getLpPrice = ({ poolInfo, coinX, coinY }: IGetLpPrice) => {\n  const { amountX, amountY } = calculateReceiveAmount(poolInfo, coinX, coinY);\n  const amountXValueInUsd = BigNumb(amountX).multipliedBy(\n    coinX.derivedPriceInUSD\n  );\n  const amountYValueInUsd = BigNumb(amountY).multipliedBy(\n    coinY.derivedPriceInUSD\n  );\n  return amountXValueInUsd.plus(amountYValueInUsd).toFixed();\n};\nexport const sortData = (\n  inputData: any[],\n  sortType?: string,\n  order?: \"asc\" | \"desc\" | string\n) => {\n  let tempArr = [...inputData];\n  if ((order === \"asc\" || order === \"desc\") && sortType) {\n    const sortOrder = order === \"asc\" ? 1 : -1;\n    const compare = (a: any, b: any) => {\n      const valueA = +a[sortType];\n      const valueB = +b[sortType];\n      if (valueA < valueB) {\n        return -1 * sortOrder;\n      } else if (valueA > valueB) {\n        return 1 * sortOrder;\n      } else {\n        return 0;\n      }\n    };\n    tempArr.sort(compare);\n  }\n  return tempArr;\n};\nexport const getFullyOwnedObjects = async (\n  account: string,\n  options: SuiObjectDataOptions,\n  filter?: SuiObjectDataFilter\n) => {\n  let hasNextPage = false;\n  const data: any[] = [];\n  let cursor = null;\n  do {\n    const results: PaginatedObjectsResponse = await provider.getOwnedObjects({\n      owner: account,\n      options,\n      cursor,\n      filter,\n    });\n\n    cursor = results.nextCursor;\n    hasNextPage = results.hasNextPage;\n\n    data.push(...results.data);\n  } while (hasNextPage);\n\n  return data;\n};\n\nexport const extractTypeFaas = (type: string) => {\n  const pair = type.split(\"Pool<\")[1];\n  const coinXType = pair.split(\", \")[0];\n  const coinYType = pair.split(\", \")[1];\n  return { coinXType, coinYType };\n};\nexport const getPoolInfos = async (\n  lpObjectIds: string[]\n): Promise<IPoolInfo[]> => {\n  try {\n    const splitObjectIds = [];\n    //split array if array is more than 50 elements because\n    for (let i = 0; i < lpObjectIds.length; i += 49) {\n      splitObjectIds.push(lpObjectIds.slice(i, i + 49));\n    }\n    const splitPoolInfos = await Promise.all(\n      //50 ids maximum\n      splitObjectIds.map((items) =>\n        provider.multiGetObjects({ ids: items, options: { showContent: true } })\n      )\n    );\n    const poolInfos: IPoolInfo[] = [];\n    splitPoolInfos.map((_poolInfos) => {\n      _poolInfos.map((data) => {\n        const _poolInfo = (data.data.content as any).fields.value.fields;\n        const coinX = formatCoinType(_poolInfo.reserve_x.type);\n        const coinY = formatCoinType(_poolInfo.reserve_y.type);\n        poolInfos.push({\n          objectId: data.data.objectId,\n          reserveX: _poolInfo.reserve_x,\n          reserveY: _poolInfo.reserve_y,\n          totalLpSupply: _poolInfo.lp_supply.fields.value,\n          lpType: getLpType(_poolInfo.lp_supply.type, coinX, coinY),\n          coinX,\n          coinY,\n          feeRate: _poolInfo.fee_rate\n            ? parseFloat(_poolInfo.fee_rate) / 10000\n            : 0.003, //default 0.003% if not set\n        });\n      });\n    });\n    return poolInfos;\n  } catch (e) {\n    throw e;\n  }\n};\nexport const getPairs = async (): Promise<PairSetting[]> => {\n  try {\n    const res: any = await client().request(GET_PAIRS, {\n      size: 100,\n    });\n    return res.getPairs;\n  } catch (error) {\n    throw error;\n  }\n};\nexport const getPools = async (): Promise<IGetPools> => {\n  try {\n    const pairs = await getPairs();\n    const pairObjectIds = pairs?.map((item) => item.lpObjectId);\n    const poolInfo = await getPoolInfos(pairObjectIds);\n    return {\n      poolInfos: poolInfo.map((item: any, i: number) => ({\n        ...pairs[i],\n        ...item,\n      })),\n      pairs,\n    };\n  } catch (error) {\n    throw error;\n  }\n};\nexport const getCoinsFlowX = async (): Promise<CoinMetadata[]> => {\n  try {\n    let variable: any = {\n      size: 9999,\n    };\n    const res: any = await client().request(COIN_SETTING_QUERY, variable);\n    const listData: CoinMetadata[] = res.getCoinsSettings.items;\n    return listData;\n  } catch (error) {\n    throw error;\n  }\n};\nexport const getCoinsBalance = async (\n  address?: string\n): Promise<ICoinBalance[]> => {\n  if (!address) return [];\n  const balances = await provider.getAllBalances({ owner: address });\n  const balancesFormatted = balances.map((item) => {\n    return {\n      type: item.coinType,\n      balance: BigNumber(item.totalBalance).toFixed(),\n    };\n  });\n  return Lodash.sortBy(balancesFormatted, [\"type\", \"balance\"]);\n};\n\nexport const getAllCoinsWithBalance = async (\n  address: string\n): Promise<{ coins: CoinMetadata[]; coinBalances: ICoinBalance[] }> => {\n  try {\n    const [coins, coinBalances] = await Promise.all([\n      getCoinsFlowX(),\n      getCoinsBalance(address),\n    ]);\n    let filterListCoinBalance: ICoinBalance[] = [];\n    for (let i = 0; i < coinBalances.length; i++) {\n      if (coins.findIndex((item) => item.type === coinBalances[i].type) > -1) {\n        filterListCoinBalance.push(coinBalances[i]);\n      }\n    }\n    return { coins, coinBalances: filterListCoinBalance };\n  } catch (error) {\n    throw error;\n  }\n};\nexport const getBasicData = async (\n  address?: string\n): Promise<{\n  coins: CoinMetadata[];\n  coinBalances: ICoinBalance[];\n  poolInfos: any[];\n}> => {\n  const [coins, coinBalances, poolInfos] = await Promise.all([\n    getCoinsFlowX(),\n    getCoinsBalance(address),\n    (await getPools()).poolInfos,\n  ]);\n  return {\n    coins,\n    coinBalances,\n    poolInfos,\n  };\n};\nexport const initTxBlock = async (\n  packageId: string,\n  moduleName: string,\n  functionName: string,\n  params: any[],\n  types?: string[],\n  tx?: TransactionBlock\n): Promise<any> => {\n  if (!tx) {\n    tx = new TransactionBlock();\n  }\n\n  const functionDetails = await provider.getNormalizedMoveModule({\n    package: packageId,\n    module: moduleName,\n  });\n\n  const args: any =\n    params?.map((param: any, i: number) => {\n      return isObject(param)\n        ? param\n        : getPureSerializationType(\n            functionDetails.exposedFunctions[functionName][\"parameters\"][i],\n            param\n          )\n        ? tx.pure(param)\n        : tx.object(param);\n    }) ?? [];\n  tx.moveCall({\n    target: `${packageId}::${moduleName}::${functionName}`,\n    typeArguments: types ?? [],\n    arguments: args,\n  });\n\n  // tx.moveCall({\n  //   target: `$0x2::coin::zero`,\n  //   typeArguments: types ?? [],\n  //   arguments: args,\n  // });\n  return tx;\n};\nexport const getPairsRankingFlowX = async (): Promise<any> => {\n  try {\n    const res: any = await client().request(GET_PAIR_RANKING_INFO, {\n      page: 1,\n      size: 100,\n    });\n    const listData: IPairsRankingItem[] = res.getPairRankings.items;\n    return listData;\n  } catch (error) {\n    throw error;\n  }\n};\nexport const getMultipleObjectIds = async (\n  lpObjectIds: string[]\n): Promise<SuiObjectResponse[]> => {\n  const splitObjectIds = [];\n  //split array if array is more than 50 elements because\n  for (let i = 0; i < lpObjectIds.length; i += 49) {\n    splitObjectIds.push(lpObjectIds.slice(i, i + 49));\n  }\n  const splitContentInfos = await Promise.all(\n    //50 ids maximum\n    splitObjectIds.map((items) =>\n      provider.multiGetObjects({ ids: items, options: { showContent: true } })\n    )\n  );\n  return Lodash.flatten(splitContentInfos);\n};\nexport const extractPair = (type: string): string[] => {\n  const coinData = type\n    .slice(type.indexOf(\"<\") + 1, type.lastIndexOf(\">\"))\n    .split(\", \");\n  return [coinData[coinData.length - 2], coinData[coinData.length - 1]];\n};\nexport const orderByKey = (\n  array: any[],\n  key: string,\n  sortBy: \"desc\" | \"asc\"\n) => {\n  if (!array?.length) {\n    return;\n  }\n  let swapped;\n  const compareFunctionName =\n    sortBy === \"desc\" ? \"isLessThan\" : \"isGreaterThan\";\n  do {\n    swapped = false;\n    for (let i = 0; i < array.length - 1; i++) {\n      if (BigNumb(array[i][key])[compareFunctionName](array[i + 1][key])) {\n        let temp = array[i];\n        array[i] = array[i + 1];\n        array[i + 1] = temp;\n        swapped = true;\n      }\n    }\n  } while (swapped);\n  return array;\n};\nexport const estimateDealine = () => {\n  const time = \"20\";\n  const currentDate = new Date().getTime();\n  return +BigNumb(currentDate).plus(+time * 60_000);\n};\n\nexport const getAmountOut = (\n  amountIn: string | number,\n  reserveIn: string,\n  reserveOut: string,\n  fee: number\n): string => {\n  const amountWithFee = BigNumb(amountIn).multipliedBy(1 - fee);\n  const numerator = amountWithFee.multipliedBy(reserveOut);\n  const denominator = amountWithFee.plus(reserveIn);\n\n  return numerator.dividedBy(denominator).toFixed(0);\n};\n\nexport const getReserveByCoinType = (coinX: string, pairSetting: PoolInfo) => {\n  if (coinX === pairSetting.coinX) {\n    return {\n      reserveX: pairSetting.reserveX?.fields?.balance || \"0\",\n      reserveY: pairSetting.reserveY?.fields?.balance || \"0\",\n    };\n  }\n\n  return {\n    reserveX: pairSetting.reserveY?.fields?.balance || \"0\",\n    reserveY: pairSetting.reserveX?.fields?.balance || \"0\",\n  };\n};\nexport const getFullyMultiObject = async (objectIds: string[]) => {\n  try {\n    let finalArr = [];\n    for (let i = 0; i < objectIds.length; i += 50) {\n      const data = objectIds.slice(i, i + 50);\n      const res = await provider.multiGetObjects({\n        ids: data,\n        options: { showContent: true },\n      });\n      finalArr.push(...res);\n    }\n    return finalArr;\n  } catch (error) {\n    console.log(\"getFullyMultiObject error\", error);\n  }\n};\nexport const getFullyDynamicFields = async (id: string) => {\n  let hasNextPage = false,\n    dynamicFieldObjects = [],\n    cursor: string = null;\n  do {\n    const res = await provider.getDynamicFields({\n      parentId: id,\n      cursor,\n      limit: 50,\n    });\n    hasNextPage = res.hasNextPage;\n    cursor = res.nextCursor;\n    dynamicFieldObjects.push(...res.data.map((item) => item));\n  } while (!!hasNextPage);\n  return dynamicFieldObjects;\n};\nexport const createZeroCoin = (tx: TransactionBlock, coinType: string) => {\n  const [zeroCoin] = tx.moveCall({\n    target: `0x2::coin::zero`,\n    typeArguments: [coinType],\n  });\n  return zeroCoin;\n};\n","import { Connection, JsonRpcProvider } from \"@mysten/sui.js\";\nimport { GraphQLClient } from \"graphql-request\";\nimport { BigNumber } from \"./BigNumber\";\nimport { TCachingRequest } from \"./types\";\n\n// //MAINNET\nexport const client = (cache?: TCachingRequest) => {\n  let config: any;\n  if (cache) config.cache = cache;\n  return new GraphQLClient(\n    \"https://api.flowx.finance/flowx-be/graphql\",\n    config\n  );\n};\n\nexport const provider = new JsonRpcProvider(\n  new Connection({ fullnode: \"https://fullnode.mainnet.sui.io/\" })\n);\n\nexport const MAX_ROUTE_HOPS = 4;\nexport const MAX_LIMIT_PER_RPC_CALL = 50;\nexport const LP_DECIMAL = 9;\nexport const FLX_DECIMAL = 9;\nexport const XFLX_DECIMAL = 8;\nexport const DEFAULT_GAS_BUDGET = 10000;\nexport const SUI_TYPE = \"0x2::sui::SUI\";\nexport const SUI_FULL_TYPE =\n  \"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI\";\nexport const ZERO_BN = BigNumber(0);\n\nexport const GENESIS_FARM_OBJECT =\n  \"0x6be2e5847e91ca2f18de8cbd711367b87440e6a5ca99c63b1ea1d29d743c8212\";\nexport const GENESIS_FARM_INFO =\n  \"0x8af239ad8ef0b3c891e19d5287a3756c92d4a25387b9473a2c327288215f4a74\";\nexport const GENESIS_FARM_INFO_DYNAMIC_FIELD_ID =\n  \"0x35357269a1b001566d40eecb5fe91c36a1f64f4fc6db3ea433c77e140a2f782b\";\nexport const FAAS_PACKAGE_OBJECT =\n  \"0x2c90dc0ebeb90628a2a9915cdd809f6509d1b8a1bde69a25cfb783802c1101f4\";\nexport const FAAS_STATE_OBJECT =\n  \"0x52bfc49b2d8c4a6ae8c865cabb5bbc61755810dd64f204eefaa34e28ab49a5db\";\nexport const FAAS_POOL_REGISTRY_DYNAMIC_FIELD =\n  \"0xe0dadc802ce2687550f13092e9aad64896eb2aef13a604e805b7adaef8c221ab\";\nexport const FAAS_POSITION_REGISTRY_DYNAMIC_FIELD =\n  \"0xcdb29f87956280dfc87ad14e10755ac6a3654dbd0615a1c71272cbb301b28b59\";\nexport const DYNAMIC_FAAS_POS_TYPE = `${FAAS_PACKAGE_OBJECT}::position_registry::Key`;\nexport const POSITION_G_FARM_TYPE = `${GENESIS_FARM_OBJECT}::position::Position`;\nexport const CLOCK_ID =\n  \"0x0000000000000000000000000000000000000000000000000000000000000006\";\nexport const FLX_TYPE = `0x52eb7d9251fc7567f0f2bbd831a9efc76fb6e2edeb613094f0c7a0f3d922169f::flx::FLX`;\n\nexport const FAAS_PACKAGE_OBJECT_V2 =\n  \"0x943535499ac300765aa930072470e0b515cfd7eebcaa5c43762665eaad9cc6f2\";\nexport const FAAS_STATE_OBJECT_V2 =\n  \"0xe94c179dc1644206b5e05c75674b13118be74d4540baa80599a0cbbaad4fc39c\";\nexport const FAAS_POOL_REGISTRY_DYNAMIC_FIELD_V2 =\n  \"0x5c38d069b2f208b0894078465a31b5beb425104894f3237195c90666a82753a2\";\nexport const FAAS_FARM_TYPE_V2 = `${FAAS_PACKAGE_OBJECT_V2}::position::Position`;\nexport const CONTAINER_OBJECT_ID =\n  \"0xb65dcbf63fd3ad5d0ebfbf334780dc9f785eff38a4459e37ab08fa79576ee511\";\nexport const PACKAGE_OBJECT_ID =\n  \"0xba153169476e8c3114962261d1edc70de5ad9781b83cc617ecc8c1923191cae0\";\nexport const SWAP_V3 = {\n  UNIVERSAL_ROUTER:\n    \"0x91f3c8ae615e01f7fe2d548357f714eb2b4f6770138d12c5fd5a95a6833359fd\",\n  UNIVERSAL_TREASURY:\n    \"0xcc88e1a4c3dd2c847e0a69e651f8ca7a38c8dc93e06106b50d29a4f783e15b77\",\n};\nexport const ADD_LIQUIDITY_V3 = {\n  POOL_REGISTRY_OBJ:\n    \"0x27565d24a4cd51127ac90e4074a841bbe356cca7bf5759ddc14a975be1632abc\",\n  CLMM_PACKAGE:\n    \"0x25929e7f29e0a30eb4e692952ba1b5b65a3a4d65ab5f2a32e1ba3edcb587f26d\",\n  POSITION_REGISTRY_OBJ:\n    \"0x7dffe3229d675645564273aa68c67406b6a80aa29e245ac78283acd7ed5e4912\",\n  VERSIONED_OBJ:\n    \"0x67624a1533b5aff5d0dfcf5e598684350efd38134d2d245f475524c03a64e656\",\n};\nexport const FUNCTION = {\n  ADD_LIQUIDITY: \"add_liquidity\",\n  ZAP_IN: \"zap_in\",\n  REMOVE_LIQUIDITY: \"remove_liquidity\",\n  REMOVE_LIQUIDITY_DIRECT: \"remove_liquidity_direct\",\n  ZAP_OUT_TO_X: \"zap_out_to_x\",\n  ZAP_OUT_TO_Y: \"zap_out_to_y\",\n  SWAP_EXACT_OUTPUT: \"swap_exact_output\",\n  SWAP_EXACT_INPUT: \"swap_exact_input\",\n  SWAP_EXACT_INPUT_DOUBLEHOP: \"swap_exact_input_doublehop\",\n  SWAP_EXACT_OUTPUT_DOUBLEHOP: \"swap_exact_output_doublehop\",\n  SWAP_EXACT_INPUT_TRIPLEHOP: \"swap_exact_input_triplehop\",\n  SWAP_EXACT_OUTPUT_TRIPLEHOP: \"swap_exact_output_triplehop\",\n  SWAP_EXACT_INPUT_DOUBLE_OUTPUT: \"swap_exact_input_double_output\",\n  SWAP_EXACT_INPUT_TRIPLE_OUTPUT: \"swap_exact_input_triple_output\",\n  SWAP_EXACT_INPUT_QUADRUPLE_OUTPUT: \"swap_exact_input_quadruple_output\",\n  SWAP_EXACT_INPUT_QUINTUPLE_OUTPUT: \"swap_exact_input_quintuple_output\",\n  SWAP_EXACT_DOUBLE_INPUT: \"swap_exact_double_input\",\n  SWAP_EXACT_TRIPLE_INPUT: \"swap_exact_triple_input\",\n  SWAP_EXACT_QUADRUPLE_INPUT: \"swap_exact_quadruple_input\",\n  SWAP_EXACT_QUINTUPLE_INPUT: \"swap_exact_quintuple_input\",\n  MINT_XFLX: \"mint_and_transfer\",\n  LAZY_BURN_XFLX: \"lazy_burn\",\n  BURN_XFLX: \"burn\",\n  CANCEL_LAZY_BURN_XFLX: \"cancel_lazy_burn\",\n  BOOST_POSITION: \"boost_position\",\n  DECREASE_POSITION: \"decrease_position\",\n  DECREASE_POSITION_EMERGENCY_FAAS: \"decrease_position_emergency\",\n  HARVEST_POSITION: \"harvest_position\",\n  INCREASE_POSITION: \"increase_position\",\n  LOCK_POSITION: \"lock_position\",\n  OPEN_POSITION: \"open_position\",\n  UNBOOST_POSITION: \"unboost_position\",\n  OPEN_BOOST_POSITION: \"open_and_boost_position\",\n  CAMPAIGN_DEPOSIT: \"deposit\",\n  CREATE_POOL: \"create_pool\",\n  FETCH_PENDING_REWARD: \"fetch_pending_reward\",\n  UPDATE_END_TIME: \"update_end_time\",\n  MINT: \"mint\",\n  PRE_SALE_DEPOSIT: \"pre_sale_deposit\",\n  PUBLIC_SALE_DEPOSIT: \"public_sale_deposit\",\n  PUBLIC_SALE_WITHDRAW: \"public_sale_withdraw\",\n  CLAIM_PRE_SALE: \"claim_pre_sale\",\n  CLAIM_PUBLIC_SALE: \"claim_public_sale\",\n  HARVEST: \"harvest\",\n  CLAIM_FUND_PRE_SALE: \"claim_fund_pre_sale\",\n  CLAIM: \"claim\",\n  REFUND: \"refund\",\n  RELEASE: \"release\",\n  COMMIT: \"commit\",\n  BORROW_MUT_PAIR_AND_TREASURY: \"borrow_mut_pair_and_treasury\",\n  BURN: \"burn\",\n  STAKE: \"stake\",\n  UN_STAKE: \"unstake\",\n  CREATE_INITIAL_POOL: \"create_and_initialize_pool\",\n  INCREASE_LIQUIDITY: \"increase_liquidity\",\n  DECREASE_LIQUIDITY: \"decrease_liquidity\",\n  COLLECT: \"collect\",\n  COLLECT_POOL_REWARD: \"collect_pool_reward\",\n  CLOSE_POSITION: \"close_position\",\n  INIT_PATH: \"initialize_path\",\n  INIT_ROUTING: \"initialize_routing\",\n  NEXT_ROUTING_V3: \"next\",\n  SETTLE_ROUTING_V3: \"settle\",\n  FLOWX_SWAP: \"flowx_swap_exact_input\",\n  FLOWX_SWAP_CLMM: \"flowx_clmm_swap_exact_input\",\n  CHECK_DEALINE: \"check_deadline\",\n  CHECK_AMOUNT_THRESHOLD: \"check_amount_threshold\",\n};\nexport const MODULE = {\n  ROUTER: \"router\",\n  ROUTER_V2: \"router_v2\",\n  ZAPPER: \"zapper\",\n  FLX: \"flx\",\n  XFLX: \"xflx\",\n  FARM: \"farms\",\n  CAMPAGIN: \"flowx_campaign\",\n  OPERATOR: \"operator\",\n  FETCHER: \"fetcher\",\n  COLLECTIBLE: \"collectible\",\n  LAUNCHPAD: \"launchpad\",\n  EXT_LAUNCHPAD: \"external_launchpad\",\n  TOKEN_VESTING: \"token_vesting\",\n  DISTRIBUTOR: \"distributor\",\n  FACTORY: \"factory\",\n  PAIR: \"pair\",\n  STAKING: \"staking\",\n  POSITION_MANAGER: \"position_manager\",\n  POOL_MANAGER: \"pool_manager\",\n  SWAP_ROUTER: \"swap_router\",\n  UNIVERSAL_ROUTER: \"universal_router\",\n};\nexport const POSITION_LIQUID_V3_TYPE = `${ADD_LIQUIDITY_V3.CLMM_PACKAGE}::position::Position`;\n/**\n * The maximum tick index supported by the clmmpool program.\n * @category Constants\n */\nexport const MAX_TICK_INDEX = 443636;\n/**\n * The minimum tick index supported by the clmmpool program.\n * @category Constants\n */\nexport const MIN_TICK_INDEX = -443636;\n/**\n * The maximum sqrt-price supported by the clmmpool program.\n * @category Constants\n */\nexport const MAX_SQRT_PRICE = \"79226673515401279992447579055\";\n/**\n * The number of initialized ticks that a tick-array account can hold.\n * @category Constants\n */\nexport const TICK_ARRAY_SIZE = 64;\n/**\n * The minimum sqrt-price supported by the clmmpool program.\n * @category Constants\n */\nexport const MIN_SQRT_PRICE = \"4295048016\";\n/**\n * The denominator which the fee rate is divided on.\n * @category Constants\n */\nexport const FEE_RATE_DENOMINATOR = BigNumber(1_000_000);\nexport const MAXU64 = \"18446744073709551615\";\n\n// TESTNET;\n// import BigNumber from \"bignumber.js\";\n// import { Connection, JsonRpcProvider } from \"@mysten/sui.js\";\n// import { GraphQLClient } from \"graphql-request\";\n\n// export const client = new GraphQLClient(\n//   \"https://flowx-dev.flowx.finance/flowx-be/graphql\"\n// );\n\n// export const provider = new JsonRpcProvider(\n//   new Connection({ fullnode: \"https://fullnode.testnet.sui.io:443\" })\n// );\n\n// export const MAX_ROUTE_HOPS = 4;\n// export const MAX_LIMIT_PER_RPC_CALL = 50;\n// export const LP_DECIMAL = 9;\n// export const FLX_DECIMAL = 8;\n// export const XFLX_DECIMAL = 8;\n// export const DEFAULT_GAS_BUDGET = 10000;\n// export const SUI_TYPE = \"0x2::sui::SUI\";\n// export const SUI_FULL_TYPE =\n//   \"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI\";\n// export const ZERO_BN = new BigNumber(0);\n\n// export const GENESIS_FARM_INFO =\n//   \"0x035e105129ab5b2630205c0c7b379344ce397a9e2503e164c8f0203c396840aa\";\n// export const GENESIS_FARM_INFO_DYNAMIC_FIELD_ID =\n//   \"0xe8d71093fdc05e71953b785f0f4dc73d9d8e21ebbc55cca342e963fefcc5668b\";\n// export const FAAS_PACKAGE_OBJECT =\n//   \"0x368d0aff8f837a623b0c8627368adbb300e852298946eb41f0a54bf0ad8fac2e\";\n// export const FAAS_STATE_OBJECT =\n//   \"0xdddeb06c0b6f077991da1359f6249f092573b06af44463922247ca93d9a499a9\";\n// export const FAAS_POOL_REGISTRY_DYNAMIC_FIELD =\n//   \"0xaa3f27fc7257fc130676b820572f6b9bf2253c01897f9ce87bc937ba9e70f329\";\n// export const FAAS_POSITION_REGISTRY_DYNAMIC_FIELD =\n//   \"0x9a7c8bfe99950846e863400cd88ad0d2f017f40a412dc75f39f94c702f284980\";\n// export const DYNAMIC_FAAS_POS_TYPE = `${FAAS_PACKAGE_OBJECT}::position_registry::Key`;\n// export const POSITION_G_FARM_TYPE = `0x71d7e29a0fb2b8b2dd1998b5cad766002477a4a66c39e60ec2a9df508cb1e24b::position::Position`;\n// export const CLOCK_ID =\n//   \"0x0000000000000000000000000000000000000000000000000000000000000006\";\n// export const FLX_TYPE = `0x52eb7d9251fc7567f0f2bbd831a9efc76fb6e2edeb613094f0c7a0f3d922169f::flx::FLX`;\n\n// export const FAAS_PACKAGE_OBJECT_V2 =\n//   \"0xd219d9d3345eb2ec779e8c6faed9259f75e2aa879ea52da670366072fa5a46a7\";\n// export const FAAS_STATE_OBJECT_V2 =\n//   \"0xfdc78b91296494f64fee04031e0615e496b1f92b9e7e68b328d159836eb8b1fb\";\n// export const FAAS_POOL_REGISTRY_DYNAMIC_FIELD_V2 =\n//   \"0x189462a405393ed2ae6499647ba206590b3bf7ea152381812c2bd33e232a3451\";\n// export const FAAS_FARM_TYPE_V2 = `${FAAS_PACKAGE_OBJECT_V2}::position::Position`;\n// export const CONTAINER_OBJECT_ID =\n//   \"0xcbca62dbd54d3a8545f27a298872b1af9363a82a04a329504b1f0fef0a5f9ce4\";\n// export const PACKAGE_OBJECT_ID =\n//   \"0xebebb67fc6fc6a74be5e57d90563c709631b4da86091c0926db81894add36ed3\";\n// export const UNIVERSAL_ROUTER =\n//   \"0xe1d359446beafcde25b78d98464775d7d40a2b6bdbcd66d9efa988e7ef364d21\";\n// export const SWAP_V3 = {\n//   UNIVERSAL_ROUTER:\n//     \"0x4005b8c05bf514bf18a6c9109d2629d419c0cd21ae08237d9df08090336b1d80\", // TODO: still testnet cofnig, remove todo when replace with mainnet config\n//   UNIVERSAL_TREASURY:\n//     \"0x0d41cf814ab9776c4948b4eb9e919eae352121038fab2993588bcfb5308a6d24\", // TODO: still testnet cofnig, remove todo when replace with mainnet config\n// };\n// export const ADD_LIQUIDITY_V3 = {\n//   POOL_REGISTRY_OBJ:\n//     \"0x1f5e3658f83800e5aa61c282fbd730fef3b0d56f1ba1ecbba85aa39187619dd0\", // TODO: still testnet cofnig, remove todo when replace with mainnet config\n//   CLMM_PACKAGE:\n//     \"0x0b7372b4c676fac88886b908469d4670785cfaf3faa66d29f716a741862fd65a\", // TODO: still testnet cofnig, remove todo when replace with mainnet config\n//   POSITION_REGISTRY_OBJ:\n//     \"0xa43f73524fdc19ef06eac9d1ca9a1b355c2a34dc66f74d418bab50753dc4f385\", // TODO: still testnet cofnig, remove todo when replace with mainnet config\n//   VERSIONED_OBJ:\n//     \"0x95a78371508658977045b03afa7fa6dd2ba0f474fb434c11339bc8a61d6e52cf\", // TODO: still testnet cofnig, remove todo when replace with mainnet config\n// };\n\n// export const FUNCTION = {\n//   SWAP_EXACT_OUTPUT: \"swap_exact_output\",\n//   SWAP_EXACT_INPUT: \"swap_exact_input\",\n//   SWAP_EXACT_INPUT_DOUBLEHOP: \"swap_exact_input_doublehop\",\n//   SWAP_EXACT_OUTPUT_DOUBLEHOP: \"swap_exact_output_doublehop\",\n//   SWAP_EXACT_INPUT_TRIPLEHOP: \"swap_exact_input_triplehop\",\n//   SWAP_EXACT_OUTPUT_TRIPLEHOP: \"swap_exact_output_triplehop\",\n//   SWAP_EXACT_INPUT_DOUBLE_OUTPUT: \"swap_exact_input_double_output\",\n//   SWAP_EXACT_INPUT_TRIPLE_OUTPUT: \"swap_exact_input_triple_output\",\n//   SWAP_EXACT_INPUT_QUADRUPLE_OUTPUT: \"swap_exact_input_quadruple_output\",\n//   SWAP_EXACT_INPUT_QUINTUPLE_OUTPUT: \"swap_exact_input_quintuple_output\",\n//   SWAP_EXACT_DOUBLE_INPUT: \"swap_exact_double_input\",\n//   SWAP_EXACT_TRIPLE_INPUT: \"swap_exact_triple_input\",\n//   SWAP_EXACT_QUADRUPLE_INPUT: \"swap_exact_quadruple_input\",\n//   SWAP_EXACT_QUINTUPLE_INPUT: \"swap_exact_quintuple_input\",\n//   SETTLE_ROUTING_V3: \"settle\",\n//   INIT_PATH: \"initialize_path\",\n//   INIT_ROUTING: \"initialize_routing\",\n//   NEXT_ROUTING_V3: \"next\",\n//   FLOWX_SWAP: \"flowx_swap_exact_input\",\n//   FLOWX_SWAP_CLMM: \"flowx_clmm_swap_exact_input\",\n// };\n// export const MODULE = {\n//   UNIVERSAL_ROUTER: \"universal_router\",\n// };\n// /**\n//  * The maximum tick index supported by the clmmpool program.\n//  * @category Constants\n//  */\n// export const MAX_TICK_INDEX = 443636;\n// /**\n//  * The minimum tick index supported by the clmmpool program.\n//  * @category Constants\n//  */\n// export const MIN_TICK_INDEX = -443636;\n// /**\n//  * The maximum sqrt-price supported by the clmmpool program.\n//  * @category Constants\n//  */\n// export const MAX_SQRT_PRICE = \"79226673515401279992447579055\";\n// /**\n//  * The number of initialized ticks that a tick-array account can hold.\n//  * @category Constants\n//  */\n// export const TICK_ARRAY_SIZE = 64;\n// /**\n//  * The minimum sqrt-price supported by the clmmpool program.\n//  * @category Constants\n//  */\n// export const MIN_SQRT_PRICE = \"4295048016\";\n// /**\n//  * The denominator which the fee rate is divided on.\n//  * @category Constants\n//  */\n// export const FEE_RATE_DENOMINATOR = BigNumber(1_000_000);\n","import { BigNumber as BNumber } from \"bignumber.js\";\nBNumber.config({\n  DECIMAL_PLACES: 1000,\n  EXPONENTIAL_AT: [-1000, 1000],\n  ROUNDING_MODE: 3,\n});\nexport const BigNumber = BNumber;\nexport const BigNumb = (value: string | number): BNumber =>\n  new BigNumber(value);\nexport const BIG_ZERO = BigNumb(0);\nexport const BIG_ONE = BigNumb(1);\nexport const BIG_NINE = BigNumb(9);\nexport const BIG_TEN = BigNumb(10);\n","import _ from \"lodash\";\nconst Lodash = _;\nexport default Lodash;\n","import { gql } from \"graphql-request\";\n\nexport const GET_PAIRS = gql`\n  query GetPairs($lpTypes: [String!], $createdBy: String) {\n    getPairs(lpTypes: $lpTypes, createdBy: $createdBy) {\n      coinXType\n      coinYType\n      explorerUrl\n      lpName\n      lpObjectId\n      lpType\n      reserveX\n      reserveY\n      createdAtTimestamp\n      createdBy\n      stats {\n        aprPerformance7D\n        fee24H\n        totalLiquidity\n        totalLiquidityInUSD\n        transaction24H\n        volume7D\n        volume24H\n      }\n    }\n  }\n`;\n\nexport const COIN_SETTING_QUERY = gql`\n  query GetCoinsSettings(\n    $size: Int\n    $page: Int\n    $sortBy: String\n    $sortDirection: SortDirection\n    $coinTypes: [String!]\n  ) {\n    getCoinsSettings(\n      size: $size\n      page: $page\n      sortBy: $sortBy\n      sortDirection: $sortDirection\n      coinTypes: $coinTypes\n    ) {\n      items {\n        type\n        symbol\n        iconUrl\n        description\n        decimals\n        derivedSUI\n        derivedPriceInUSD\n        name\n        isVerified\n      }\n      page\n      size\n      total\n    }\n  }\n`;\n\nexport const GET_POSITION_APR_PDRW = gql`\n  query MultiGetPositionsStats($farmObjectId: String!, $objectIds: [String!]!) {\n    multiGetPositionsStats(farmObjectId: $farmObjectId, objectIds: $objectIds) {\n      apr\n      pendingReward\n    }\n  }\n`;\n\nexport const GET_PAIR_RANKING_INFO = gql`\n  query GetPairRankings(\n    $size: Int\n    $page: Int\n    $sortBy: String\n    $sortDirection: SortDirection\n    $coin: String\n  ) {\n    getPairRankings(\n      size: $size\n      page: $page\n      sortBy: $sortBy\n      sortDirection: $sortDirection\n      coin: $coin\n    ) {\n      items {\n        reserveX\n        reserveY\n        stats {\n          volume7D\n          volume24H\n          transaction24H\n          totalLiquidityInUSD\n          totalLiquidity\n          fee24H\n          aprPerformance7D\n        }\n        lpType\n        lpObjectId\n        lpName\n        explorerUrl\n        createdBy\n        createdAtTimestamp\n        coinY\n        coinX\n      }\n      page\n      size\n      total\n    }\n  }\n`;\nexport const getSplitSmartRouteQuery = gql`\n  query GetSplitSmartRoute(\n    $coinTypeIn: String!\n    $coinTypeOut: String!\n    $amountIn: String!\n  ) {\n    getSplitSmartRoute(\n      coinTypeIn: $coinTypeIn\n      coinTypeOut: $coinTypeOut\n      amountIn: $amountIn\n    ) {\n      path {\n        routes {\n          coinY {\n            coinType\n          }\n          coinX {\n            coinType\n          }\n          pairId\n          protocol\n          fee\n          pairType\n        }\n        amountIn\n        amountOut\n        coinTypeOut\n        coinTypeIn\n      }\n      rate\n    }\n  }\n`;\n","import {\n  FLX_DECIMAL,\n  GENESIS_FARM_INFO,\n  GENESIS_FARM_INFO_DYNAMIC_FIELD_ID,\n  POSITION_G_FARM_TYPE,\n  client,\n  provider,\n} from \"../constants\";\nimport { GET_POSITION_APR_PDRW } from \"../queries\";\nimport {\n  CoinMetadata,\n  IAprPdrwposition,\n  IGenesisPoolsData,\n  IGenesisUserJoin,\n} from \"../types\";\nimport {\n  SuiTypeMiniNormalize,\n  addZerosX,\n  getBalanceAmount,\n  getCoinsFlowX,\n  getFullyOwnedObjects,\n} from \"../utils\";\n\nexport const getAprPdrwPosition = async (\n  farmObjectId: string,\n  posArr: string[]\n): Promise<IAprPdrwposition[]> => {\n  try {\n    const res: any = await client().request(GET_POSITION_APR_PDRW, {\n      farmObjectId,\n      objectIds: posArr,\n    });\n    return res.multiGetPositionsStats;\n  } catch (error) {\n    throw error;\n  }\n};\n\nexport const getGenesisFarm = async (\n  account?: string\n): Promise<IGenesisPoolsData[]> => {\n  try {\n    let joinedPool: IGenesisUserJoin[] = [],\n      dataArr: IGenesisPoolsData[] = [];\n    const coins: CoinMetadata[] = await getCoinsFlowX();\n    if (account) {\n      const userOwnedPosition = await getFullyOwnedObjects(\n        account,\n        { showContent: true },\n        {\n          MatchAll: [\n            {\n              StructType: POSITION_G_FARM_TYPE,\n            },\n            {\n              AddressOwner: account,\n            },\n          ],\n        }\n      );\n      // Get list all position user owned;\n      for (let i = 0; i < userOwnedPosition.length; i++) {\n        const { type, fields } = (userOwnedPosition[i] as any).data.content;\n        joinedPool.push({\n          type: type,\n          lp_locked_amount: fields.lp_locked_amount,\n          xflx_locked_amount: fields.xflx_locked_amount,\n          id: fields.id[\"id\"],\n          pool_id: fields.pool_id,\n          pool_idx: fields.pool_idx,\n          acc_pending_rewards: fields.acc_pending_rewards,\n        });\n      }\n    }\n    const _poolData = await provider.getDynamicFields({\n      parentId: GENESIS_FARM_INFO_DYNAMIC_FIELD_ID,\n      limit: 1000,\n    });\n    const arrpPoolId = _poolData?.data.map((item: any) => item.objectId);\n    const listPool = await provider.multiGetObjects({\n      ids: arrpPoolId,\n      options: { showContent: true },\n    });\n    for (let i = 0; i < listPool.length; i++) {\n      let totalLpDeposit = 0,\n        totalXFlxDeposit = 0,\n        totalPendingReward = 0;\n      const lpName = (listPool[i].data.content as any)?.fields.value.fields\n        .lp_name;\n      const poolTokens = lpName.split(\"-\");\n      const coinXType = addZerosX(poolTokens[1]);\n      const coinYType = addZerosX(poolTokens[2]);\n      const coinX = coins.find(\n        (item: CoinMetadata) => item.type === SuiTypeMiniNormalize(coinXType)\n      );\n      const coinY = coins.find(\n        (item: CoinMetadata) => item.type === SuiTypeMiniNormalize(coinYType)\n      );\n\n      let checked: IGenesisUserJoin[] = [];\n      for (let j = 0; j < joinedPool.length; j++) {\n        if (\n          joinedPool[j].pool_id ===\n          (listPool[i].data.content as any).fields.value.fields.id[\"id\"]\n        ) {\n          checked.push(joinedPool[j]);\n        }\n      }\n      if (account) {\n        if (checked.length > 0) {\n          const arrPosObjectId = checked.map(\n            (item: IGenesisUserJoin) => item.id\n          );\n          checked.forEach((item: IGenesisUserJoin) => {\n            totalLpDeposit += +item.lp_locked_amount;\n            totalXFlxDeposit += +item.xflx_locked_amount;\n            totalPendingReward += +(+item.acc_pending_rewards > 1e-9\n              ? +getBalanceAmount(item.acc_pending_rewards, FLX_DECIMAL)\n              : 0);\n          });\n          const dataAprPdrw = await getAprPdrwPosition(\n            GENESIS_FARM_INFO,\n            arrPosObjectId\n          );\n          for (let n = 0; n < dataAprPdrw.length; n++) {\n            totalPendingReward += +dataAprPdrw[n].pendingReward;\n          }\n          dataArr.push({\n            totalLpDeposit: totalLpDeposit + \"\",\n            totalXFlxDeposit: totalXFlxDeposit + \"\",\n            totalPendingReward: totalPendingReward + \"\",\n            coinX,\n            coinY,\n          });\n        }\n      } else {\n        dataArr.push({\n          totalLpDeposit: \"0\",\n          totalXFlxDeposit: \"0\",\n          totalPendingReward: \"0\",\n          coinX,\n          coinY,\n        });\n      }\n    }\n    return dataArr;\n  } catch (error) {\n    throw error;\n  }\n};\n","import { BigNumb } from \"../BigNumber\";\nimport {\n  CLOCK_ID,\n  DYNAMIC_FAAS_POS_TYPE,\n  FAAS_FARM_TYPE_V2,\n  FAAS_PACKAGE_OBJECT,\n  FAAS_PACKAGE_OBJECT_V2,\n  FAAS_POOL_REGISTRY_DYNAMIC_FIELD,\n  FAAS_POOL_REGISTRY_DYNAMIC_FIELD_V2,\n  FAAS_POSITION_REGISTRY_DYNAMIC_FIELD,\n  FAAS_STATE_OBJECT,\n  FAAS_STATE_OBJECT_V2,\n  FLX_DECIMAL,\n  FLX_TYPE,\n  LP_DECIMAL,\n  SUI_TYPE,\n  provider,\n} from \"../constants\";\nimport {\n  CoinMetadata,\n  IFaasData,\n  IFaasUserRw,\n  IFaasV2,\n  IPairsRankingItem,\n} from \"../types\";\nimport {\n  getBalanceAmount,\n  getCoinsFlowX,\n  getPairsRankingFlowX,\n  initTxBlock,\n  getPoolInfos,\n  standardizeType,\n  getLpPrice,\n  extractTypeFaas,\n  getFullyOwnedObjects,\n} from \"../utils\";\n\nconst extractType = (type: string) => {\n  const pair = type.split(\"Pool<\")[1];\n  const coinXType = pair.split(\", \")[0];\n  const coinYType = pair.split(\", \")[1];\n  return { coinXType, coinYType };\n};\n\nexport const getFaas = async (account?: string): Promise<IFaasData[]> => {\n  try {\n    const coins: CoinMetadata[] = await getCoinsFlowX();\n    const poolList = await provider.getDynamicFields({\n      parentId: FAAS_POOL_REGISTRY_DYNAMIC_FIELD,\n      limit: 1000,\n    });\n    const arrpPoolId = poolList.data.map((item: any) => item.objectId);\n    const poolInfo = await provider.multiGetObjects({\n      ids: arrpPoolId,\n      options: { showContent: true },\n    });\n    let finalList: IFaasData[] = [];\n    for (let i = 0; i < poolInfo.length; i++) {\n      const info = (poolInfo[i]?.data?.content as any).fields.value.fields;\n      const type = (poolInfo[i]?.data?.content as any).fields.value.type;\n      const poolIndex = (poolInfo[i]?.data?.content as any).fields.name;\n      let accountStaked;\n      if (account) {\n        try {\n          accountStaked = await provider.getDynamicFieldObject({\n            parentId: FAAS_POSITION_REGISTRY_DYNAMIC_FIELD,\n            name: {\n              type: DYNAMIC_FAAS_POS_TYPE,\n              value: {\n                addr: account,\n                pool_idx: poolIndex,\n              },\n            },\n          });\n        } catch (error) {\n          throw error;\n        }\n      }\n      const { coinXType, coinYType } = extractType(type);\n      const tokenType = info.reward_token_custodian.type\n        .split(\"Custodian\")[1]\n        .slice(1, -1);\n      let pendingRw: IFaasUserRw[] = [],\n        listReward: CoinMetadata[] = [];\n      if (+info.token_per_seconds > 0) {\n        listReward.push(\n          coins.find((item: CoinMetadata) => item.type === tokenType)\n        );\n      }\n      if (+info.flx_per_seconds > 0) {\n        listReward.push(\n          coins.find((item: CoinMetadata) => item.type === FLX_TYPE)\n        );\n      }\n      if (account && accountStaked?.data) {\n        const typeArguments = [\n          coinXType,\n          coinYType,\n          listReward.find(\n            (item: CoinMetadata) => item && item?.symbol !== \"FLX\"\n          ).type ?? SUI_TYPE,\n        ];\n        let params = [FAAS_STATE_OBJECT, +poolIndex, CLOCK_ID];\n        const tx = await initTxBlock(\n          FAAS_PACKAGE_OBJECT,\n          \"fetcher\",\n          \"fetch_pending_reward\",\n          params,\n          typeArguments,\n          undefined\n        );\n        const result = await provider.devInspectTransactionBlock({\n          sender: account,\n          transactionBlock: tx,\n        });\n        if (result.effects.status.status === \"success\") {\n          pendingRw = listReward.map((item: CoinMetadata) => {\n            const amount =\n              item.type === FLX_TYPE\n                ? getBalanceAmount(\n                    result.events[0].parsedJson.flx_reward_amount,\n                    FLX_DECIMAL\n                  ).toFixed()\n                : getBalanceAmount(\n                    result.events[0].parsedJson.token_reward_amount,\n                    coins.find((item: CoinMetadata) => item.type === tokenType)\n                      .decimals\n                  ).toFixed();\n            return {\n              token: item,\n              amount,\n            };\n          });\n        } else {\n          pendingRw = listReward.map((item: CoinMetadata) => {\n            return {\n              token: item,\n              amount: \"0\",\n            };\n          });\n        }\n        finalList.push({\n          coinX: coins.find((item: CoinMetadata) => item.type === coinXType),\n          coinY: coins.find((item: CoinMetadata) => item.type === coinYType),\n          userReward: pendingRw,\n          totalLpDeposit: accountStaked?.data\n            ? getBalanceAmount(\n                (accountStaked?.data.content as any).fields.value.fields.amount,\n                LP_DECIMAL\n              ).toFixed()\n            : \"0\",\n        });\n      } else {\n        pendingRw = listReward.map((item: CoinMetadata) => {\n          return {\n            token: item,\n            amount: \"0\",\n          };\n        });\n        finalList.push({\n          coinX: coins.find((item: CoinMetadata) => item.type === coinXType),\n          coinY: coins.find((item: CoinMetadata) => item.type === coinYType),\n          userReward: [],\n          totalLpDeposit: \"0\",\n        });\n      }\n    }\n    return finalList;\n  } catch (error) {\n    throw error;\n  }\n};\n\nexport const getFaasV2 = async (account?: string): Promise<IFaasV2[]> => {\n  try {\n    const coins: CoinMetadata[] = await getCoinsFlowX();\n    const pairsList: IPairsRankingItem[] = await getPairsRankingFlowX();\n    const pairObjectIds = pairsList?.map(\n      (item: IPairsRankingItem) => item.lpObjectId\n    );\n    const poolInfos = await getPoolInfos(pairObjectIds);\n    if (coins.length > 0 && poolInfos.length > 0) {\n      const poolList = await provider.getDynamicFields({\n        parentId: FAAS_POOL_REGISTRY_DYNAMIC_FIELD_V2,\n        limit: 1000,\n      });\n      // // console.log('poolList', poolList);\n      // console.log('here', poolList);\n      const arrpPoolId = poolList.data.map((item: any) => item.objectId);\n      // console.log('arrpPoolId', arrpPoolId);\n      const poolInfo = await provider.multiGetObjects({\n        ids: arrpPoolId,\n        options: { showContent: true },\n      });\n      let finalList: any[] = [];\n      for (let i = 0; i < poolInfo.length; i++) {\n        const info = (poolInfo[i]?.data?.content as any).fields.value.fields;\n        const type = (poolInfo[i]?.data?.content as any).fields.value.type;\n        const poolIndex = (poolInfo[i]?.data?.content as any).fields.name;\n        const poolId = (poolInfo[i]?.data as any).objectId;\n        let accountStaked;\n        if (account) {\n          try {\n            const userOwnedPosition = await getFullyOwnedObjects(\n              account,\n              { showContent: true },\n              {\n                MatchAll: [\n                  {\n                    StructType: FAAS_FARM_TYPE_V2,\n                  },\n                  {\n                    AddressOwner: account,\n                  },\n                ],\n              }\n            );\n            // console.log('userOwnedPosition', userOwnedPosition);\n            for (let i = 0; i < userOwnedPosition.length; i++) {\n              const dataPos: any = userOwnedPosition[i];\n              const { type, fields } = dataPos?.data?.content;\n              // console.log('poolIndex', fields.pool_idx, poolIndex, fields.pool_idx === poolIndex, dataPos);\n              if (fields.pool_idx === poolIndex) {\n                accountStaked = dataPos;\n              }\n            }\n          } catch (error) {\n            console.log(\"getDynamicFieldObject accountStaked\", error);\n          }\n        }\n        const { coinXType, coinYType } = extractTypeFaas(type);\n        //Calc APR\n        const lpType = info.lp_custodian.type;\n        const trueType = lpType.split(\"Custodian\")[1].slice(1, -1);\n        const idxPool = poolInfos.findIndex(\n          (item: any) => item.lpType === trueType\n        );\n        const coinX = coins.find(\n          (coin) => coin.type === poolInfos[idxPool]?.coinX\n        );\n        const coinY = coins.find(\n          (coin) => coin.type === poolInfos[idxPool]?.coinY\n        );\n        let lpPrice = \"0\";\n        if (idxPool > -1) {\n          lpPrice = getLpPrice({\n            poolInfo: poolInfos[idxPool],\n            coinX,\n            coinY,\n          });\n        }\n        const tokenType = standardizeType(\n          info.reward_token_custodian.type.split(\"Custodian\")[1].slice(1, -1)\n        );\n        const token =\n          coins.findIndex((item: any) => item.type === tokenType) > -1\n            ? coins[\n                coins.findIndex((item: CoinMetadata) => item.type === tokenType)\n              ]\n            : null;\n        const flxPrice =\n          coins.findIndex((item: any) => item.type === FLX_TYPE) > -1\n            ? coins[\n                coins.findIndex((item: CoinMetadata) => item.type === FLX_TYPE)\n              ].derivedPriceInUSD\n            : 0;\n        const tokenRw = token\n          ? +BigNumb(+getBalanceAmount(info.token_per_seconds, token.decimals))\n              .multipliedBy(token.derivedPriceInUSD)\n              .toFixed()\n          : 0;\n        const flxRw =\n          +flxPrice > 0\n            ? +BigNumb(\n                +getBalanceAmount(info.flx_per_seconds, FLX_DECIMAL)\n              ).multipliedBy(flxPrice)\n            : 0;\n\n        const totalRw = +BigNumb(tokenRw).plus(flxRw);\n        const totalLp =\n          info.lp_custodian.fields.reserve > 0\n            ? +BigNumb(info.lp_custodian.fields.reserve).div(10 ** LP_DECIMAL)\n            : 0;\n        const totalLpInUsd =\n          +totalLp > 0 && +lpPrice > 0\n            ? +BigNumb(totalLp).multipliedBy(lpPrice)\n            : 0;\n        const rewardApr =\n          +totalLpInUsd > 0\n            ? BigNumb(totalRw)\n                .multipliedBy(31_556_926)\n                .div(totalLpInUsd)\n                .multipliedBy(100)\n                .toFixed(3)\n            : \"0\";\n\n        const tradingApr =\n          pairsList.find((item: any) => item.lpType === trueType)?.stats\n            ?.aprPerformance7D ?? \"0\";\n        // console.log('TTT', rawApr, pairsList.find((item: any) => item.lpType === trueType)?.stats?.aprPerformance7D);\n        let listReward = [] as CoinMetadata[],\n          listPoolReward = [] as IFaasUserRw[];\n        const durationInSec = +BigNumb(info.ended_at_ms)\n          .minus(info.started_at_ms)\n          .div(1000);\n\n        const idxTokenRwType = coins.findIndex(\n          (item: CoinMetadata) => item.type === tokenType\n        );\n        // console.log(\n        //   'tokenType',\n        //   tokenType,\n        //   coins,\n        //   idxTokenRwType,\n        //   stripZeros('0x09a4456a7ed43de223ffa2948b66bbc5e4b47455b3ba1026a39866057e93182a::wsol::WSOL'.split('0x')[1]),\n        //   normalizeSuiAddress('0x9a4456a7ed43de223ffa2948b66bbc5e4b47455b3ba1026a39866057e93182a::wsol::WSOL', false),\n        // );\n        if (+info.token_per_seconds > 0 && idxTokenRwType > -1) {\n          listReward.push(coins[idxTokenRwType]);\n          const totalTokenRw = token\n            ? BigNumb(info.token_per_seconds).multipliedBy(durationInSec) + \"\"\n            : \"0\";\n          // console.log('QQQQ', info);\n          listPoolReward.push({\n            token: coins[idxTokenRwType],\n            amount: totalTokenRw,\n          });\n        }\n        // console.log('listReward', listReward);\n        const idxFlxRwType = coins.findIndex(\n          (item: CoinMetadata) => item.type === FLX_TYPE\n        );\n        if (+info.flx_per_seconds > 0 && idxFlxRwType > -1) {\n          listReward.push(coins[idxFlxRwType]);\n          const totalFlxRw = token\n            ? BigNumb(info.flx_per_seconds).multipliedBy(durationInSec) + \"\"\n            : \"0\";\n          listPoolReward.push({\n            token: coins[idxFlxRwType],\n            amount: totalFlxRw,\n          });\n        }\n        // console.log('accountStaked', coinX.symbol, coinY.symbol, listReward);\n        //Get pending reward;\n        let pendingRw = [] as IFaasUserRw[];\n        if (account && accountStaked && poolIndex) {\n          // console.log('ZZZz', coinX.symbol, coinY.symbol, listReward, accountStaked);\n          const idxCustomRewardCoin = listReward.findIndex(\n            (item: CoinMetadata) => item && item?.symbol !== \"FLX\"\n          );\n          const typeArguments = [\n            coinX.type,\n            coinY.type,\n            idxCustomRewardCoin > -1\n              ? listReward[idxCustomRewardCoin].type\n              : SUI_TYPE,\n          ];\n          let params = [\n            FAAS_STATE_OBJECT_V2,\n            (accountStaked.data as any)?.objectId,\n            CLOCK_ID,\n          ];\n          const tx = await initTxBlock(\n            FAAS_PACKAGE_OBJECT_V2,\n            \"fetcher\",\n            \"fetch_pending_reward\",\n            params,\n            typeArguments\n          );\n          const result = await provider.devInspectTransactionBlock({\n            sender: account,\n            transactionBlock: tx,\n          });\n          // console.log('result', result);\n          if (result.effects.status.status === \"success\") {\n            pendingRw = listReward.map((item: CoinMetadata) => {\n              const amount =\n                item.type === FLX_TYPE\n                  ? result.events[0].parsedJson.flx_reward_amount\n                  : result.events[0].parsedJson.token_reward_amount;\n              return {\n                token: item,\n                amount,\n              };\n            });\n          } else {\n            pendingRw = listReward.map((item: CoinMetadata) => {\n              return {\n                token: item,\n                amount: \"0\",\n              };\n            });\n          }\n        } else {\n          pendingRw = listReward.map((item: CoinMetadata) => {\n            return {\n              token: item,\n              amount: \"0\",\n            };\n          });\n        }\n        finalList.push({\n          coinX: coins.find((coin) => coin.type === coinXType),\n          coinY: coins.find((coin) => coin.type === coinYType),\n          id: arrpPoolId[i],\n          poolIndex,\n          started_at_ms: info.started_at_ms,\n          ended_at_ms: +info.ended_at_ms,\n          creator: info.creator,\n          totalLiquid:\n            +totalLp > 0 && +lpPrice > 0\n              ? +BigNumb(totalLp).multipliedBy(lpPrice)\n              : 0,\n          totalLiquidDecimal:\n            +totalLp > 0 && +lpPrice > 0 ? +BigNumb(totalLp) : 0,\n          totalLpDeposit: accountStaked\n            ? +getBalanceAmount(\n                ((accountStaked as any)?.data.content as any)?.fields?.amount,\n                LP_DECIMAL\n              )\n            : \"0\",\n          rewardApr,\n          tradingApr,\n          userReward: pendingRw,\n          poolReward: listPoolReward,\n          isLegacy: false,\n          lpPrice,\n          poolLiquid: {\n            poolObjectId: poolInfos[idxPool]?.objectId,\n            reserveX: poolInfos[idxPool]?.reserveX.fields.balance,\n            reserveY: poolInfos[idxPool]?.reserveY.fields.balance,\n            totalLpSupply: poolInfos[idxPool]?.totalLpSupply,\n            lpType: poolInfos[idxPool]?.lpType,\n            feeRate: poolInfos[idxPool]?.feeRate,\n          },\n        });\n      }\n      return finalList;\n    }\n  } catch (error) {\n    throw error;\n  }\n};\n","import { BigNumb } from \"../../BigNumber\";\nimport { LP_DECIMAL } from \"../../constants\";\nimport { CoinMetadata, ILiquidity, IPoolInfos } from \"../../types\";\nimport {\n  calculateReceiveAmount,\n  getBalanceAmount,\n  getBasicData,\n  sortData,\n} from \"../../utils\";\n\nexport const getLiquidity = async (\n  account: string,\n  sortType?: string, //lpValue, userLpBalance, totalLpSupply\n  sortOrder?: string // ascending , descending\n): Promise<ILiquidity[]> => {\n  try {\n    let arr: ILiquidity[] = [];\n    const {\n      coins,\n      coinBalances,\n      poolInfos: rawPoolInfo,\n    } = await getBasicData(account);\n    const poolInfos = rawPoolInfo.map((pool: IPoolInfos) => ({\n      ...pool,\n      coinX: coins.find((item: CoinMetadata) => item.type === pool.coinX),\n      coinY: coins.find((item: CoinMetadata) => item.type === pool.coinY),\n    }));\n    for (let i = 0; i < coinBalances.length; i++) {\n      const idx = poolInfos.findIndex(\n        (item) => item.lpType === coinBalances[i].type\n      );\n      if (idx > -1) {\n        const poolInfo = poolInfos[idx];\n        let lpValue = \"0\";\n        const {\n          objectId,\n          reserveX,\n          reserveY,\n          totalLpSupply,\n          coinX,\n          coinY,\n          lpType,\n          feeRate,\n        } = poolInfo;\n        const { amountX, amountY } = calculateReceiveAmount(\n          {\n            objectId,\n            reserveX,\n            reserveY,\n            totalLpSupply,\n            coinX: coinX.type,\n            coinY: coinY.type,\n            lpType,\n            feeRate,\n          },\n          poolInfo.coinX,\n          poolInfo.coinY\n        );\n        const amountXValueInUsd = BigNumb(amountX).multipliedBy(\n          coinX.derivedPriceInUSD\n        );\n        const amountYValueInUsd = BigNumb(amountY).multipliedBy(\n          coinX.derivedPriceInUSD\n        );\n        const lpPrice = amountXValueInUsd.plus(amountYValueInUsd).toFixed();\n        lpValue = BigNumb(lpPrice)\n          .multipliedBy(getBalanceAmount(coinBalances[i].balance, LP_DECIMAL))\n          .toFixed();\n        if (+coinBalances[i].balance > 0) {\n          arr.push({\n            ...poolInfo,\n            userLpBalance: coinBalances[i].balance + \"\",\n            apr: poolInfo.stats.aprPerformance7D ?? \"0.00\",\n            lpValue,\n            coinX,\n            coinY,\n          });\n        }\n      }\n    }\n    return sortData(arr, sortType, sortOrder);\n  } catch (error) {\n    throw error;\n  }\n};\n","import { POSITION_LIQUID_V3_TYPE, provider } from \"../../constants\";\n\nimport { BigNumb } from \"../../BigNumber\";\nimport { TransactionBlock } from \"@mysten/sui.js\";\nimport { ClmmPoolUtil, TickMath } from \"./math\";\nimport { asIntN } from \"./utils\";\nimport { BN } from \"bn.js\";\nimport { getTxCollectRewardLiquidV3 } from \"./getTxCollectRewardLiquidV3\";\nimport { getTxCollectLiquidV3 } from \"./getTxCollectLiquidV3\";\nimport {\n  getBalanceAmount,\n  getCoinsFlowX,\n  getFullyMultiObject,\n  getFullyOwnedObjects,\n  standardizeType,\n} from \"../../utils\";\nimport { CoinMetadata, ILpV3Rw, IUserLiquidV3Position } from \"../../types\";\n\nexport const getUserLiquidityV3 = async (\n  account: string\n): Promise<IUserLiquidV3Position[]> => {\n  try {\n    const coins: CoinMetadata[] = await getCoinsFlowX();\n    const ownedPosition = await getFullyOwnedObjects(\n      account,\n      { showContent: true },\n      { StructType: POSITION_LIQUID_V3_TYPE }\n    );\n    const listPool = [\n      ...new Set(\n        ownedPosition.map((i) => (i.data.content as any)?.fields?.pool_id)\n      ),\n    ];\n    const poolInfos = await getFullyMultiObject(listPool);\n    let positionInfo: IUserLiquidV3Position[] = [];\n    const tx = new TransactionBlock();\n    for (let i = 0; i < ownedPosition.length; i++) {\n      const { content, objectId } = ownedPosition[i].data;\n      const {\n        coin_type_x,\n        coin_type_y,\n        tick_lower_index,\n        tick_upper_index,\n        liquidity,\n        pool_id,\n      } = (content as any).fields;\n      const {\n        sqrt_price,\n        liquidity: poolLiquid,\n        swap_fee_rate,\n        tick_index,\n        reserve_x,\n        reserve_y,\n        id,\n      } = (\n        poolInfos.find((item) => item.data.objectId === pool_id).data\n          .content as any\n      ).fields;\n      const reward_infos =\n        (\n          poolInfos.find((item) => item.data.objectId === pool_id).data\n            .content as any\n        ).fields?.reward_infos ?? [];\n      const coinX = coins.find(\n          (item) => item.type === standardizeType(coin_type_x?.fields?.name)\n        ),\n        coinY = coins.find(\n          (item) => item.type === standardizeType(coin_type_y?.fields?.name)\n        ),\n        minPrice = {\n          price: TickMath.tickIndexToPrice(\n            asIntN(tick_lower_index.fields[\"bits\"]),\n            coinX?.decimals,\n            coinY?.decimals\n          ).toString(),\n          sqrtPrice: TickMath.tickIndexToSqrtPriceX64(\n            asIntN(tick_lower_index.fields[\"bits\"])\n          ).toString(),\n          tickIndex: asIntN(tick_lower_index.fields[\"bits\"]),\n        },\n        maxPrice = {\n          price: TickMath.tickIndexToPrice(\n            asIntN(tick_upper_index.fields[\"bits\"]),\n            coinX?.decimals,\n            coinY?.decimals\n          ).toString(),\n          sqrtPrice: TickMath.tickIndexToSqrtPriceX64(\n            asIntN(tick_upper_index.fields[\"bits\"])\n          ).toString(),\n          tickIndex: asIntN(tick_upper_index.fields[\"bits\"]),\n        },\n        currentPrice = {\n          price:\n            coinX && coinY\n              ? TickMath.sqrtPriceX64ToPrice(\n                  new BN(sqrt_price),\n                  coinX.decimals,\n                  coinY.decimals\n                ).toString()\n              : \"\",\n          sqrtPrice: sqrt_price,\n          tickIndex: asIntN(tick_index?.fields[\"bits\"]),\n        },\n        coinPortion = ClmmPoolUtil.getCoinAmountFromLiquidity(\n          new BN(liquidity),\n          new BN(sqrt_price),\n          new BN(minPrice.sqrtPrice),\n          new BN(maxPrice.sqrtPrice),\n          true\n        ),\n        currentPortion = {\n          coinX: {\n            amount: coinPortion.coinA.toString(),\n            amountInUsd: BigNumb(\n              getBalanceAmount(\n                coinPortion.coinA.toString(),\n                coinX?.decimals\n              ).toFixed()\n            )\n              .multipliedBy(coinX.derivedPriceInUSD)\n              .toFixed(),\n          },\n          coinY: {\n            amount: coinPortion.coinB.toString(),\n            amountInUsd: BigNumb(\n              getBalanceAmount(\n                coinPortion.coinB.toString(),\n                coinY?.decimals\n              ).toFixed()\n            )\n              .multipliedBy(coinY.derivedPriceInUSD)\n              .toFixed(),\n          },\n        };\n      //get user reward\n      const ownedPosdata: any = (ownedPosition[i].data?.content as any)?.fields;\n      let reward: ILpV3Rw = { rewardX: \"0\", rewardY: \"0\" };\n      reward_infos.forEach((item: any) => {\n        const rewardTypes: string[] = [\n          coinX?.type,\n          coinY?.type,\n          standardizeType(item?.fields?.reward_coin_type?.fields?.name),\n        ];\n        getTxCollectRewardLiquidV3(\n          rewardTypes,\n          ownedPosdata.id[\"id\"],\n          account,\n          tx\n        );\n      });\n      if (+ownedPosdata?.liquidity > 0) {\n        getTxCollectLiquidV3(coinX, coinY, ownedPosdata.id[\"id\"], account, tx);\n      }\n      positionInfo.push({\n        coinX,\n        coinY,\n        currentPortion,\n        positionLiquid: liquidity,\n        positionId: objectId,\n        minPrice,\n        maxPrice,\n        poolLiquid: poolLiquid,\n        feeRate: BigNumb(swap_fee_rate).dividedBy(10000).toFixed(),\n        currentPrice,\n        reward,\n        apr: \"0\",\n        id: ownedPosdata.id[\"id\"],\n        poolReward: [],\n      });\n    }\n    if (positionInfo.length > 0) {\n      const result = await provider.devInspectTransactionBlock({\n        sender: account,\n        transactionBlock: tx,\n      });\n      const collectEvent = result.events.filter(\n        (i) =>\n          i.type.includes(\"::pool::Collect\") &&\n          !i.type.includes(\"::pool::CollectPoolReward\")\n      );\n      const collectPoolReward = result.events.filter((i) =>\n        i.type.includes(\"::pool::CollectPoolReward\")\n      );\n      for (let i = 0; i < positionInfo.length; i++) {\n        const index = collectEvent.findIndex(\n          (item) => item.parsedJson.position_id === positionInfo[i].id\n        );\n        const incentiveReward = collectPoolReward.filter(\n          (item) => item?.parsedJson?.position_id === positionInfo[i].id\n        );\n        if (index > -1) {\n          positionInfo[i].reward = {\n            rewardX: collectEvent[index].parsedJson.amount_x,\n            rewardY: collectEvent[index].parsedJson.amount_y,\n          };\n        }\n        if (incentiveReward.length > 0) {\n          positionInfo[i].poolReward = incentiveReward.map((item) => {\n            return {\n              amount: item.parsedJson.amount,\n              coin: coins.find(\n                (coin) =>\n                  standardizeType(coin.type) ===\n                  standardizeType(item.parsedJson.reward_coin_type.name)\n              ),\n            };\n          });\n        }\n      }\n    }\n    let sortedData = positionInfo.sort(\n      (a: IUserLiquidV3Position, b: IUserLiquidV3Position) => {\n        let liquidB = +b.positionLiquid;\n        let liquidA = +a.positionLiquid;\n        return liquidB - liquidA;\n      }\n    );\n    // console.log('positionInfo', positionInfo);\n    return sortedData;\n  } catch (err) {\n    console.log(\"getPositionData ERROR\", err);\n  }\n};\n","import BN from 'bn.js';\nimport {asUintN, d} from '../utils';\nimport {LiquidityInput} from '../types/liquidity';\nimport {ClmmpoolsError, MathErrorCode, CoinErrorCode} from '../errors/errors';\nimport type {ClmmpoolData, TickData} from '../types/clmmpool';\nimport {FEE_RATE_DENOMINATOR, MAX_SQRT_PRICE, MIN_SQRT_PRICE} from '../types/constants';\nimport Decimal from '../utils/decimal';\nimport {SwapUtils} from './swap';\nimport {TickMath} from './tick';\nimport {MathUtil, ONE, U64_MAX, ZERO} from './utils';\n\nexport type SwapStepResult = {\n  amountIn: BN;\n  amountOut: BN;\n  nextSqrtPrice: BN;\n  feeAmount: BN;\n};\n\nexport type SwapResult = {\n  amountIn: BN;\n  amountOut: BN;\n  feeAmount: BN;\n  refAmount: BN;\n  nextSqrtPrice: BN;\n  crossTickNum: number;\n};\n\nexport type CoinAmounts = {\n  coinA: BN;\n  coinB: BN;\n};\n\nexport function toCoinAmount(a: number, b: number): CoinAmounts {\n  return {\n    coinA: new BN(a.toString()),\n    coinB: new BN(b.toString()),\n  };\n}\n\n/**\n * Get the amount A delta about two prices, for give amount of liquidity.\n * `delta_a = (liquidity * delta_sqrt_price) / sqrt_price_upper * sqrt_price_lower)`\n *\n * @param sqrtPrice0 - A sqrt price\n * @param sqrtPrice1 - Another sqrt price\n * @param liquidity - The amount of usable liquidity\n * @param roundUp - Whether to round the amount up or down\n * @returns\n */\nexport function getDeltaA(sqrtPrice0: BN, sqrtPrice1: BN, liquidity: BN, roundUp: boolean): BN {\n  const sqrtPriceDiff = sqrtPrice0.gt(sqrtPrice1) ? sqrtPrice0.sub(sqrtPrice1) : sqrtPrice1.sub(sqrtPrice0);\n  const numberator = liquidity.mul(sqrtPriceDiff).shln(64);\n  const denomminator = sqrtPrice0.mul(sqrtPrice1);\n  const quotient = numberator.div(denomminator);\n  const remainder = numberator.mod(denomminator);\n  const result = roundUp && !remainder.eq(ZERO) ? quotient.add(new BN(1)) : quotient;\n  // if (MathUtil.isOverflow(result, 64)) {\n  //   throw new ClmmpoolsError('Result large than u64 max', MathErrorCode.IntegerDowncastOverflow)\n  // }\n  return result;\n}\n\n/**\n * Get the amount B delta about two prices, for give amount of liquidity.\n * `delta_a = (liquidity * delta_sqrt_price) / sqrt_price_upper * sqrt_price_lower)`\n *\n * @param sqrtPrice0 - A sqrt price\n * @param sqrtPrice1 - Another sqrt price\n * @param liquidity - The amount of usable liquidity\n * @param roundUp - Whether to round the amount up or down\n * @returns\n */\nexport function getDeltaB(sqrtPrice0: BN, sqrtPrice1: BN, liquidity: BN, roundUp: boolean): BN {\n  const sqrtPriceDiff = sqrtPrice0.gt(sqrtPrice1) ? sqrtPrice0.sub(sqrtPrice1) : sqrtPrice1.sub(sqrtPrice0);\n  if (liquidity.eq(ZERO) || sqrtPriceDiff.eq(ZERO)) {\n    return ZERO;\n  }\n  const p = liquidity.mul(sqrtPriceDiff);\n  const shoudRoundUp = roundUp && p.and(U64_MAX).gt(ZERO);\n  const result = shoudRoundUp ? p.shrn(64).add(ONE) : p.shrn(64);\n  if (MathUtil.isOverflow(result, 64)) {\n    throw new ClmmpoolsError('Result large than u64 max', MathErrorCode.IntegerDowncastOverflow);\n  }\n  return result;\n}\n\n/**\n * Get the next sqrt price from give a delta of token_a.\n * `new_sqrt_price = (sqrt_price * liquidity) / (liquidity +/- amount * sqrt_price)`\n *\n * @param sqrtPrice - The start sqrt price\n * @param liquidity - The amount of usable liquidity\n * @param amount - The amount of token_a\n * @param byAmountIn - Weather to fixed input\n */\nexport function getNextSqrtPriceAUp(sqrtPrice: BN, liquidity: BN, amount: BN, byAmountIn: boolean): BN {\n  if (amount.eq(ZERO)) {\n    return sqrtPrice;\n  }\n  const numberator = MathUtil.checkMulShiftLeft(sqrtPrice, liquidity, 64, 256);\n  const liquidityShl64 = liquidity.shln(64);\n  const product = MathUtil.checkMul(sqrtPrice, amount, 256);\n  if (!byAmountIn && liquidityShl64.lte(product)) {\n    throw new ClmmpoolsError(\n      'getNextSqrtPriceAUp - Unable to divide liquidityShl64 by product',\n      MathErrorCode.DivideByZero,\n    );\n  }\n  const nextSqrtPrice = byAmountIn\n    ? MathUtil.checkDivRoundUpIf(numberator, liquidityShl64.add(product), true)\n    : MathUtil.checkDivRoundUpIf(numberator, liquidityShl64.sub(product), true);\n  if (nextSqrtPrice.lt(new BN(MIN_SQRT_PRICE))) {\n    throw new ClmmpoolsError(\n      'getNextSqrtPriceAUp - Next sqrt price less than min sqrt price',\n      CoinErrorCode.CoinAmountMinSubceeded,\n    );\n  }\n  if (nextSqrtPrice.gt(new BN(MAX_SQRT_PRICE))) {\n    throw new ClmmpoolsError(\n      'getNextSqrtPriceAUp - Next sqrt price greater than max sqrt price',\n      CoinErrorCode.CoinAmountMaxExceeded,\n    );\n  }\n\n  return nextSqrtPrice;\n}\n\n/**\n * Get the next sqrt price from give a delta of token_b.\n * `new_sqrt_price = (sqrt_price +(delta_b / liquidity)`\n *\n * @param sqrtPrice - The start sqrt price\n * @param liquidity - The amount of usable liquidity\n * @param amount - The amount of token_a\n * @param byAmountIn - Weather to fixed input\n */\nexport function getNextSqrtPriceBDown(sqrtPrice: BN, liquidity: BN, amount: BN, byAmountIn: boolean): BN {\n  const deltaSqrtPrice = MathUtil.checkDivRoundUpIf(amount.shln(64), liquidity, !byAmountIn);\n  const nextSqrtPrice = byAmountIn ? sqrtPrice.add(deltaSqrtPrice) : sqrtPrice.sub(deltaSqrtPrice);\n\n  if (nextSqrtPrice.lt(new BN(MIN_SQRT_PRICE)) || nextSqrtPrice.gt(new BN(MAX_SQRT_PRICE))) {\n    throw new ClmmpoolsError('getNextSqrtPriceAUp - Next sqrt price out of bounds', CoinErrorCode.SqrtPriceOutOfBounds);\n  }\n\n  return nextSqrtPrice;\n}\n\n/**\n * Get next sqrt price from input parameter.\n *\n * @param sqrtPrice\n * @param liquidity\n * @param amount\n * @param aToB\n * @returns\n */\nexport function getNextSqrtPriceFromInput(sqrtPrice: BN, liquidity: BN, amount: BN, aToB: boolean): BN {\n  return aToB\n    ? getNextSqrtPriceAUp(sqrtPrice, liquidity, amount, true)\n    : getNextSqrtPriceBDown(sqrtPrice, liquidity, amount, true);\n}\n\n/**\n * Get the next sqrt price from output parameters.\n *\n * @param sqrtPrice\n * @param liquidity\n * @param amount\n * @param a2b\n * @returns\n */\nexport function getNextSqrtPriceFromOutput(sqrtPrice: BN, liquidity: BN, amount: BN, a2b: boolean): BN {\n  return a2b\n    ? getNextSqrtPriceBDown(sqrtPrice, liquidity, amount, false)\n    : getNextSqrtPriceAUp(sqrtPrice, liquidity, amount, false);\n}\n\n/**\n * Get the amount of delta_a or delta_b from input parameters, and round up result.\n *\n * @param currentSqrtPrice\n * @param targetSqrtPrice\n * @param liquidity\n * @param a2b\n * @returns\n */\nexport function getDeltaUpFromInput(currentSqrtPrice: BN, targetSqrtPrice: BN, liquidity: BN, a2b: boolean): BN {\n  const sqrtPriceDiff = currentSqrtPrice.gt(targetSqrtPrice)\n    ? currentSqrtPrice.sub(targetSqrtPrice)\n    : targetSqrtPrice.sub(currentSqrtPrice);\n\n  if (liquidity.lte(ZERO) || sqrtPriceDiff.eq(ZERO)) {\n    return ZERO;\n  }\n\n  let result;\n  if (a2b) {\n    const numberator = new BN(liquidity).mul(new BN(sqrtPriceDiff)).shln(64);\n    const denomminator = targetSqrtPrice.mul(currentSqrtPrice);\n    const quotient = numberator.div(denomminator);\n    const remainder = numberator.mod(denomminator);\n    result = !remainder.eq(ZERO) ? quotient.add(ONE) : quotient;\n  } else {\n    const product = new BN(liquidity).mul(new BN(sqrtPriceDiff));\n    const shoudRoundUp = product.and(U64_MAX).gt(ZERO);\n    result = shoudRoundUp ? product.shrn(64).add(ONE) : product.shrn(64);\n  }\n  return result;\n}\n\n/**\n * Get the amount of delta_a or delta_b from output parameters, and round down result.\n *\n * @param currentSqrtPrice\n * @param targetSqrtPrice\n * @param liquidity\n * @param a2b\n * @returns\n */\nexport function getDeltaDownFromOutput(currentSqrtPrice: BN, targetSqrtPrice: BN, liquidity: BN, a2b: boolean): BN {\n  const sqrtPriceDiff = currentSqrtPrice.gt(targetSqrtPrice)\n    ? currentSqrtPrice.sub(targetSqrtPrice)\n    : targetSqrtPrice.sub(currentSqrtPrice);\n\n  if (liquidity.lte(ZERO) || sqrtPriceDiff.eq(ZERO)) {\n    return ZERO;\n  }\n\n  let result;\n  if (a2b) {\n    const product = liquidity.mul(sqrtPriceDiff);\n    result = product.shrn(64);\n  } else {\n    const numberator = liquidity.mul(sqrtPriceDiff).shln(64);\n    const denomminator = targetSqrtPrice.mul(currentSqrtPrice);\n    result = numberator.div(denomminator);\n  }\n  return result;\n}\n\n/**\n * Simulate per step of swap on every tick.\n *\n * @param currentSqrtPrice\n * @param targetSqrtPrice\n * @param liquidity\n * @param amount\n * @param feeRate\n * @param byAmountIn\n * @returns\n */\nexport function computeSwapStep(\n  currentSqrtPrice: BN,\n  targetSqrtPrice: BN,\n  liquidity: BN,\n  amount: BN,\n  feeRate: BN,\n  byAmountIn: boolean,\n): SwapStepResult {\n  if (liquidity === ZERO) {\n    return {\n      amountIn: ZERO,\n      amountOut: ZERO,\n      nextSqrtPrice: targetSqrtPrice,\n      feeAmount: ZERO,\n    };\n  }\n  const a2b = currentSqrtPrice.gte(targetSqrtPrice);\n  let amountIn: BN;\n  let amountOut: BN;\n  let nextSqrtPrice: BN;\n  let feeAmount: BN;\n  if (byAmountIn) {\n    const amountRemain = MathUtil.checkMulDivFloor(\n      amount,\n      MathUtil.checkUnsignedSub(FEE_RATE_DENOMINATOR, feeRate),\n      FEE_RATE_DENOMINATOR,\n      64,\n    );\n    const maxAmountIn = getDeltaUpFromInput(currentSqrtPrice, targetSqrtPrice, liquidity, a2b);\n    if (maxAmountIn.gt(amountRemain)) {\n      amountIn = amountRemain;\n      feeAmount = MathUtil.checkUnsignedSub(amount, amountRemain);\n      nextSqrtPrice = getNextSqrtPriceFromInput(currentSqrtPrice, liquidity, amountRemain, a2b);\n    } else {\n      amountIn = maxAmountIn;\n      feeAmount = MathUtil.checkMulDivCeil(amountIn, feeRate, FEE_RATE_DENOMINATOR.sub(feeRate), 64);\n      nextSqrtPrice = targetSqrtPrice;\n    }\n    amountOut = getDeltaDownFromOutput(currentSqrtPrice, nextSqrtPrice, liquidity, a2b);\n  } else {\n    const maxAmountOut = getDeltaDownFromOutput(currentSqrtPrice, targetSqrtPrice, liquidity, a2b);\n    if (maxAmountOut.gt(amount)) {\n      amountOut = amount;\n      nextSqrtPrice = getNextSqrtPriceFromOutput(currentSqrtPrice, liquidity, amount, a2b);\n    } else {\n      amountOut = maxAmountOut;\n      nextSqrtPrice = targetSqrtPrice;\n    }\n    amountIn = getDeltaUpFromInput(currentSqrtPrice, nextSqrtPrice, liquidity, a2b);\n    feeAmount = MathUtil.checkMulDivCeil(amountIn, feeRate, FEE_RATE_DENOMINATOR.sub(feeRate), 64);\n  }\n  return {\n    amountIn,\n    amountOut,\n    nextSqrtPrice,\n    feeAmount,\n  };\n}\n\n/**\n * Simulate swap by imput lots of ticks.\n * @param aToB\n * @param byAmountIn\n * @param amount\n * @param poolData\n * @param swapTicks\n * @returns\n */\nexport function computeSwap(\n  aToB: boolean,\n  byAmountIn: boolean,\n  amount: BN,\n  poolData: ClmmpoolData,\n  swapTicks: Array<TickData>,\n): SwapResult {\n  let remainerAmount = amount;\n  let currentLiquidity = poolData.liquidity;\n  let {currentSqrtPrice} = poolData;\n  const swapResult: SwapResult = {\n    amountIn: ZERO,\n    amountOut: ZERO,\n    feeAmount: ZERO,\n    refAmount: ZERO,\n    nextSqrtPrice: ZERO,\n    crossTickNum: 0,\n  };\n  let targetSqrtPrice;\n  let signedLiquidityChange;\n  const sqrtPriceLimit = SwapUtils.getDefaultSqrtPriceLimit(aToB);\n  for (const tick of swapTicks) {\n    if (aToB && poolData.currentTickIndex < tick.index) {\n      continue;\n    }\n    if (!aToB && poolData.currentTickIndex >= tick.index) {\n      continue;\n    }\n    if (tick === null) {\n      continue;\n    }\n    if ((aToB && sqrtPriceLimit.gt(tick.sqrtPrice)) || (!aToB && sqrtPriceLimit.lt(tick.sqrtPrice))) {\n      targetSqrtPrice = sqrtPriceLimit;\n    } else {\n      targetSqrtPrice = tick.sqrtPrice;\n    }\n\n    const stepResult = computeSwapStep(\n      currentSqrtPrice,\n      targetSqrtPrice,\n      currentLiquidity,\n      remainerAmount,\n      poolData.feeRate,\n      byAmountIn,\n    );\n\n    if (!stepResult.amountIn.eq(ZERO)) {\n      remainerAmount = byAmountIn\n        ? remainerAmount.sub(stepResult.amountIn.add(stepResult.feeAmount))\n        : remainerAmount.sub(stepResult.amountOut);\n    }\n\n    swapResult.amountIn = swapResult.amountIn.add(stepResult.amountIn);\n    swapResult.amountOut = swapResult.amountOut.add(stepResult.amountOut);\n    swapResult.feeAmount = swapResult.feeAmount.add(stepResult.feeAmount);\n    if (stepResult.nextSqrtPrice.eq(tick.sqrtPrice)) {\n      signedLiquidityChange = tick.liquidityNet.mul(new BN(-1));\n\n      if (aToB) {\n        if (MathUtil.is_neg(signedLiquidityChange)) {\n          currentLiquidity = currentLiquidity.add(new BN(asUintN(BigInt(signedLiquidityChange.toString()), 128)));\n        } else {\n          currentLiquidity = currentLiquidity.add(signedLiquidityChange);\n        }\n      } else if (MathUtil.is_neg(signedLiquidityChange)) {\n        currentLiquidity = currentLiquidity.sub(new BN(asUintN(BigInt(signedLiquidityChange.toString()), 128)));\n      } else {\n        currentLiquidity = currentLiquidity.sub(signedLiquidityChange);\n      }\n      currentSqrtPrice = tick.sqrtPrice;\n    } else {\n      currentSqrtPrice = stepResult.nextSqrtPrice;\n    }\n    swapResult.crossTickNum += 1;\n    if (remainerAmount.eq(ZERO)) {\n      break;\n    }\n  }\n  swapResult.amountIn = swapResult.amountIn.add(swapResult.feeAmount);\n  swapResult.nextSqrtPrice = currentSqrtPrice;\n  return swapResult;\n}\n\n/**\n * Estimate liquidity for coin A\n * @param sqrtPriceX - coin A sqrtprice\n * @param sqrtPriceY - coin B sqrtprice\n * @param coinAmount - token amount\n * @return\n */\nexport function estimateLiquidityForCoinA(sqrtPriceX: BN, sqrtPriceY: BN, coinAmount: BN) {\n  const lowerSqrtPriceX64 = BN.min(sqrtPriceX, sqrtPriceY);\n  const upperSqrtPriceX64 = BN.max(sqrtPriceX, sqrtPriceY);\n  const num = MathUtil.fromX64_BN(coinAmount.mul(upperSqrtPriceX64).mul(lowerSqrtPriceX64));\n  const dem = upperSqrtPriceX64.sub(lowerSqrtPriceX64);\n  return num.div(dem);\n}\n\n/**\n * Estimate liquidity for coin B\n * @param sqrtPriceX - coin A sqrtprice\n * @param sqrtPriceY - coin B sqrtprice\n * @param coinAmount - token amount\n * @return\n */\nexport function estimateLiquidityForCoinB(sqrtPriceX: BN, sqrtPriceY: BN, coinAmount: BN) {\n  const lowerSqrtPriceX64 = BN.min(sqrtPriceX, sqrtPriceY);\n  const upperSqrtPriceX64 = BN.max(sqrtPriceX, sqrtPriceY);\n  const delta = upperSqrtPriceX64.sub(lowerSqrtPriceX64);\n  return coinAmount.shln(64).div(delta);\n}\n\nexport class ClmmPoolUtil {\n  /**\n   * Update fee rate.\n   * @param clmm - clmmpool data\n   * @param feeAmount - fee Amount\n   * @param refRate - ref rate\n   * @param protocolFeeRate - protocol fee rate\n   * @param iscoinA - is token A\n   * @returns percentage\n   */\n  static updateFeeRate(clmm: ClmmpoolData, feeAmount: BN, refRate: number, protocolFeeRate: number, iscoinA: boolean) {\n    const protocolFee = MathUtil.checkMulDivCeil(feeAmount, new BN(protocolFeeRate), FEE_RATE_DENOMINATOR, 64);\n    const refFee =\n      refRate === 0 ? ZERO : MathUtil.checkMulDivFloor(feeAmount, new BN(refRate), FEE_RATE_DENOMINATOR, 64);\n    const poolFee = feeAmount.mul(protocolFee).mul(refFee);\n    if (iscoinA) {\n      clmm.feeProtocolCoinA = clmm.feeProtocolCoinA.add(protocolFee);\n    } else {\n      clmm.feeProtocolCoinB = clmm.feeProtocolCoinB.add(protocolFee);\n    }\n    if (poolFee.eq(ZERO) || clmm.liquidity.eq(ZERO)) {\n      return {refFee, clmm};\n    }\n    const growthFee = poolFee.shln(64).div(clmm.liquidity);\n    if (iscoinA) {\n      clmm.feeGrowthGlobalA = clmm.feeGrowthGlobalA.add(growthFee);\n    } else {\n      clmm.feeGrowthGlobalB = clmm.feeGrowthGlobalB.add(growthFee);\n    }\n    return {refFee, clmm};\n  }\n\n  /**\n   * Get token amount fron liquidity.\n   * @param liquidity - liquidity\n   * @param curSqrtPrice - Pool current sqrt price\n   * @param lowerSqrtPrice - position lower sqrt price\n   * @param upperSqrtPrice - position upper sqrt price\n   * @param roundUp - is round up\n   * @returns\n   */\n  static getCoinAmountFromLiquidity(\n    liquidity: BN,\n    curSqrtPrice: BN,\n    lowerSqrtPrice: BN,\n    upperSqrtPrice: BN,\n    roundUp: boolean,\n  ): CoinAmounts {\n    const liq = new Decimal(liquidity.toString());\n    const curSqrtPriceStr = new Decimal(curSqrtPrice.toString());\n    const lowerPriceStr = new Decimal(lowerSqrtPrice.toString());\n    const upperPriceStr = new Decimal(upperSqrtPrice.toString());\n    let coinA;\n    let coinB;\n    if (curSqrtPrice.lt(lowerSqrtPrice)) {\n      coinA = MathUtil.toX64_Decimal(liq).mul(upperPriceStr.sub(lowerPriceStr)).div(lowerPriceStr.mul(upperPriceStr));\n      coinB = new Decimal(0);\n    } else if (curSqrtPrice.lt(upperSqrtPrice)) {\n      coinA = MathUtil.toX64_Decimal(liq)\n        .mul(upperPriceStr.sub(curSqrtPriceStr))\n        .div(curSqrtPriceStr.mul(upperPriceStr));\n\n      coinB = MathUtil.fromX64_Decimal(liq.mul(curSqrtPriceStr.sub(lowerPriceStr)));\n    } else {\n      coinA = new Decimal(0);\n      coinB = MathUtil.fromX64_Decimal(liq.mul(upperPriceStr.sub(lowerPriceStr)));\n    }\n    if (roundUp) {\n      return {\n        coinA: new BN(coinA.ceil().toString()),\n        coinB: new BN(coinB.ceil().toString()),\n      };\n    }\n    return {\n      coinA: new BN(coinA.floor().toString()),\n      coinB: new BN(coinB.floor().toString()),\n    };\n  }\n\n  /**\n   * Estimate liquidity and token amount from one amounts\n   * @param lowerTick - lower tick\n   * @param upperTick - upper tick\n   * @param coinAmount - token amount\n   * @param iscoinA - is token A\n   * @param roundUp - is round up\n   * @param isIncrease - is increase\n   * @param slippage - slippage percentage\n   * @param curSqrtPrice - current sqrt price.\n   * @return IncreaseLiquidityInput\n   */\n  static estLiquidityAndcoinAmountFromOneAmounts(\n    lowerTick: number,\n    upperTick: number,\n    coinAmount: BN,\n    iscoinA: boolean,\n    roundUp: boolean,\n    slippage: number,\n    curSqrtPrice: BN,\n  ): LiquidityInput {\n    const currentTick = TickMath.sqrtPriceX64ToTickIndex(curSqrtPrice);\n    const lowerSqrtPrice = TickMath.tickIndexToSqrtPriceX64(lowerTick);\n    const upperSqrtPrice = TickMath.tickIndexToSqrtPriceX64(upperTick);\n    let liquidity;\n    if (currentTick < lowerTick) {\n      if (!iscoinA) {\n        throw new ClmmpoolsError('lower tick cannot calculate liquidity by coinB', MathErrorCode.NotSupportedThisCoin);\n      }\n      liquidity = estimateLiquidityForCoinA(lowerSqrtPrice, upperSqrtPrice, coinAmount);\n    } else if (currentTick > upperTick) {\n      if (iscoinA) {\n        throw new ClmmpoolsError('upper tick cannot calculate liquidity by coinA', MathErrorCode.NotSupportedThisCoin);\n      }\n      liquidity = estimateLiquidityForCoinB(upperSqrtPrice, lowerSqrtPrice, coinAmount);\n    } else if (iscoinA) {\n      liquidity = estimateLiquidityForCoinA(curSqrtPrice, upperSqrtPrice, coinAmount);\n    } else {\n      liquidity = estimateLiquidityForCoinB(curSqrtPrice, lowerSqrtPrice, coinAmount);\n    }\n    const coinAmounts = ClmmPoolUtil.getCoinAmountFromLiquidity(\n      liquidity,\n      curSqrtPrice,\n      lowerSqrtPrice,\n      upperSqrtPrice,\n      roundUp,\n    );\n    const tokenLimitA = roundUp\n      ? d(coinAmounts.coinA.toString())\n          .mul(1 + slippage)\n          .toString()\n      : d(coinAmounts.coinA.toString())\n          .mul(1 - slippage)\n          .toString();\n\n    const tokenLimitB = roundUp\n      ? d(coinAmounts.coinB.toString())\n          .mul(1 + slippage)\n          .toString()\n      : d(coinAmounts.coinB.toString())\n          .mul(1 - slippage)\n          .toString();\n\n    return {\n      coinAmountA: coinAmounts.coinA,\n      coinAmountB: coinAmounts.coinB,\n      tokenMaxA: roundUp ? new BN(Decimal.ceil(tokenLimitA).toString()) : new BN(Decimal.floor(tokenLimitA).toString()),\n      tokenMaxB: roundUp ? new BN(Decimal.ceil(tokenLimitB).toString()) : new BN(Decimal.floor(tokenLimitB).toString()),\n      liquidityAmount: liquidity,\n      fix_amount_a: iscoinA,\n    };\n  }\n\n  /**\n   * Estimate liquidity from token amounts\n   * @param curSqrtPrice - current sqrt price.\n   * @param lowerTick - lower tick\n   * @param upperTick - upper tick\n   * @param tokenAmount - token amount\n   * @return\n   */\n  static estimateLiquidityFromcoinAmounts(\n    curSqrtPrice: BN,\n    lowerTick: number,\n    upperTick: number,\n    tokenAmount: CoinAmounts,\n  ): BN {\n    if (lowerTick > upperTick) {\n      throw new ClmmpoolsError('lower tick cannot be greater than lower tick', MathErrorCode.InvalidTwoTickIndex);\n    }\n    const currTick = TickMath.sqrtPriceX64ToTickIndex(curSqrtPrice);\n    const lowerSqrtPrice = TickMath.tickIndexToSqrtPriceX64(lowerTick);\n    const upperSqrtPrice = TickMath.tickIndexToSqrtPriceX64(upperTick);\n    if (currTick < lowerTick) {\n      return estimateLiquidityForCoinA(lowerSqrtPrice, upperSqrtPrice, tokenAmount.coinA);\n    }\n    if (currTick >= upperTick) {\n      return estimateLiquidityForCoinB(upperSqrtPrice, lowerSqrtPrice, tokenAmount.coinB);\n    }\n    const estimateLiquidityAmountA = estimateLiquidityForCoinA(curSqrtPrice, upperSqrtPrice, tokenAmount.coinA);\n    const estimateLiquidityAmountB = estimateLiquidityForCoinB(curSqrtPrice, lowerSqrtPrice, tokenAmount.coinB);\n    return BN.min(estimateLiquidityAmountA, estimateLiquidityAmountB);\n  }\n\n  /**\n   * Estimate coin amounts from total amount\n   * @param lowerTick\n   * @param upperTick\n   * @param decimalsA\n   * @param decimalsB\n   * @param curSqrtPrice\n   * @param totalAmount\n   * @param tokenPriceA\n   * @param tokenPriceB\n   * @returns\n   */\n  static estCoinAmountsFromTotalAmount(\n    lowerTick: number,\n    upperTick: number,\n    curSqrtPrice: BN,\n    totalAmount: string,\n    tokenPriceA: string,\n    tokenPriceB: string,\n  ) {\n    const {ratioA, ratioB} = ClmmPoolUtil.calculateDepositRatioFixTokenA(lowerTick, upperTick, curSqrtPrice);\n\n    const amountA = d(totalAmount).mul(ratioA).div(tokenPriceA);\n    const amountB = d(totalAmount).mul(ratioB).div(tokenPriceB);\n\n    return {amountA, amountB};\n  }\n\n  static calculateDepositRatioFixTokenA(lowerTick: number, upperTick: number, curSqrtPrice: BN) {\n    const coinAmountA = new BN(100000000);\n    const {coinAmountB} = ClmmPoolUtil.estLiquidityAndcoinAmountFromOneAmounts(\n      lowerTick,\n      upperTick,\n      coinAmountA,\n      true,\n      true,\n      0,\n      curSqrtPrice,\n    );\n    const currPrice = TickMath.sqrtPriceX64ToPrice(curSqrtPrice, 0, 0);\n    const transformAmountB = d(coinAmountA.toString()).mul(currPrice);\n    const totalAmount = transformAmountB.add(coinAmountB.toString());\n    const ratioA = transformAmountB.div(totalAmount);\n    const ratioB = d(coinAmountB.toString()).div(totalAmount);\n\n    return {ratioA, ratioB};\n  }\n}\n","import Decimal from 'decimal.js';\n\nexport function d(value?: Decimal.Value): Decimal.Instance {\n  if (Decimal.isDecimal(value)) {\n    return value as Decimal;\n  }\n\n  return new Decimal(value === undefined ? 0 : value);\n}\n\nexport function decimalsMultiplier(decimals?: Decimal.Value): Decimal.Instance {\n  return d(10).pow(d(decimals).abs());\n}\n","import {d, decimalsMultiplier} from './numbers';\n\n/**\n * Converts an amount to a decimal value, based on the number of decimals specified.\n * @param  {number | string} amount - The amount to convert to decimal.\n * @param  {number | string} decimals - The number of decimals to use in the conversion.\n * @returns {number} - Returns the converted amount as a number.\n */\nexport function toDecimalsAmount(amount: number | string, decimals: number | string): number {\n  const mul = decimalsMultiplier(d(decimals));\n\n  return Number(d(amount).mul(mul));\n}\n\n/**\n * Converts a bigint to an unsigned integer of the specified number of bits.\n * @param {bigint} int - The bigint to convert.\n * @param {number} bits - The number of bits to use in the conversion. Defaults to 32 bits.\n * @returns {string} - Returns the converted unsigned integer as a string.\n */\nexport function asUintN(int: bigint, bits = 32) {\n  return BigInt.asUintN(bits, BigInt(int)).toString();\n}\n\n/**\n * Converts a bigint to a signed integer of the specified number of bits.\n * @param {bigint} int - The bigint to convert.\n * @param {number} bits - The number of bits to use in the conversion. Defaults to 32 bits.\n * @returns {number} - Returns the converted signed integer as a number.\n */\nexport function asIntN(int: bigint, bits = 32) {\n  return Number(BigInt.asIntN(bits, BigInt(int)));\n}\n","import Decimal from 'decimal.js';\n\nDecimal.config({\n  precision: 64,\n  rounding: Decimal.ROUND_DOWN,\n  toExpNeg: -64,\n  toExpPos: 64,\n});\n\nexport default Decimal;\n","export enum MathErrorCode {\n  IntegerDowncastOverflow = `IntegerDowncastOverflow`,\n  MulOverflow = `MultiplicationOverflow`,\n  MulDivOverflow = `MulDivOverflow`,\n  MulShiftRightOverflow = `MulShiftRightOverflow`,\n  MulShiftLeftOverflow = `MulShiftLeftOverflow`,\n  DivideByZero = `DivideByZero`,\n  UnsignedIntegerOverflow = `UnsignedIntegerOverflow`,\n  InvalidCoinAmount = `InvalidCoinAmount`,\n  InvalidLiquidityAmount = `InvalidLiquidityAmount`,\n  InvalidReserveAmount = `InvalidReserveAmount`,\n  InvalidSqrtPrice = `InvalidSqrtPrice`,\n  NotSupportedThisCoin = `NotSupportedThisCoin`,\n  InvalidTwoTickIndex = `InvalidTwoTickIndex`,\n}\n\nexport enum CoinErrorCode {\n  CoinAmountMaxExceeded = `CoinAmountMaxExceeded`,\n  CoinAmountMinSubceeded = `CoinAmountMinSubceeded `,\n  SqrtPriceOutOfBounds = `SqrtPriceOutOfBounds`,\n}\n\nexport enum SwapErrorCode {\n  InvalidSqrtPriceLimitDirection = `InvalidSqrtPriceLimitDirection`,\n  ZeroTradableAmount = `ZeroTradableAmount`,\n  AmountOutBelowMinimum = `AmountOutBelowMinimum`,\n  AmountInAboveMaximum = `AmountInAboveMaximum`,\n  NextTickNotFound = `NextTickNoutFound`,\n  TickArraySequenceInvalid = `TickArraySequenceInvalid`,\n  TickArrayCrossingAboveMax = `TickArrayCrossingAboveMax`,\n  TickArrayIndexNotInitialized = `TickArrayIndexNotInitialized`,\n  ParamsLengthNotEqual = `ParamsLengthNotEqual`,\n}\n\nexport enum PositionErrorCode {\n  InvalidTickEvent = `InvalidTickEvent`,\n  InvalidPositionObject = `InvalidPositionObject`,\n  InvalidPositionRewardObject = `InvalidPositionRewardObject`,\n}\n\nexport enum PoolErrorCode {\n  InvalidCoinTypeSequence = `InvalidCoinTypeSequence`,\n  InvalidTickIndex = `InvalidTickIndex`,\n  InvalidPoolObject = `InvalidPoolObject`,\n  InvalidTickObjectId = `InvalidTickObjectId`,\n  InvalidTickObject = `InvalidTickObject`,\n  InvalidTickFields = `InvalidTickFields`,\n}\n\nexport enum PartnerErrorCode {\n  NotFoundPartnerObject = `NotFoundPartnerObject`,\n  InvalidParnterRefFeeFields = `InvalidParnterRefFeeFields`,\n}\n\nexport enum ConfigErrorCode {\n  InvalidConfig = `InvalidConfig`,\n  InvalidConfigHandle = `InvalidConfigHandle`,\n  InvalidSimulateAccount = `InvalidSimulateAccount`,\n}\n\nexport enum UtilsErrorCode {\n  InvalidSendAddress = `InvalidSendAddress`,\n  InvalidRecipientAddress = `InvalidRecipientAddress`,\n  InvalidRecipientAndAmountLength = `InvalidRecipientAndAmountLength`,\n  InsufficientBalance = `InsufficientBalance`,\n  InvalidTarget = `InvalidTarget`,\n  InvalidTransactionBuilder = `InvalidTransactionBuilder`,\n}\n\nexport enum RouterErrorCode {\n  InvalidCoin = `InvalidCoin`,\n  NotFoundPath = `NotFoundPath`,\n  NoDowngradeNeedParams = `NoDowngradeNeedParams`,\n  InvalidSwapCountUrl = `InvalidSwapCountUrl`,\n  InvalidTransactionBuilder = `InvalidTransactionBuilder`,\n}\n\nexport enum TypesErrorCode {\n  InvalidType = `InvalidType`,\n}\n\nexport type ClmmpoolsErrorCode =\n  | MathErrorCode\n  | SwapErrorCode\n  | CoinErrorCode\n  | PoolErrorCode\n  | PositionErrorCode\n  | PartnerErrorCode\n  | ConfigErrorCode\n  | UtilsErrorCode\n  | RouterErrorCode\n  | TypesErrorCode;\n\nexport class ClmmpoolsError extends Error {\n  override message: string;\n\n  errorCode?: ClmmpoolsErrorCode;\n\n  constructor(message: string, errorCode?: ClmmpoolsErrorCode) {\n    super(message);\n    this.message = message;\n    this.errorCode = errorCode;\n  }\n\n  static isClmmpoolsErrorCode(e: any, code: ClmmpoolsErrorCode): boolean {\n    return e instanceof ClmmpoolsError && e.errorCode === code;\n  }\n}\n","import BN from 'bn.js';\n\n/**\n * The maximum tick index supported by the clmmpool program.\n * @category Constants\n */\nexport const MAX_TICK_INDEX = 443636;\n\n/**\n * The minimum tick index supported by the clmmpool program.\n * @category Constants\n */\nexport const MIN_TICK_INDEX = -443636;\n\n/**\n * The maximum sqrt-price supported by the clmmpool program.\n * @category Constants\n */\nexport const MAX_SQRT_PRICE = '79226673515401279992447579055';\n\n/**\n * The number of initialized ticks that a tick-array account can hold.\n * @category Constants\n */\nexport const TICK_ARRAY_SIZE = 64;\n\n/**\n * The minimum sqrt-price supported by the clmmpool program.\n * @category Constants\n */\nexport const MIN_SQRT_PRICE = '4295048016';\n\n/**\n * The denominator which the fee rate is divided on.\n * @category Constants\n */\nexport const FEE_RATE_DENOMINATOR = new BN(1_000_000);\n","import BN from 'bn.js';\nimport {MAX_SQRT_PRICE, MIN_SQRT_PRICE} from '../types/constants';\nimport {MathUtil, U64_MAX, ZERO} from './utils';\n\nexport class SwapUtils {\n  /**\n   * Get the default sqrt price limit for a swap.\n   *\n   * @param a2b - true if the swap is A to B, false if the swap is B to A.\n   * @returns The default sqrt price limit for the swap.\n   */\n  static getDefaultSqrtPriceLimit(a2b: boolean): BN {\n    return new BN(a2b ? MIN_SQRT_PRICE : MAX_SQRT_PRICE);\n  }\n\n  /**\n   * Get the default values for the otherAmountThreshold in a swap.\n   *\n   * @param amountSpecifiedIsInput - The direction of a swap\n   * @returns The default values for the otherAmountThreshold parameter in a swap.\n   */\n  static getDefaultOtherAmountThreshold(amountSpecifiedIsInput: boolean): BN {\n    return amountSpecifiedIsInput ? ZERO : U64_MAX;\n  }\n}\n\n/**\n * Get lower sqrt price from token A.\n *\n * @param amount - The amount of tokens the user wanted to swap from.\n * @param liquidity - The liquidity of the pool.\n * @param sqrtPriceX64 - The sqrt price of the pool.\n * @returns LowesqrtPriceX64\n */\nexport function getLowerSqrtPriceFromCoinA(amount: BN, liquidity: BN, sqrtPriceX64: BN): BN {\n  const numerator = liquidity.mul(sqrtPriceX64).shln(64);\n  const denominator = liquidity.shln(64).add(amount.mul(sqrtPriceX64));\n\n  // always round up\n  return MathUtil.divRoundUp(numerator, denominator);\n}\n\n/**\n * Get upper sqrt price from token A.\n *\n * @param amount - The amount of tokens the user wanted to swap from.\n * @param liquidity - The liquidity of the pool.\n * @param sqrtPriceX64 - The sqrt price of the pool.\n * @returns LowesqrtPriceX64\n */\nexport function getUpperSqrtPriceFromCoinA(amount: BN, liquidity: BN, sqrtPriceX64: BN): BN {\n  const numerator = liquidity.mul(sqrtPriceX64).shln(64);\n  const denominator = liquidity.shln(64).sub(amount.mul(sqrtPriceX64));\n\n  // always round up\n  return MathUtil.divRoundUp(numerator, denominator);\n}\n\n/**\n * Get lower sqrt price from coin B.\n *\n * @param amount - The amount of coins the user wanted to swap from.\n * @param liquidity - The liquidity of the pool.\n * @param sqrtPriceX64 - The sqrt price of the pool.\n * @returns LowesqrtPriceX64\n */\nexport function getLowerSqrtPriceFromCoinB(amount: BN, liquidity: BN, sqrtPriceX64: BN): BN {\n  // always round down(rounding up a negative number)\n  return sqrtPriceX64.sub(MathUtil.divRoundUp(amount.shln(64), liquidity));\n}\n\n/**\n * Get upper sqrt price from coin B.\n *\n * @param amount - The amount of coins the user wanted to swap from.\n * @param liquidity - The liquidity of the pool.\n * @param sqrtPriceX64 - The sqrt price of the pool.\n * @returns LowesqrtPriceX64\n */\nexport function getUpperSqrtPriceFromCoinB(amount: BN, liquidity: BN, sqrtPriceX64: BN): BN {\n  // always round down (rounding up a negative number)\n  return sqrtPriceX64.add(amount.shln(64).div(liquidity));\n}\n","import BN from 'bn.js';\nimport Decimal from '../utils/decimal';\n\nimport {ClmmpoolsError, MathErrorCode} from '../errors/errors';\n\nexport const ZERO = new BN(0);\n\nexport const ONE = new BN(1);\n\nexport const TWO = new BN(2);\n\nexport const U128 = TWO.pow(new BN(128));\n\nexport const U64_MAX = TWO.pow(new BN(64)).sub(ONE);\n\nexport const U128_MAX = TWO.pow(new BN(128)).sub(ONE);\n\n/**\n * @category MathUtil\n */\nexport class MathUtil {\n  static toX64_BN(num: BN): BN {\n    return num.mul(new BN(2).pow(new BN(64)));\n  }\n\n  static toX64_Decimal(num: Decimal): Decimal {\n    return num.mul(Decimal.pow(2, 64));\n  }\n\n  static toX64(num: Decimal): BN {\n    return new BN(num.mul(Decimal.pow(2, 64)).floor().toFixed());\n  }\n\n  static fromX64(num: BN): Decimal {\n    return new Decimal(num.toString()).mul(Decimal.pow(2, -64));\n  }\n\n  static fromX64_Decimal(num: Decimal): Decimal {\n    return num.mul(Decimal.pow(2, -64));\n  }\n\n  static fromX64_BN(num: BN): BN {\n    return num.div(new BN(2).pow(new BN(64)));\n  }\n\n  static shiftRightRoundUp(n: BN): BN {\n    let result = n.shrn(64);\n\n    if (n.mod(U64_MAX).gt(ZERO)) {\n      result = result.add(ONE);\n    }\n\n    return result;\n  }\n\n  static divRoundUp(n0: BN, n1: BN): BN {\n    const hasRemainder = !n0.mod(n1).eq(ZERO);\n    if (hasRemainder) {\n      return n0.div(n1).add(new BN(1));\n    }\n    return n0.div(n1);\n  }\n\n  static subUnderflowU128(n0: BN, n1: BN): BN {\n    if (n0.lt(n1)) {\n      return n0.sub(n1).add(U128_MAX);\n    }\n\n    return n0.sub(n1);\n  }\n\n  static checkUnsignedSub(n0: BN, n1: BN): BN {\n    const n = n0.sub(n1);\n    if (n.isNeg()) {\n      throw new ClmmpoolsError('Unsigned integer sub overflow', MathErrorCode.UnsignedIntegerOverflow);\n    }\n    return n;\n  }\n\n  static checkMul(n0: BN, n1: BN, limit: number): BN {\n    const n = n0.mul(n1);\n    if (this.isOverflow(n, limit)) {\n      throw new ClmmpoolsError('Multiplication overflow', MathErrorCode.MulOverflow);\n    }\n    return n;\n  }\n\n  static checkMulDivFloor(n0: BN, n1: BN, denom: BN, limit: number): BN {\n    if (denom.eq(ZERO)) {\n      throw new ClmmpoolsError('Devide by zero', MathErrorCode.DivideByZero);\n    }\n    const n = n0.mul(n1).div(denom);\n    if (this.isOverflow(n, limit)) {\n      throw new ClmmpoolsError('Multiplication div overflow', MathErrorCode.MulDivOverflow);\n    }\n    return n;\n  }\n\n  static checkMulDivCeil(n0: BN, n1: BN, denom: BN, limit: number): BN {\n    if (denom.eq(ZERO)) {\n      throw new ClmmpoolsError('Devide by zero', MathErrorCode.DivideByZero);\n    }\n    const n = n0.mul(n1).add(denom.sub(ONE)).div(denom);\n    if (this.isOverflow(n, limit)) {\n      throw new ClmmpoolsError('Multiplication div overflow', MathErrorCode.MulDivOverflow);\n    }\n    return n;\n  }\n\n  static checkMulDivRound(n0: BN, n1: BN, denom: BN, limit: number): BN {\n    if (denom.eq(ZERO)) {\n      throw new ClmmpoolsError('Devide by zero', MathErrorCode.DivideByZero);\n    }\n    const n = n0.mul(n1.add(denom.shrn(1))).div(denom);\n    if (this.isOverflow(n, limit)) {\n      throw new ClmmpoolsError('Multiplication div overflow', MathErrorCode.MulDivOverflow);\n    }\n    return n;\n  }\n\n  static checkMulShiftRight(n0: BN, n1: BN, shift: number, limit: number): BN {\n    const n = n0.mul(n1).div(new BN(2).pow(new BN(shift)));\n    // const n = n0.mul(n1).shrn(shift)\n    if (this.isOverflow(n, limit)) {\n      throw new ClmmpoolsError('Multiplication shift right overflow', MathErrorCode.MulShiftRightOverflow);\n    }\n    return n;\n  }\n\n  static checkMulShiftRight64RoundUpIf(n0: BN, n1: BN, limit: number, roundUp: boolean): BN {\n    const p = n0.mul(n1);\n    const shoudRoundUp = roundUp && p.and(U64_MAX).gt(ZERO);\n    const result = shoudRoundUp ? p.shrn(64).add(ONE) : p.shrn(64);\n    if (this.isOverflow(result, limit)) {\n      throw new ClmmpoolsError('Multiplication shift right overflow', MathErrorCode.MulShiftRightOverflow);\n    }\n    return result;\n  }\n\n  static checkMulShiftLeft(n0: BN, n1: BN, shift: number, limit: number): BN {\n    const n = n0.mul(n1).shln(shift);\n    if (this.isOverflow(n, limit)) {\n      throw new ClmmpoolsError('Multiplication shift left overflow', MathErrorCode.MulShiftLeftOverflow);\n    }\n    return n;\n  }\n\n  static checkDivRoundUpIf(n0: BN, n1: BN, roundUp: boolean): BN {\n    if (n1.eq(ZERO)) {\n      throw new ClmmpoolsError('Devide by zero', MathErrorCode.DivideByZero);\n    }\n    if (roundUp) {\n      return this.divRoundUp(n0, n1);\n    }\n    return n0.div(n1);\n  }\n\n  static isOverflow(n: BN, bit: number): boolean {\n    return n.gte(TWO.pow(new BN(bit)));\n  }\n\n  static sign(v: BN): number {\n    const signBit = v.testn(127) ? 1 : 0;\n    return signBit;\n  }\n\n  static is_neg(v: BN): boolean {\n    return this.sign(v) === 1;\n  }\n\n  static abs_u128(v: BN): BN {\n    if (v.gt(ZERO)) {\n      return v;\n    }\n    return this.u128_neg(v.subn(1));\n  }\n\n  static u128_neg(v: BN): BN {\n    return v.uxor(new BN('ffffffffffffffffffffffffffffffff', 16));\n  }\n\n  static neg(v: BN): BN {\n    if (this.is_neg(v)) {\n      return v.abs();\n    }\n    return this.neg_from(v);\n  }\n\n  static abs(v: BN): BN {\n    if (this.sign(v) === 0) {\n      return v;\n    }\n    return this.u128_neg(v.sub(new BN(1)));\n  }\n\n  static neg_from(v: BN): BN {\n    if (v.eq(ZERO)) {\n      return v;\n    }\n    return this.u128_neg(v).add(new BN(1)).or(new BN(1).shln(127));\n  }\n}\n","/* eslint-disable no-bitwise */\nimport BN from 'bn.js';\nimport {asIntN, d} from '../utils';\nimport {MAX_SQRT_PRICE, MIN_SQRT_PRICE} from '../types/constants';\nimport Decimal from '../utils/decimal';\nimport {MathUtil} from './utils';\nimport {ClmmpoolsError, MathErrorCode} from '../errors/errors';\n\nconst BIT_PRECISION = 14;\nconst LOG_B_2_X32 = '59543866431248';\nconst LOG_B_P_ERR_MARGIN_LOWER_X64 = '184467440737095516';\nconst LOG_B_P_ERR_MARGIN_UPPER_X64 = '15793534762490258745';\nconst TICK_BOUND = 443636;\n\nfunction signedShiftLeft(n0: BN, shiftBy: number, bitWidth: number) {\n  const twosN0 = n0.toTwos(bitWidth).shln(shiftBy);\n  twosN0.imaskn(bitWidth + 1);\n  return twosN0.fromTwos(bitWidth);\n}\n\nfunction signedShiftRight(n0: BN, shiftBy: number, bitWidth: number) {\n  const twoN0 = n0.toTwos(bitWidth).shrn(shiftBy);\n  twoN0.imaskn(bitWidth - shiftBy + 1);\n  return twoN0.fromTwos(bitWidth - shiftBy);\n}\n\nfunction tickIndexToSqrtPricePositive(tick: number) {\n  let ratio: BN;\n\n  if ((tick & 1) !== 0) {\n    ratio = new BN('79232123823359799118286999567');\n  } else {\n    ratio = new BN('79228162514264337593543950336');\n  }\n\n  if ((tick & 2) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('79236085330515764027303304731')), 96, 256);\n  }\n  if ((tick & 4) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('79244008939048815603706035061')), 96, 256);\n  }\n  if ((tick & 8) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('79259858533276714757314932305')), 96, 256);\n  }\n  if ((tick & 16) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('79291567232598584799939703904')), 96, 256);\n  }\n  if ((tick & 32) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('79355022692464371645785046466')), 96, 256);\n  }\n  if ((tick & 64) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('79482085999252804386437311141')), 96, 256);\n  }\n  if ((tick & 128) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('79736823300114093921829183326')), 96, 256);\n  }\n  if ((tick & 256) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('80248749790819932309965073892')), 96, 256);\n  }\n  if ((tick & 512) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('81282483887344747381513967011')), 96, 256);\n  }\n  if ((tick & 1024) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('83390072131320151908154831281')), 96, 256);\n  }\n  if ((tick & 2048) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('87770609709833776024991924138')), 96, 256);\n  }\n  if ((tick & 4096) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('97234110755111693312479820773')), 96, 256);\n  }\n  if ((tick & 8192) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('119332217159966728226237229890')), 96, 256);\n  }\n  if ((tick & 16384) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('179736315981702064433883588727')), 96, 256);\n  }\n  if ((tick & 32768) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('407748233172238350107850275304')), 96, 256);\n  }\n  if ((tick & 65536) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('2098478828474011932436660412517')), 96, 256);\n  }\n  if ((tick & 131072) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('55581415166113811149459800483533')), 96, 256);\n  }\n  if ((tick & 262144) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('38992368544603139932233054999993551')), 96, 256);\n  }\n\n  return signedShiftRight(ratio, 32, 256);\n}\n\nfunction tickIndexToSqrtPriceNegative(tickIndex: number) {\n  const tick = Math.abs(tickIndex);\n  let ratio: BN;\n\n  if ((tick & 1) !== 0) {\n    ratio = new BN('18445821805675392311');\n  } else {\n    ratio = new BN('18446744073709551616');\n  }\n\n  if ((tick & 2) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('18444899583751176498')), 64, 256);\n  }\n  if ((tick & 4) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('18443055278223354162')), 64, 256);\n  }\n  if ((tick & 8) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('18439367220385604838')), 64, 256);\n  }\n  if ((tick & 16) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('18431993317065449817')), 64, 256);\n  }\n  if ((tick & 32) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('18417254355718160513')), 64, 256);\n  }\n  if ((tick & 64) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('18387811781193591352')), 64, 256);\n  }\n  if ((tick & 128) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('18329067761203520168')), 64, 256);\n  }\n  if ((tick & 256) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('18212142134806087854')), 64, 256);\n  }\n  if ((tick & 512) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('17980523815641551639')), 64, 256);\n  }\n  if ((tick & 1024) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('17526086738831147013')), 64, 256);\n  }\n  if ((tick & 2048) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('16651378430235024244')), 64, 256);\n  }\n  if ((tick & 4096) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('15030750278693429944')), 64, 256);\n  }\n  if ((tick & 8192) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('12247334978882834399')), 64, 256);\n  }\n  if ((tick & 16384) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('8131365268884726200')), 64, 256);\n  }\n  if ((tick & 32768) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('3584323654723342297')), 64, 256);\n  }\n  if ((tick & 65536) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('696457651847595233')), 64, 256);\n  }\n  if ((tick & 131072) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('26294789957452057')), 64, 256);\n  }\n  if ((tick & 262144) !== 0) {\n    ratio = signedShiftRight(ratio.mul(new BN('37481735321082')), 64, 256);\n  }\n\n  return ratio;\n}\n\nexport class TickMath {\n  static priceToSqrtPriceX64(price: Decimal, decimalsA: number, decimalsB: number): BN {\n    return MathUtil.toX64(price.mul(Decimal.pow(10, decimalsB - decimalsA)).sqrt());\n  }\n\n  static sqrtPriceX64ToPrice(sqrtPriceX64: BN, decimalsA: number, decimalsB: number): Decimal {\n    return MathUtil.fromX64(sqrtPriceX64)\n      .pow(2)\n      .mul(Decimal.pow(10, decimalsA - decimalsB));\n  }\n\n  static tickIndexToSqrtPriceX64(tickIndex: number): BN {\n    if (tickIndex > 0) {\n      return new BN(tickIndexToSqrtPricePositive(tickIndex));\n    }\n    return new BN(tickIndexToSqrtPriceNegative(tickIndex));\n  }\n\n  static sqrtPriceX64ToTickIndex(sqrtPriceX64: BN): number {\n    if (sqrtPriceX64.gt(new BN(MAX_SQRT_PRICE)) || sqrtPriceX64.lt(new BN(MIN_SQRT_PRICE))) {\n      throw new ClmmpoolsError(\n        'Provided sqrtPrice is not within the supported sqrtPrice range.',\n        MathErrorCode.InvalidSqrtPrice,\n      );\n    }\n\n    const msb = sqrtPriceX64.bitLength() - 1;\n    const adjustedMsb = new BN(msb - 64);\n    const log2pIntegerX32 = signedShiftLeft(adjustedMsb, 32, 128);\n\n    let bit = new BN('8000000000000000', 'hex');\n    let precision = 0;\n    let log2pFractionX64 = new BN(0);\n\n    let r = msb >= 64 ? sqrtPriceX64.shrn(msb - 63) : sqrtPriceX64.shln(63 - msb);\n\n    while (bit.gt(new BN(0)) && precision < BIT_PRECISION) {\n      r = r.mul(r);\n      const rMoreThanTwo = r.shrn(127);\n      r = r.shrn(63 + rMoreThanTwo.toNumber());\n      log2pFractionX64 = log2pFractionX64.add(bit.mul(rMoreThanTwo));\n      bit = bit.shrn(1);\n      precision += 1;\n    }\n\n    const log2pFractionX32 = log2pFractionX64.shrn(32);\n\n    const log2pX32 = log2pIntegerX32.add(log2pFractionX32);\n    const logbpX64 = log2pX32.mul(new BN(LOG_B_2_X32));\n\n    const tickLow = signedShiftRight(logbpX64.sub(new BN(LOG_B_P_ERR_MARGIN_LOWER_X64)), 64, 128).toNumber();\n    const tickHigh = signedShiftRight(logbpX64.add(new BN(LOG_B_P_ERR_MARGIN_UPPER_X64)), 64, 128).toNumber();\n\n    if (tickLow === tickHigh) {\n      return tickLow;\n    }\n    const derivedTickHighSqrtPriceX64 = TickMath.tickIndexToSqrtPriceX64(tickHigh);\n    if (derivedTickHighSqrtPriceX64.lte(sqrtPriceX64)) {\n      return tickHigh;\n    }\n    return tickLow;\n  }\n\n  static tickIndexToPrice(tickIndex: number, decimalsA: number, decimalsB: number): Decimal {\n    return TickMath.sqrtPriceX64ToPrice(TickMath.tickIndexToSqrtPriceX64(tickIndex), decimalsA, decimalsB);\n  }\n\n  static priceToTickIndex(price: Decimal, decimalsA: number, decimalsB: number): number {\n    return TickMath.sqrtPriceX64ToTickIndex(TickMath.priceToSqrtPriceX64(price, decimalsA, decimalsB));\n  }\n\n  static priceToInitializableTickIndex(\n    price: Decimal,\n    decimalsA: number,\n    decimalsB: number,\n    tickSpacing: number,\n  ): number {\n    return TickMath.getInitializableTickIndex(TickMath.priceToTickIndex(price, decimalsA, decimalsB), tickSpacing);\n  }\n\n  static getInitializableTickIndex(tickIndex: number, tickSpacing: number): number {\n    return tickIndex - (tickIndex % tickSpacing);\n  }\n\n  /**\n   *\n   * @param tickIndex\n   * @param tickSpacing\n   * @returns\n   */\n  static getNextInitializableTickIndex(tickIndex: number, tickSpacing: number) {\n    return TickMath.getInitializableTickIndex(tickIndex, tickSpacing) + tickSpacing;\n  }\n\n  static getPrevInitializableTickIndex(tickIndex: number, tickSpacing: number) {\n    return TickMath.getInitializableTickIndex(tickIndex, tickSpacing) - tickSpacing;\n  }\n}\n\nexport function getTickDataFromUrlData(ticks: any) {\n  const tickdatas: any[] = [];\n  for (const tick of ticks) {\n    const td: any = {\n      objectId: tick.objectId,\n      index: Number(asIntN(BigInt(tick.index)).toString()),\n      sqrtPrice: tick.sqrtPrice,\n      liquidityNet: new BN(BigInt.asIntN(128, BigInt(BigInt(tick.liquidityNet.toString()))).toString()),\n      liquidityGross: tick.liquidityGross,\n      feeGrowthOutsideA: tick.feeGrowthOutsideA,\n      feeGrowthOutsideB: tick.feeGrowthOutsideB,\n      rewardersGrowthOutside: [\n        new BN(tick.rewardersGrowthOutside[0]),\n        new BN(tick.rewardersGrowthOutside[1]),\n        new BN(tick.rewardersGrowthOutside[2]),\n      ],\n    };\n    tickdatas.push(td);\n  }\n  return tickdatas;\n}\n\nexport function tickScore(tickIndex: number) {\n  return d(tickIndex).add(d(TICK_BOUND));\n}\n","import { TransactionBlock } from \"@mysten/sui.js\";\nimport {\n  ADD_LIQUIDITY_V3,\n  CLOCK_ID,\n  FUNCTION,\n  MAXU64,\n  MODULE,\n} from \"../../constants\";\n\nexport const getTxCollectRewardLiquidV3 = async (\n  rewardType: string[],\n  positionObjectId: string,\n  account: string,\n  inheritTx?: TransactionBlock\n) => {\n  const tx = inheritTx ?? new TransactionBlock();\n  const [coinReward] = tx.moveCall({\n    target: `${ADD_LIQUIDITY_V3.CLMM_PACKAGE}::${MODULE.POSITION_MANAGER}::${FUNCTION.COLLECT_POOL_REWARD}`,\n    typeArguments: rewardType,\n    arguments: [\n      tx.object(ADD_LIQUIDITY_V3.POOL_REGISTRY_OBJ),\n      tx.object(positionObjectId),\n      tx.pure(MAXU64),\n      tx.object(ADD_LIQUIDITY_V3.VERSIONED_OBJ),\n      tx.object(CLOCK_ID),\n    ],\n  });\n  return tx.transferObjects([coinReward], tx.pure(account));\n};\n","import { TransactionBlock } from \"@mysten/sui.js\";\nimport {\n  ADD_LIQUIDITY_V3,\n  CLOCK_ID,\n  FUNCTION,\n  MAXU64,\n  MODULE,\n} from \"../../constants\";\nimport { CoinMetadata } from \"../../types\";\n//Collect Liquid incase user proceed transaction remove on chain using contract instead of using UI\nexport const getTxCollectLiquidV3 = async (\n  coinX: CoinMetadata,\n  coinY: CoinMetadata,\n  positionObjectId: string,\n  account: string,\n  inheritTx?: TransactionBlock,\n  amountX?: string,\n  amountY?: string\n) => {\n  const tx = inheritTx ?? new TransactionBlock();\n  const [coinXOut, coinYOut] = tx.moveCall({\n    target: `${ADD_LIQUIDITY_V3.CLMM_PACKAGE}::${MODULE.POSITION_MANAGER}::${FUNCTION.COLLECT}`,\n    typeArguments: [coinX.type, coinY.type],\n    arguments: [\n      tx.object(ADD_LIQUIDITY_V3.POOL_REGISTRY_OBJ),\n      tx.object(positionObjectId),\n      tx.pure(amountX ?? MAXU64),\n      tx.pure(amountY ?? MAXU64),\n      tx.object(ADD_LIQUIDITY_V3.VERSIONED_OBJ),\n      tx.object(CLOCK_ID),\n    ],\n  });\n  tx.transferObjects([coinXOut, coinYOut], tx.pure(account));\n  return tx;\n};\n","import { TransactionBlock } from \"@mysten/sui.js\";\nimport { ADD_LIQUIDITY_V3, provider } from \"../../constants\";\nimport { CoinMetadata, IFeeTierV3 } from \"../../types\";\nimport { getTxIncreasePositionLiquidV3 } from \"./getTxIncreasePositionLiquidV3\";\nimport { getTxCreatePoolLiquidV3 } from \"./getTxCreatePoolLiquidV3\";\nimport { getTxOpenPositionLiquidV3 } from \"./getTxOpenPositionLiquidV3\";\nimport { getListPoolLiquidV3 } from \"./getListPoolLiquidV3\";\nimport { asIntN } from \"./utils\";\n\nconst getI32Object = (tickIndex: number, tx: TransactionBlock) => {\n  return tx.moveCall({\n    target: `${ADD_LIQUIDITY_V3.CLMM_PACKAGE}::i32::${\n      tickIndex < 0 ? \"neg_from\" : \"from\"\n    }`,\n    typeArguments: [],\n    arguments: [tx.pure(Math.abs(tickIndex))],\n  });\n};\n\nexport const buildTxAddLiquidV3 = async (\n  coinX: CoinMetadata,\n  coinY: CoinMetadata,\n  slippage: string,\n  fee: IFeeTierV3,\n  lowerTick: number,\n  upperTick: number,\n  amountX: string,\n  amountY: string,\n  account: string\n) => {\n  const tx = new TransactionBlock();\n  const dataPools = await getListPoolLiquidV3();\n  const poolId = dataPools.find(\n    (item) =>\n      item.typeCoinX === coinX.type &&\n      item.typeCoinY === coinY.type &&\n      item.feeRate === fee.valueDecimal + \"\"\n  )?.id;\n  if (!poolId) {\n    const resPool = await provider.getObject({\n      id: poolId,\n      options: {\n        showContent: true,\n      },\n    });\n    (resPool.data.content as any).fields;\n    const currentTick = asIntN(\n      (resPool.data.content as any).fields?.tick_index?.fields?.[\"bits\"]\n    );\n    getTxCreatePoolLiquidV3(coinX.type, coinY.type, currentTick, fee, tx);\n  }\n  const lowerTickIndex = getI32Object(lowerTick, tx);\n  const upperTickIndex = getI32Object(upperTick, tx);\n\n  const position = await getTxOpenPositionLiquidV3(\n    fee,\n    coinX.type,\n    coinY.type,\n    lowerTickIndex,\n    upperTickIndex,\n    tx\n  );\n  await getTxIncreasePositionLiquidV3(\n    coinX,\n    coinY,\n    amountX,\n    amountY,\n    account,\n    position,\n    slippage,\n    tx\n  );\n  tx.transferObjects([position], tx.pure(account));\n  return tx;\n};\n","import { TransactionArgument, TransactionBlock } from \"@mysten/sui.js\";\nimport { getCoinOjectIdsByAmount } from \"./getCoinOjectIdsByAmount\";\nimport { BigNumb } from \"../../BigNumber\";\nimport { getSuiCoinForTx } from \"./getSuiCoinForTx\";\nimport { SUI_TYPE } from \"../../constants\";\n\nexport const handleGetCoinAmount = async (\n  amount: number | string,\n  account: string,\n  coinType: string,\n  inheritTx?: TransactionBlock\n): Promise<{ tx: TransactionBlock; coin: string | TransactionArgument }> => {\n  const tx = inheritTx ?? new TransactionBlock();\n  const bigintAmount = BigNumb(amount).toFixed(0);\n  const { objectIds, balance, objectCoins } = await getCoinOjectIdsByAmount(\n    account,\n    bigintAmount,\n    coinType\n  );\n  if (coinType === SUI_TYPE) {\n    return await getSuiCoinForTx(objectCoins, amount, tx);\n  }\n  //handle merge and split other coins\n  let coinObjectId: any = objectIds[0];\n  if (objectIds.length > 1) {\n    tx.mergeCoins(\n      tx.object(coinObjectId),\n      objectIds.slice(1).map((item) => tx.object(item))\n    );\n  }\n  const splitAmount = BigNumb(balance).minus(bigintAmount).toFixed();\n  if (BigNumb(splitAmount).isGreaterThan(0)) {\n    // split correct amount to swap\n    const [coin] = tx.splitCoins(tx.object(coinObjectId), [\n      tx.pure(splitAmount),\n    ]);\n    tx.transferObjects([coin], tx.pure(account));\n  }\n\n  return { tx, coin: coinObjectId };\n};\n","import { CoinStruct, PaginatedCoins } from \"@mysten/sui.js\";\nimport { provider } from \"../../constants\";\nimport { orderByKey } from \"../../utils\";\nimport { BigNumb } from \"../../BigNumber\";\n\nexport const getCoinOjectIdsByAmount = async (\n  address: string,\n  amount: string,\n  coinType: string\n): Promise<{\n  objectIds: string[];\n  objectCoins: CoinStruct[];\n  balance: string;\n}> => {\n  let coinBalances: CoinStruct[] = [];\n  let hasNextPage = true;\n  let nextCursor = undefined;\n  while (hasNextPage) {\n    try {\n      const coins: PaginatedCoins = await provider.getCoins({\n        owner: address,\n        coinType,\n        cursor: nextCursor,\n      });\n      coinBalances = [...coinBalances, ...coins.data];\n      hasNextPage = coins.hasNextPage;\n      nextCursor = coins.nextCursor;\n    } catch (error) {\n      console.error(\"Error fetching data:\", error);\n      hasNextPage = false;\n    }\n  }\n  // sort coin balance before get object id\n  const coinObj = orderByKey(\n    coinBalances.map((item) => {\n      return {\n        ...item,\n        balance: item.balance,\n      };\n    }),\n    \"balance\",\n    \"desc\"\n  );\n  let balance = \"0\";\n  let objectIds = [] as any;\n  let objectCoins = [];\n  for (const coin of coinObj ?? []) {\n    balance = BigNumb(coin.balance).plus(balance).toFixed();\n    objectIds.push(coin.coinObjectId);\n    objectCoins.push(coin);\n    if (BigNumb(balance).isGreaterThanOrEqualTo(amount)) {\n      break;\n    }\n  }\n  return { objectIds, balance, objectCoins };\n};\n","import {\n  CoinStruct,\n  TransactionArgument,\n  TransactionBlock,\n} from \"@mysten/sui.js\";\n\nexport const getSuiCoinForTx = async (\n  objectCoins: CoinStruct[],\n  amount: string | number,\n  tx: TransactionBlock\n): Promise<{ tx: TransactionBlock; coin: string | TransactionArgument }> => {\n  let coin;\n  tx.setGasPayment(\n    objectCoins.map((coin) => ({\n      objectId: coin.coinObjectId,\n      digest: coin.digest,\n      version: coin.version,\n    }))\n  );\n\n  coin = tx.splitCoins(tx.gas, [tx.pure(amount)]);\n\n  return { tx, coin };\n};\n","import { TransactionBlock } from \"@mysten/sui.js\";\nimport { handleGetCoinAmount } from \"../../swap/libs/handleGetCoinAmount\";\nimport { CoinMetadata } from \"../../types\";\nimport { createZeroCoin, getDecimalAmount } from \"../../utils\";\nimport {\n  ADD_LIQUIDITY_V3,\n  CLOCK_ID,\n  FUNCTION,\n  MODULE,\n  SUI_TYPE,\n} from \"../../constants\";\nimport { BigNumb } from \"../../BigNumber\";\n\nexport const getTxIncreasePositionLiquidV3 = async (\n  coinX: CoinMetadata,\n  coinY: CoinMetadata,\n  amountX: string,\n  amountY: string,\n  account: string,\n  positionObject: string | any,\n  slippage: string,\n  tx: TransactionBlock\n) => {\n  const amountDecimalX = getDecimalAmount(amountX, coinX.decimals);\n  const amountDecimalY = getDecimalAmount(amountY, coinY.decimals);\n  // console.log(\"positionObject\", positionObject, amountDecimalX, amountDecimalY);\n  const { coin: coinObjectX } = await handleGetCoinAmount(\n    amountDecimalX,\n    account,\n    coinX.type,\n    tx\n  );\n  const { coin: coinObjectY } = await handleGetCoinAmount(\n    amountDecimalY,\n    account,\n    coinY.type,\n    tx\n  );\n  tx.moveCall({\n    target: `${ADD_LIQUIDITY_V3.CLMM_PACKAGE}::${MODULE.POSITION_MANAGER}::${FUNCTION.INCREASE_LIQUIDITY}`,\n    typeArguments: [coinX.type, coinY.type],\n    arguments: [\n      tx.object(ADD_LIQUIDITY_V3.POOL_REGISTRY_OBJ),\n      typeof positionObject === \"string\"\n        ? tx.object(positionObject)\n        : positionObject,\n      coinX.type === SUI_TYPE\n        ? (coinObjectX as any)\n        : !!coinObjectX\n        ? tx.object(coinObjectX as any)\n        : createZeroCoin(tx, coinX.type),\n      coinY.type === SUI_TYPE\n        ? (coinObjectY as any)\n        : !!coinObjectY\n        ? tx.object(coinObjectY as any)\n        : createZeroCoin(tx, coinY.type),\n      tx.pure(\n        BigNumb(1)\n          .minus(slippage)\n          .multipliedBy(amountDecimalX)\n          .integerValue()\n          .toString()\n      ),\n      tx.pure(\n        BigNumb(1)\n          .minus(slippage)\n          .multipliedBy(amountDecimalY)\n          .integerValue()\n          .toString()\n      ),\n      tx.pure(Number.MAX_SAFE_INTEGER),\n      tx.object(ADD_LIQUIDITY_V3.VERSIONED_OBJ),\n      tx.object(CLOCK_ID),\n    ],\n  });\n  return tx;\n};\n","import { TransactionBlock } from \"@mysten/sui.js\";\nimport { IFeeTierV3 } from \"../../types\";\nimport { TickMath } from \"./math\";\nimport { ADD_LIQUIDITY_V3, CLOCK_ID, FUNCTION, MODULE } from \"../../constants\";\n\nexport const getTxCreatePoolLiquidV3 = (\n  coinXType: string,\n  coinYType: string,\n  currentTick: number,\n  fee: IFeeTierV3,\n  tx: TransactionBlock\n) => {\n  return tx.moveCall({\n    target: `${ADD_LIQUIDITY_V3.CLMM_PACKAGE}::${MODULE.POOL_MANAGER}::${FUNCTION.CREATE_INITIAL_POOL}`,\n    typeArguments: [coinXType, coinYType],\n    arguments: [\n      tx.object(ADD_LIQUIDITY_V3.POOL_REGISTRY_OBJ),\n      tx.pure(fee.valueDecimal),\n      tx.pure(TickMath.tickIndexToSqrtPriceX64(currentTick).toString()),\n      tx.object(ADD_LIQUIDITY_V3.VERSIONED_OBJ),\n      tx.object(CLOCK_ID),\n    ],\n  });\n};\n","import { TransactionBlock } from \"@mysten/sui.js\";\nimport { IFeeTierV3 } from \"../../types\";\nimport { ADD_LIQUIDITY_V3, FUNCTION, MODULE } from \"../../constants\";\n\nexport const getTxOpenPositionLiquidV3 = async (\n  fee: IFeeTierV3,\n  coinXType: string,\n  coinYType: string,\n  lowerTickIndex: any,\n  upperTickIndex: any,\n  inheritTx?: TransactionBlock\n) => {\n  const tx = inheritTx ?? new TransactionBlock();\n  return tx.moveCall({\n    target: `${ADD_LIQUIDITY_V3.CLMM_PACKAGE}::${MODULE.POSITION_MANAGER}::${FUNCTION.OPEN_POSITION}`,\n    typeArguments: [coinXType, coinYType],\n    arguments: [\n      tx.object(ADD_LIQUIDITY_V3.POSITION_REGISTRY_OBJ),\n      tx.object(ADD_LIQUIDITY_V3.POOL_REGISTRY_OBJ),\n      tx.pure(fee.value),\n      lowerTickIndex,\n      upperTickIndex,\n      tx.object(ADD_LIQUIDITY_V3.VERSIONED_OBJ),\n    ],\n  });\n};\n","import { BigNumb } from \"../../BigNumber\";\nimport { ADD_LIQUIDITY_V3 } from \"../../constants\";\nimport { IDataPools } from \"../../types\";\nimport { getFullyDynamicFields, standardizeType } from \"../../utils\";\n\nexport const getListPoolLiquidV3 = async () => {\n  const data: IDataPools[] = [];\n  const res = await getFullyDynamicFields(ADD_LIQUIDITY_V3.POOL_REGISTRY_OBJ);\n  res.forEach((item) => {\n    data.push({\n      typeCoinX: standardizeType(item.name.value.coin_type_x.name),\n      typeCoinY: standardizeType(item.name.value.coin_type_y.name),\n      feeRate: BigNumb(item.name.value.fee_rate).div(1e4).toFixed(),\n      id: item.objectId,\n    });\n  });\n  return data;\n};\n","import { TransactionBlock } from \"@mysten/sui.js\";\nimport {\n  ADD_LIQUIDITY_V3,\n  CLOCK_ID,\n  FUNCTION,\n  MODULE,\n  SUI_TYPE,\n} from \"../../constants\";\nimport { CoinMetadata, IFeeTierV3 } from \"../../types\";\nimport { getTxIncreasePositionLiquidV3 } from \"./getTxIncreasePositionLiquidV3\";\n\nexport const buildTxIncreaseLiquidV3 = async (\n  amountX: string,\n  amountY: string,\n  account: string,\n  coinX: CoinMetadata,\n  coinY: CoinMetadata,\n  positionObjectId: string,\n  slippage: string\n) => {\n  const tx = new TransactionBlock();\n  return await getTxIncreasePositionLiquidV3(\n    coinX,\n    coinY,\n    amountX,\n    amountY,\n    account,\n    positionObjectId,\n    slippage,\n    tx\n  );\n};\n","import { TransactionBlock } from \"@mysten/sui.js\";\nimport { Amount, CoinMetadata, IPoolRewardV3 } from \"../../types\";\nimport { getTxDecreasePositionLiquidV3 } from \"./getTxDecreasePositionLiquidV3\";\nimport { BigNumb } from \"../../BigNumber\";\nimport { getTxCollectLiquidV3 } from \"./getTxCollectLiquidV3\";\nimport { getTxCollectRewardLiquidV3 } from \"./getTxCollectRewardLiquidV3\";\nimport { getTxClosePositionLiquidV3 } from \"./getTxClosePositionLiquidV3\";\nimport { getDecimalAmount } from \"../../utils\";\n\nexport const buildTxRemoveLiquidV3 = async (\n  coinX: CoinMetadata,\n  coinY: CoinMetadata,\n  positionObjectId: string,\n  liquid2Remove: string,\n  amountX: string,\n  amountY: string,\n  account: string,\n  poolReward: IPoolRewardV3[],\n  removeAll?: boolean\n): Promise<TransactionBlock> => {\n  let tx = new TransactionBlock();\n  const amountXDecimal = BigNumb(getDecimalAmount(amountX, coinX.decimals))\n    .integerValue()\n    .toString();\n  const amountYDecimal = BigNumb(getDecimalAmount(amountY, coinY.decimals))\n    .integerValue()\n    .toString();\n  const txb = getTxDecreasePositionLiquidV3(\n    coinX,\n    coinY,\n    positionObjectId,\n    liquid2Remove,\n    amountXDecimal,\n    amountYDecimal,\n    tx\n  );\n  tx = txb;\n  const txc = await getTxCollectLiquidV3(\n    coinX,\n    coinY,\n    positionObjectId,\n    account,\n    tx,\n    removeAll || BigNumb(amountX).eq(0) ? null : amountXDecimal,\n    removeAll || BigNumb(amountY).eq(0) ? null : amountYDecimal\n  );\n  tx = txc;\n  if (poolReward.length > 0) {\n    poolReward.forEach((item) => {\n      const rewardType = [coinX.type, coinY.type, item.coin.type];\n      getTxCollectRewardLiquidV3(rewardType, positionObjectId, account, tx);\n    });\n  }\n  if (removeAll) {\n    const txd = getTxClosePositionLiquidV3(positionObjectId, tx);\n    tx = txd;\n  }\n  return tx;\n};\n","import { TransactionBlock } from \"@mysten/sui.js\";\nimport { ADD_LIQUIDITY_V3, CLOCK_ID, FUNCTION, MODULE } from \"../../constants\";\nimport { CoinMetadata } from \"../../types\";\n\nexport const getTxDecreasePositionLiquidV3 = (\n  coinX: CoinMetadata,\n  coinY: CoinMetadata,\n  positionObjectId: string,\n  liquid2Remove: string,\n  amountX: string,\n  amountY: string,\n  inheritTx?: TransactionBlock\n) => {\n  const tx = inheritTx ?? new TransactionBlock();\n  tx.moveCall({\n    target: `${ADD_LIQUIDITY_V3.CLMM_PACKAGE}::${MODULE.POSITION_MANAGER}::${FUNCTION.DECREASE_LIQUIDITY}`,\n    typeArguments: [coinX.type, coinY.type],\n    arguments: [\n      tx.object(ADD_LIQUIDITY_V3.POOL_REGISTRY_OBJ),\n      tx.object(positionObjectId),\n      tx.pure(liquid2Remove), //desired amount of liquidity to remove\n      tx.pure(amountX), //coinX's portion remove base on amount of remove liquidity\n      tx.pure(amountY), //coinY's portion remove base on amount of remove liquidity\n      tx.pure(Number.MAX_SAFE_INTEGER),\n      tx.object(ADD_LIQUIDITY_V3.VERSIONED_OBJ),\n      tx.object(CLOCK_ID),\n    ],\n  });\n  return tx;\n};\n","import { TransactionBlock } from \"@mysten/sui.js\";\nimport { ADD_LIQUIDITY_V3, FUNCTION, MODULE } from \"../../constants\";\n\nexport const getTxClosePositionLiquidV3 = (\n  positionObjectId: string,\n  inheritTx?: TransactionBlock\n) => {\n  const tx = inheritTx ?? new TransactionBlock();\n  tx.moveCall({\n    target: `${ADD_LIQUIDITY_V3.CLMM_PACKAGE}::${MODULE.POSITION_MANAGER}::${FUNCTION.CLOSE_POSITION}`,\n    arguments: [\n      tx.object(ADD_LIQUIDITY_V3.POSITION_REGISTRY_OBJ),\n      tx.object(positionObjectId),\n      tx.object(ADD_LIQUIDITY_V3.VERSIONED_OBJ),\n    ],\n  });\n  return tx;\n};\n","import { client } from \"../../../constants\";\nimport { gql } from \"graphql-tag\";\nimport { IGetClmmTicks } from \"../../../types\";\n\nconst graphTickClmmQuery = gql`\n  query GetClmmTicks($pool: String!) {\n    getClmmTicks(pool: $pool) {\n      _id\n      liquidityGross\n      liquidityNet\n      pool\n      tick\n    }\n  }\n`;\nexport const getTickClmm = async (poolId: string): Promise<IGetClmmTicks[]> => {\n  try {\n    const res: any = await client(\"no-cache\").request(graphTickClmmQuery, {\n      pool: poolId,\n    });\n    const data: IGetClmmTicks[] = res.getClmmTicks ?? [];\n    return data.filter((item) => +item.liquidityNet !== 0);\n  } catch (error) {\n    throw error;\n  }\n};\n","import { MAX_ROUTE_HOPS } from \"../../constants\";\n\nclass Graph {\n  private graph: Record<string, string[]> = {};\n\n  public addEdge(node1: string, node2: string): void {\n    if (!this.graph[node1]) {\n      this.graph[node1] = [];\n    }\n    if (!this.graph[node2]) {\n      this.graph[node2] = [];\n    }\n\n    this.graph[node1].push(node2);\n    this.graph[node2].push(node1);\n  }\n\n  public findAllPaths(start: string, end: string): string[][] {\n    const visited = new Set<string>();\n    const allPaths: string[][] = [];\n\n    this.dfs(start, end, visited, [], allPaths);\n\n    return allPaths;\n  }\n\n  private dfs(\n    node: string,\n    end: string,\n    visited: Set<string>,\n    currentPath: string[],\n    allPaths: string[][]\n  ): void {\n    visited.add(node);\n    currentPath.push(node);\n\n    if (currentPath.length <= MAX_ROUTE_HOPS) {\n      if (node === end) {\n        allPaths.push([...currentPath]);\n      } else {\n        for (const neighbor of this.graph[node] ?? []) {\n          if (!visited.has(neighbor)) {\n            this.dfs(neighbor, end, visited, currentPath, allPaths);\n          }\n        }\n      }\n    }\n\n    visited.delete(node);\n    currentPath.pop();\n  }\n}\n\nexport default Graph;\n// // Example usage\n// const graph = new Graph();\n// graph.addEdge('A', 'B');\n// graph.addEdge('A', 'C');\n// graph.addEdge('B', 'D');\n// graph.addEdge('C', 'E');\n// graph.addEdge('D', 'E');\n// graph.addEdge('E', 'F');\n\n// const startNode = 'A';\n// const endNode = 'F';\n\n// const paths = graph.findAllPaths(startNode, endNode);\n\n// if (paths.length > 0) {\n//   console.log(`All paths from ${startNode} to ${endNode}:`);\n//   paths.forEach((path, index) => {\n//     console.log(`Path ${index + 1}: ${path.join(' -> ')}`);\n//   });\n// } else {\n//   console.log(`No paths found from ${startNode} to ${endNode}`);\n// }\n","import { BigNumb } from \"../../BigNumber\";\nimport { PairSetting, PoolInfo, SmartRoute } from \"../../types\";\nimport { getReserveByCoinType } from \"../../utils\";\nexport const getAmountIn = (\n  amountOut: string | number,\n  reserveIn: string,\n  reserveOut: string,\n  fee: number\n): string => {\n  const numerator = BigNumb(reserveIn).multipliedBy(amountOut);\n  const denominator = BigNumb(reserveOut)\n    .minus(amountOut)\n    .multipliedBy(1 - fee);\n\n  return numerator.dividedBy(denominator).plus(1).toFixed(0);\n};\nconst _getAmountIn = (\n  pair: PairSetting,\n  _amountOut: string | number,\n  coinIn: string,\n  poolInfos: PoolInfo[]\n) => {\n  const poolDetail = poolInfos.find(\n    (item) => item.objectId === pair.lpObjectId\n  );\n\n  const reserve = getReserveByCoinType(coinIn, poolDetail);\n\n  return getAmountIn(\n    _amountOut,\n    reserve.reserveX,\n    reserve.reserveY,\n    poolDetail.feeRate\n  );\n};\nexport const calculateAmountInFromPath = (\n  amount: string | number,\n  coinOutType: string,\n  tradAbles: PairSetting[],\n  poolInfos: PoolInfo[]\n): SmartRoute => {\n  let smartRoute: SmartRoute = {};\n  smartRoute.amountOut = amount;\n  smartRoute.routes = [];\n\n  let tradeAblesRev = tradAbles.slice().reverse();\n  let amountIn = amount;\n  let lpOutType = coinOutType;\n  for (let i = 0; i < tradeAblesRev.length; i++) {\n    let route: any = {};\n    route.coinTypeOut = lpOutType;\n    route.amountOut = amountIn;\n\n    lpOutType =\n      tradeAblesRev[i].coinYType == lpOutType\n        ? tradeAblesRev[i].coinXType\n        : tradeAblesRev[i].coinYType;\n    amountIn = _getAmountIn(tradeAblesRev[i], amountIn, lpOutType, poolInfos);\n\n    route.coinTypeIn = lpOutType;\n    route.amountIn = amountIn;\n    route.pair = tradeAblesRev[i];\n\n    smartRoute.routes.push(route);\n  }\n\n  smartRoute.routes.reverse();\n  smartRoute.amountIn = amountIn;\n  return smartRoute;\n};\n","import { PairSetting, PoolInfo, SmartRoute } from \"../../types\";\nimport { getAmountOut, getReserveByCoinType } from \"../../utils\";\n\nconst _getAmountOut = (\n  pair: PairSetting,\n  _amountIn: string | number,\n  coinIn: string,\n  poolInfos: PoolInfo[]\n) => {\n  const poolDetail = poolInfos.find(\n    (item) => item.objectId === pair.lpObjectId\n  );\n  const reserve = getReserveByCoinType(coinIn, poolDetail);\n  return getAmountOut(\n    _amountIn,\n    reserve.reserveX,\n    reserve.reserveY,\n    poolDetail.feeRate\n  );\n};\nexport const calculateAmountOutFromPath = (\n  amount: string | number,\n  coinInType: string,\n  tradAbles: PairSetting[],\n  poolInfos: PoolInfo[]\n): SmartRoute => {\n  let smartRoute: SmartRoute = {};\n  smartRoute.amountIn = amount;\n  smartRoute.routes = [];\n  let amountOut = amount;\n  let lpOutType = coinInType;\n\n  for (let i = 0; i < tradAbles?.length; i++) {\n    let route: any = {};\n    route.coinTypeIn = lpOutType;\n    route.amountIn = amountOut;\n\n    amountOut = _getAmountOut(tradAbles[i], amountOut, lpOutType, poolInfos);\n    lpOutType =\n      tradAbles[i].coinYType == lpOutType\n        ? tradAbles[i].coinXType\n        : tradAbles[i].coinYType;\n\n    route.coinTypeOut = lpOutType;\n    route.amountOut = amountOut;\n    route.pair = tradAbles[i];\n\n    smartRoute.routes.push(route);\n  }\n\n  smartRoute.amountOut = amountOut;\n  return smartRoute;\n};\n","import { BigNumb } from \"../BigNumber\";\nimport { MAX_ROUTE_HOPS, client } from \"../constants\";\nimport { IPools, PairSetting, PoolInfo } from \"../types\";\nimport { getPairs, getPools } from \"../utils\";\nimport Graph from \"./libs/Graph\";\nimport { calculateAmountInFromPath } from \"./libs/calculateAmountInFromPath\";\nimport { calculateAmountOutFromPath } from \"./libs/calculateAmountOutFromPath\";\n\nconst getTrades = (\n  coinInType: string,\n  coinOutType: string,\n  pairs: PairSetting[]\n) => {\n  const trade = pairs.find(\n    (pair) =>\n      (pair.coinXType.includes(coinInType) &&\n        pair.coinYType.includes(coinOutType)) ||\n      (pair.coinXType.includes(coinOutType) &&\n        pair.coinYType.includes(coinInType))\n  );\n\n  return trade;\n};\nconst getTradAbles = (\n  coinInType: string,\n  coinOutType: string,\n  pairs: PairSetting[]\n) => {\n  const graph = new Graph();\n\n  pairs.forEach((pair) => {\n    graph.addEdge(pair.coinXType, pair.coinYType);\n  });\n\n  const paths = graph\n    .findAllPaths(coinInType, coinOutType)\n    .filter((path) => path.length <= MAX_ROUTE_HOPS);\n\n  const pairPaths: PairSetting[][] = [];\n  for (let i = 0; i < paths.length; i++) {\n    for (let j = 0; j < paths[i].length - 1; j++) {\n      const coinX = paths[i][j];\n      const coinY = paths[i][j + 1];\n\n      if (!pairPaths[i]) {\n        pairPaths[i] = [];\n      }\n\n      pairPaths[i].push(\n        pairs.find(\n          (pair) =>\n            (pair.coinXType === coinX && pair.coinYType === coinY) ||\n            (pair.coinXType === coinY && pair.coinYType === coinX)\n        )\n      );\n    }\n  }\n  return pairPaths;\n};\nconst getBestRouterExactIn = (\n  amount: string | number,\n  tradAbles: PairSetting[][],\n  directTrade: PairSetting,\n  coinInType: string,\n  poolInfos: PoolInfo[]\n) => {\n  let bestTrade: PairSetting[];\n  let maxAmountOut = BigNumb(0);\n\n  tradAbles.forEach((item) => {\n    let smartRoute = calculateAmountOutFromPath(\n      amount,\n      coinInType,\n      item,\n      poolInfos\n    );\n    // console.log(smartRoute, 'smartRoute');\n\n    if (BigNumb(smartRoute.amountOut).gte(maxAmountOut)) {\n      maxAmountOut = BigNumb(smartRoute.amountOut);\n      bestTrade = item;\n    }\n  });\n\n  // console.log('================== Exact IN ==================');\n\n  return bestTrade;\n};\nconst getBestRouterExactOut = (\n  amount: string | number,\n  tradAbles: PairSetting[][],\n  directTrade: PairSetting,\n  coinInType: string,\n  coinOutType: string,\n  poolInfos: PoolInfo[]\n) => {\n  let bestTrade: PairSetting[] = [];\n  let maxAmountIn = BigNumb(\"Infinity\");\n  tradAbles.forEach((item) => {\n    let smartRoute = calculateAmountInFromPath(\n      amount,\n      coinOutType,\n      item,\n      poolInfos\n    );\n\n    // console.log(smartRoute, 'smartRoute');\n    if (\n      BigNumb(smartRoute.amountIn).lte(maxAmountIn) &&\n      BigNumb(smartRoute.amountIn).gt(1)\n    ) {\n      maxAmountIn = BigNumb(smartRoute.amountIn);\n      bestTrade = item;\n    }\n  });\n  // console.log('================== Exact OUT ==================');\n  return bestTrade;\n};\nexport const getSmartRoute = async (\n  amount: string | number,\n  coinInType: string,\n  coinOutType: string,\n  isExactIn: boolean,\n  poolInfosData?: IPools[],\n  pairsData?: PairSetting[]\n): Promise<PairSetting[]> => {\n  let pairs = pairsData,\n    poolInfos = poolInfosData;\n  if (!poolInfosData || !pairsData) {\n    const { poolInfos: poolData, pairs: pairData } = await getPools();\n    pairs = pairData;\n    poolInfos = poolData;\n  }\n\n  let tradAbles = getTradAbles(coinInType, coinOutType, pairs);\n  const directTrade = getTrades(coinInType, coinOutType, pairs);\n  //return directTrade if do not have multi routers\n  // if (!tradAbles.length) {\n  //   return directTrade ? [directTrade] : [];\n  // }\n  if (isExactIn) {\n    return getBestRouterExactIn(\n      amount,\n      tradAbles,\n      directTrade,\n      coinInType,\n      poolInfos\n    );\n  }\n  return getBestRouterExactOut(\n    amount,\n    tradAbles,\n    directTrade,\n    coinInType,\n    coinOutType,\n    poolInfos\n  );\n};\n","import {\n  Amount,\n  CoinMetadata,\n  ICalcAmountExact,\n  IGetPools,\n  IPools,\n  PairSetting,\n} from \"../types\";\nimport {\n  getBalanceAmount,\n  getCoinsFlowX,\n  getDecimalAmount,\n  getPairs,\n  getPools,\n} from \"../utils\";\nimport { BigNumb } from \"../BigNumber\";\nimport { getSmartRoute } from \"./getSmartRoute\";\nimport { calculateAmountOutFromPath } from \"./libs/calculateAmountOutFromPath\";\nimport { calculateAmountInFromPath } from \"./libs/calculateAmountInFromPath\";\n\nexport const handleCalcAmountOut = async (\n  value: string | number,\n  coinIn: CoinMetadata,\n  coinOut: CoinMetadata,\n  coinsData?: CoinMetadata[],\n  pairsData?: PairSetting[],\n  poolInfosData?: IPools[]\n): Promise<ICalcAmountExact> => {\n  const coins = coinsData ?? (await getCoinsFlowX());\n  let pairs = pairsData,\n    poolInfos = poolInfosData;\n  if (!poolInfosData || !pairsData) {\n    const { poolInfos: poolData, pairs: pairData } = await getPools();\n    pairs = pairData;\n    poolInfos = poolData;\n  }\n\n  let decimalInAmount = BigNumb(\n    getDecimalAmount(value, coinIn.decimals)\n  ).toFixed(0);\n  let amountInFormat = getBalanceAmount(\n    decimalInAmount,\n    coins.find((coin) => coin.type === coinIn.type)?.decimals\n  ).toFixed();\n\n  let amountInNewState: Amount = {\n    decimalAmount: decimalInAmount,\n    amount: amountInFormat,\n  };\n\n  const trades = await getSmartRoute(\n    decimalInAmount,\n    coinIn.type,\n    coinOut.type,\n    true,\n    poolInfos,\n    pairs\n  );\n\n  const smartRoute = calculateAmountOutFromPath(\n    decimalInAmount,\n    coinIn.type,\n    trades,\n    poolInfos\n  );\n  const decimalOutAmount = smartRoute.amountOut;\n\n  const amountOutFormat = getBalanceAmount(\n    decimalOutAmount,\n    coins.find((coin) => coin.type === coinOut.type)?.decimals\n  ).toFixed();\n\n  let amountOutNewState: Amount = {\n    decimalAmount: decimalOutAmount,\n    amount: amountOutFormat,\n  };\n  return {\n    amountIn: amountInNewState,\n    amountOut: amountOutNewState,\n    trades,\n    smartRoute,\n  };\n};\n\nexport const handleCalcAmountIn = async (\n  value: string | number,\n  coinIn: CoinMetadata,\n  coinOut: CoinMetadata,\n  coinsData?: CoinMetadata[],\n  pairsData?: PairSetting[],\n  poolInfosData?: IPools[]\n): Promise<ICalcAmountExact> => {\n  const coins = coinsData ?? (await getCoinsFlowX());\n  let pairs = pairsData,\n    poolInfos = poolInfosData;\n  if (!poolInfosData || !pairsData) {\n    const { poolInfos: poolData, pairs: pairData } = await getPools();\n    pairs = pairData;\n    poolInfos = poolData;\n  }\n\n  let decimalOutAmount = BigNumb(\n    getDecimalAmount(value, coinOut.decimals)\n  ).toFixed(0);\n  let amountOutFormat = getBalanceAmount(\n    decimalOutAmount,\n    coins.find((coin) => coin.type === coinOut.type)?.decimals\n  ).toFixed();\n  let amountOutNewState: Amount = {\n    decimalAmount: decimalOutAmount,\n    amount: amountOutFormat,\n  };\n  const trades = await getSmartRoute(\n    decimalOutAmount,\n    coinIn.type,\n    coinOut.type,\n    false,\n    poolInfos,\n    pairs\n  );\n  const smartRoute = calculateAmountInFromPath(\n    decimalOutAmount,\n    coinOut.type,\n    trades,\n    poolInfos\n  );\n  const decimalInAmount = smartRoute.amountIn;\n\n  const amountInFormat = getBalanceAmount(\n    decimalInAmount,\n    coins.find((coin) => coin.type === coinIn.type)?.decimals\n  ).toFixed();\n  let amountInNewState: Amount = {\n    decimalAmount: decimalInAmount,\n    amount: amountInFormat,\n  };\n  return {\n    amountIn: amountInNewState,\n    amountOut: amountOutNewState,\n    trades,\n    smartRoute,\n  };\n};\n//User input exact amount of in token\nexport const calculateAmountOut = async (\n  value: string | number,\n  coinIn: CoinMetadata,\n  coinOut: CoinMetadata\n): Promise<ICalcAmountExact> => {\n  const { poolInfos } = await getPools();\n  const coins: CoinMetadata[] = await getCoinsFlowX();\n  const pairs: PairSetting[] = await getPairs();\n  const { amountIn, amountOut, trades, smartRoute } = await handleCalcAmountOut(\n    value,\n    coinIn,\n    coinOut,\n    coins,\n    pairs,\n    poolInfos\n  );\n  return { amountIn, amountOut, trades, smartRoute };\n};\n\n//User input exact amount of out token\nexport const calculateAmountIn = async (\n  value: string | number,\n  coinIn: CoinMetadata,\n  coinOut: CoinMetadata\n): Promise<ICalcAmountExact> => {\n  const { poolInfos } = await getPools();\n  const coins: CoinMetadata[] = await getCoinsFlowX();\n  const pairs: PairSetting[] = await getPairs();\n  const { amountIn, amountOut, trades, smartRoute } = await handleCalcAmountIn(\n    value,\n    coinIn,\n    coinOut,\n    coins,\n    pairs,\n    poolInfos\n  );\n  return {\n    amountIn,\n    amountOut,\n    trades,\n    smartRoute,\n  };\n};\n","import { TransactionBlock } from \"@mysten/sui.js\";\nimport { BigNumb } from \"../BigNumber\";\nimport {\n  CLOCK_ID,\n  CONTAINER_OBJECT_ID,\n  FUNCTION,\n  PACKAGE_OBJECT_ID,\n} from \"../constants\";\nimport { Amount, CoinMetadata, PairSetting, SwapArgs } from \"../types\";\nimport { estimateDealine } from \"../utils\";\nimport { handleGetCoinAmount } from \"./libs/handleGetCoinAmount\";\nimport { isObject } from \"lodash\";\nconst getSwapFunction = (trades: PairSetting[], isExactIn = false) => {\n  switch (trades?.length) {\n    case 1:\n      return isExactIn ? FUNCTION.SWAP_EXACT_INPUT : FUNCTION.SWAP_EXACT_OUTPUT;\n    case 2:\n      return isExactIn\n        ? FUNCTION.SWAP_EXACT_INPUT_DOUBLEHOP\n        : FUNCTION.SWAP_EXACT_OUTPUT_DOUBLEHOP;\n    case 3:\n      return isExactIn\n        ? FUNCTION.SWAP_EXACT_INPUT_TRIPLEHOP\n        : FUNCTION.SWAP_EXACT_OUTPUT_TRIPLEHOP;\n    default:\n      return isExactIn ? FUNCTION.SWAP_EXACT_INPUT : FUNCTION.SWAP_EXACT_OUTPUT;\n  }\n};\nconst getArgsSwapExactInput = async (\n  amountIn: string | number,\n  amountOutMin: string | number,\n  trades: PairSetting[],\n  coinIn: CoinMetadata,\n  account: string,\n  recipient: string\n): Promise<SwapArgs> => {\n  const { coin: coinObjectId, tx } = await handleGetCoinAmount(\n    amountIn,\n    account,\n    coinIn.type\n  );\n  let typeArguments: any[] = [coinIn.type];\n  trades?.forEach((item) => {\n    let lastArgs = typeArguments[typeArguments.length - 1] ?? \"\";\n    if (lastArgs == item.coinXType) {\n      typeArguments.push(item.coinYType);\n    } else {\n      typeArguments.push(item.coinXType);\n    }\n  });\n  return {\n    tx,\n    typeArguments,\n    args: [\n      tx.object(CLOCK_ID),\n      tx.object(CONTAINER_OBJECT_ID),\n      isObject(coinObjectId) ? coinObjectId : tx.object(coinObjectId),\n      tx.pure(+amountOutMin),\n      tx.pure(recipient || account),\n      tx.pure(estimateDealine()),\n    ],\n    callFunction: getSwapFunction(trades, true),\n  };\n};\n\nconst getArgsSwapExactOutput = async (\n  amountInMax: string | number,\n  amountOut: string | number,\n  trades: PairSetting[],\n  coinIn: CoinMetadata,\n  account: string,\n  recipient: string\n): Promise<SwapArgs> => {\n  const { coin: coinObjectId, tx } = await handleGetCoinAmount(\n    amountInMax,\n    account,\n    coinIn.type\n  );\n\n  let typeArguments: any[] = [coinIn.type];\n  trades?.forEach((item) => {\n    let lastArgs = typeArguments[typeArguments.length - 1] ?? \"\";\n    if (lastArgs == item.coinXType) {\n      typeArguments.push(item.coinYType);\n    } else {\n      typeArguments.push(item.coinXType);\n    }\n  });\n\n  return {\n    tx,\n    typeArguments,\n    args: [\n      tx.object(CLOCK_ID),\n      tx.object(CONTAINER_OBJECT_ID),\n      isObject(coinObjectId) ? coinObjectId : tx.object(coinObjectId),\n      tx.pure(+amountInMax),\n      tx.pure(+amountOut),\n      tx.pure(recipient || account),\n      tx.pure(estimateDealine()),\n    ],\n    callFunction: getSwapFunction(trades, false),\n  };\n};\nconst swap = async (\n  tx: TransactionBlock,\n  typeArguments: string[],\n  args: any[],\n  callFunction: string\n): Promise<TransactionBlock> => {\n  tx.moveCall({\n    target: `${PACKAGE_OBJECT_ID}::router::${callFunction}`,\n    arguments: args,\n    typeArguments,\n  });\n  return tx;\n};\nexport const swapExactInput = async (\n  isExactIn: boolean,\n  amountIn: Amount,\n  amountOut: Amount,\n  trades: PairSetting[],\n  coinIn: CoinMetadata,\n  coinOut: CoinMetadata,\n  account: string,\n  valueSlippage: number\n) => {\n  try {\n    const slipageVal =\n      valueSlippage > 100 ? 100 : valueSlippage < 0 ? 0 : valueSlippage;\n    const slippage = BigNumb(slipageVal).div(100).toFixed();\n    const { typeArguments, args, tx, callFunction } = isExactIn\n      ? await getArgsSwapExactInput(\n          amountIn.decimalAmount,\n          BigNumb(amountOut.decimalAmount)\n            .multipliedBy(1 - +slippage)\n            .toFixed(0),\n          trades,\n          coinIn,\n          account,\n          \"\"\n        )\n      : await getArgsSwapExactOutput(\n          amountIn.decimalAmount,\n          amountOut.decimalAmount,\n          trades,\n          coinIn,\n          account,\n          \"\"\n        );\n\n    // console.log('=======> Swap Args ==========>');\n    // console.log('Args: ', args);\n    // console.log('Amount in: ', amountIn.decimalAmount);\n    // console.log('Amount out: ', amountOut.decimalAmount);\n    // console.log('Type Args: ', typeArguments);\n    // console.log('=======> End Args ==========>');\n    // console.log(\"KKK\", tx);\n    const txb = await swap(tx, typeArguments, args, callFunction);\n    return txb;\n  } catch (e) {\n    console.log(\"error\", e);\n    throw `ERROR SWAP: ${e}`;\n  }\n};\n","import { SUI_DECIMALS, TransactionBlock } from \"@mysten/sui.js\";\nimport { MODULE, provider, SUI_TYPE, SWAP_V3 } from \"../../constants\";\nimport { BigNumber } from \"../../BigNumber\";\nimport Lodash from \"../../lodash\";\nimport { getBalanceAmount, getCoinsFlowX } from \"../../utils\";\nimport { CoinMetadata, IEstimateGasResult } from \"../../types\";\n\nexport const estimateGasFee = async (\n  tx: TransactionBlock | any,\n  account?: string\n): Promise<IEstimateGasResult | undefined> => {\n  if (!account) return { fee: \"0\", amountOut: \"0\", pathsAmountOut: [] };\n  let suiPrice = \"0\";\n  const coins: CoinMetadata[] = await getCoinsFlowX();\n  suiPrice = Lodash.find(coins, { type: SUI_TYPE }).derivedPriceInUSD;\n\n  const result = await provider.devInspectTransactionBlock({\n    sender: account,\n    transactionBlock: tx,\n  });\n\n  // console.log(\"%cEstimateGas\", \"color:cyan\", account, result);\n  const gasUsed = result.effects.gasUsed;\n  if (result.effects.status.status === \"success\") {\n    let fee = BigNumber(gasUsed.computationCost)\n      .plus(gasUsed.storageCost)\n      .toFixed();\n    const listSwapTrans = Lodash.filter(result.events, {\n      type: `${SWAP_V3.UNIVERSAL_ROUTER}::${MODULE.UNIVERSAL_ROUTER}::Swap`,\n    });\n    // console.log('listSwapTrans', listSwapTrans);\n    const amountOut = Lodash.reduce(\n      listSwapTrans,\n      (sum, i) => {\n        return +BigNumber(sum).plus(i.parsedJson.amount_out).toFixed();\n      },\n      0\n    );\n    return {\n      fee: BigNumber(suiPrice)\n        .multipliedBy(getBalanceAmount(fee, SUI_DECIMALS))\n        .toFixed(),\n      amountOut: amountOut + \"\",\n      pathsAmountOut: listSwapTrans.map((i) => i.parsedJson.amount_out),\n    };\n  }\n  return;\n};\n","import { TransactionArgument, TransactionBlock } from \"@mysten/sui.js\";\nimport { getCoinOjectIdsByAmount } from \"../../swap/libs/getCoinOjectIdsByAmount\";\nimport { SUI_TYPE } from \"../../constants\";\n\nexport const getSplitCoinForTx = async (\n  account: string,\n  amount: string,\n  splits: string[],\n  coinType: string,\n  inheritTx?: TransactionBlock\n): Promise<{\n  tx: TransactionBlock;\n  coinData: TransactionArgument & TransactionArgument[];\n}> => {\n  const tx = inheritTx ?? new TransactionBlock();\n  // console.log('splits', splits);\n  const { objectIds, objectCoins } = await getCoinOjectIdsByAmount(\n    account,\n    amount,\n    coinType\n  );\n  if (coinType === SUI_TYPE) {\n    let pureAmount = [];\n    for (const split of splits) {\n      pureAmount.push(tx.pure(split));\n    }\n    let coin = tx.splitCoins(tx.gas, pureAmount);\n    return { tx, coinData: coin };\n  }\n  // console.log('objectIds', objectIds);\n  let coinObjectId: any = objectIds[0];\n  if (objectIds.length > 1) {\n    tx.mergeCoins(\n      tx.object(coinObjectId),\n      objectIds.slice(1).map((item) => tx.object(item))\n    );\n  }\n\n  //handle split coin\n  let pureAmount = [];\n  for (const split of splits) {\n    pureAmount.push(tx.pure(split));\n  }\n  // split correct amount to swap\n  const coinData = tx.splitCoins(tx.object(coinObjectId), pureAmount);\n  return { tx, coinData };\n};\n","import { TransactionArgument, TransactionBlock } from \"@mysten/sui.js\";\nimport { MODULE, SWAP_V3 } from \"../../constants\";\n\nexport const InitPath = async (\n  coinInType: string,\n  coinOutType: string,\n  coinInObject: any,\n  feeTier: number,\n  sqrtPriceLimit: string,\n  txb?: TransactionBlock\n): Promise<TransactionArgument & TransactionArgument[]> => {\n  try {\n    let tx = new TransactionBlock();\n    if (txb) tx = txb;\n    // console.log(\n    //   \"InitPath\",\n    //   coinInType,\n    //   coinOutType,\n    //   feeTier,\n    //   sqrtPriceLimit,\n    //   coinInObject\n    // );\n    return tx.moveCall({\n      target: `${SWAP_V3.UNIVERSAL_ROUTER}::${MODULE.UNIVERSAL_ROUTER}::initialize_path`,\n      typeArguments: [coinInType, coinOutType],\n      arguments: [coinInObject, tx.pure(feeTier), tx.pure(+sqrtPriceLimit)],\n    });\n  } catch (error) {\n    console.log(\"InitPath ERROR\", error);\n  }\n};\n","import { TransactionArgument, TransactionBlock } from \"@mysten/sui.js\";\nimport { BigNumber } from \"../../BigNumber\";\nimport { MODULE, SWAP_V3 } from \"../../constants\";\n\nexport const InitRouting = async (\n  coinInType: string,\n  coinOutType: string,\n  firstPathObject: any,\n  pathAmountOut: number,\n  slippage: number,\n  deadline: number,\n  pathSize: number,\n  txb?: TransactionBlock\n): Promise<TransactionArgument & TransactionArgument[]> => {\n  try {\n    // console.log(\n    //   \"InitRouting\",\n    //   coinInType,\n    //   coinOutType,\n    //   firstPathObject,\n    //   pathAmountOut,\n    //   slippage,\n    //   deadline,\n    //   pathSize,\n    //   txb\n    // );\n    let tx = new TransactionBlock();\n    if (txb) tx = txb;\n    return tx.moveCall({\n      target: `${SWAP_V3.UNIVERSAL_ROUTER}::${MODULE.UNIVERSAL_ROUTER}::initialize_routing`,\n      typeArguments: [coinInType, coinOutType],\n      arguments: [\n        firstPathObject,\n        tx.pure(pathAmountOut),\n        tx.pure(BigNumber(slippage).multipliedBy(1e6).toFixed(0)),\n        tx.pure(deadline),\n        tx.pure(pathSize),\n      ],\n    });\n  } catch (error) {\n    console.log(\"InitPath ERROR\", error);\n  }\n};\n","import { TransactionBlock } from \"@mysten/sui.js\";\nimport { MODULE, SWAP_V3 } from \"../../constants\";\n\nexport const NextRouting = async (\n  coinInType: string,\n  coinOutType: string,\n  nextRouteCoinOutType: string,\n  routeObject: any,\n  nextRouteFeeTier: number,\n  nextRouteSqrtPrice: number,\n  txb?: TransactionBlock\n) => {\n  try {\n    let tx = new TransactionBlock();\n    if (txb) tx = txb;\n    // console.log(\n    //   \"NextRouting\",\n    //   coinInType,\n    //   coinOutType,\n    //   nextRouteCoinOutType,\n    //   nextRouteFeeTier,\n    //   nextRouteSqrtPrice\n    // );\n    tx.moveCall({\n      target: `${SWAP_V3.UNIVERSAL_ROUTER}::${MODULE.UNIVERSAL_ROUTER}::next`,\n      typeArguments: [coinInType, coinOutType, nextRouteCoinOutType],\n      arguments: [\n        routeObject,\n        tx.pure(nextRouteFeeTier),\n        tx.pure(nextRouteSqrtPrice),\n      ],\n    });\n  } catch (error) {\n    console.log(\"NextRouting ERROR\", error);\n  }\n};\n","import { TransactionArgument, TransactionBlock } from \"@mysten/sui.js\";\nimport {\n  ADD_LIQUIDITY_V3,\n  CONTAINER_OBJECT_ID,\n  FUNCTION,\n  MODULE,\n  SWAP_V3,\n} from \"../../constants\";\nimport { CLOCK_ID } from \"../../constants\";\n\nexport const SwapV2Handle = async (\n  routeObject: any,\n  coinInType: string,\n  coinOutType: string,\n  txb?: TransactionBlock\n): Promise<TransactionArgument & TransactionArgument[]> => {\n  let tx = new TransactionBlock();\n  if (txb) tx = txb;\n  return tx.moveCall({\n    target: `${SWAP_V3.UNIVERSAL_ROUTER}::${MODULE.UNIVERSAL_ROUTER}::${FUNCTION.FLOWX_SWAP}`,\n    typeArguments: [coinInType, coinOutType],\n    arguments: [routeObject, tx.object(CONTAINER_OBJECT_ID)],\n  });\n};\nexport const SwapV3Handle = async (\n  routeObject: any,\n  coinInType: string,\n  coinOutType: string,\n  txb?: TransactionBlock\n): Promise<TransactionArgument & TransactionArgument[]> => {\n  let tx = new TransactionBlock();\n  if (txb) tx = txb;\n  return tx.moveCall({\n    target: `${SWAP_V3.UNIVERSAL_ROUTER}::${MODULE.UNIVERSAL_ROUTER}::${FUNCTION.FLOWX_SWAP_CLMM}`,\n    typeArguments: [coinInType, coinOutType],\n    arguments: [\n      routeObject,\n      tx.object(ADD_LIQUIDITY_V3.POOL_REGISTRY_OBJ),\n      tx.object(ADD_LIQUIDITY_V3.VERSIONED_OBJ),\n      tx.object(CLOCK_ID),\n    ],\n  });\n};\n","import { TransactionArgument, TransactionBlock } from \"@mysten/sui.js\";\nimport { MODULE, SWAP_V3 } from \"../../constants\";\n\nexport const SwapKriyaHandle = async (\n  routeObject: any,\n  coinInType: string,\n  coinOutType: string,\n  swapXtoY: boolean,\n  poolId: string,\n  txb?: TransactionBlock\n): Promise<TransactionArgument & TransactionArgument[]> => {\n  let tx = new TransactionBlock();\n  if (txb) tx = txb;\n  return tx.moveCall({\n    target: `${SWAP_V3.UNIVERSAL_ROUTER}::${MODULE.UNIVERSAL_ROUTER}::${\n      swapXtoY ? \"kriya_swap_exact_x_to_y\" : \"kriya_swap_exact_y_to_x\"\n    }`,\n    typeArguments: [\n      swapXtoY ? coinInType : coinOutType,\n      swapXtoY ? coinOutType : coinInType,\n    ],\n    arguments: [routeObject, tx.object(poolId)],\n  });\n};\n","import { TransactionArgument, TransactionBlock } from \"@mysten/sui.js\";\nimport { MODULE, SWAP_V3 } from \"../../constants\";\nimport { CLOCK_ID } from \"../../constants\";\n\nexport const SwapCetusHandle = async (\n  routeObject: any,\n  coinInType: string,\n  coinOutType: string,\n  swapXtoY: boolean,\n  poolId: string,\n  txb?: TransactionBlock\n): Promise<TransactionArgument & TransactionArgument[]> => {\n  // console.log(\n  //   \"CETUS\",\n  //   routeObject,\n  //   coinInType,\n  //   coinOutType,\n  //   swapXtoY,\n  //   poolId,\n  //   CLOCK_ID\n  // );\n  let tx = new TransactionBlock();\n  if (txb) tx = txb;\n  return tx.moveCall({\n    target: `${SWAP_V3.UNIVERSAL_ROUTER}::${MODULE.UNIVERSAL_ROUTER}::${\n      swapXtoY ? \"cetus_swap_exact_x_to_y\" : \"cetus_swap_exact_y_to_x\"\n    }`,\n    typeArguments: [\n      swapXtoY ? coinInType : coinOutType,\n      swapXtoY ? coinOutType : coinInType,\n    ],\n    arguments: [\n      routeObject,\n      tx.object(\n        \"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f\"\n      ), //Global config\n      tx.object(poolId),\n      tx.object(CLOCK_ID),\n    ],\n  });\n};\n","import { TransactionArgument, TransactionBlock } from \"@mysten/sui.js\";\nimport { MODULE, SWAP_V3 } from \"../../constants\";\nimport { CLOCK_ID } from \"../../constants\";\n\nexport const SwapTurbosHandle = async (\n  routeObject: any,\n  coinInType: string,\n  coinOutType: string,\n  swapXtoY: boolean,\n  poolId: string,\n  feeTier: string | number,\n  txb?: TransactionBlock\n): Promise<TransactionArgument & TransactionArgument[]> => {\n  let tx = new TransactionBlock();\n  // console.log(\n  //   \"TURBOS\",\n  //   routeObject,\n  //   coinInType,\n  //   coinOutType,\n  //   swapXtoY,\n  //   poolId,\n  //   feeTier\n  // );\n  if (txb) tx = txb;\n  return tx.moveCall({\n    target: `${SWAP_V3.UNIVERSAL_ROUTER}::${MODULE.UNIVERSAL_ROUTER}::${\n      swapXtoY ? \"turbos_swap_exact_x_to_y\" : \"turbos_swap_exact_y_to_x\"\n    }`,\n    typeArguments: [\n      swapXtoY ? coinInType : coinOutType,\n      swapXtoY ? coinOutType : coinInType,\n      `0x91bfbc386a41afcfd9b2533058d7e915a1d3829089cc268ff4333d54d6339ca1::fee${feeTier}bps::FEE${feeTier}BPS`,\n    ],\n    arguments: [\n      routeObject,\n      tx.object(poolId),\n      tx.object(\n        \"0xf1cf0e81048df168ebeb1b8030fad24b3e0b53ae827c25053fff0779c1445b6f\"\n      ), //Version\n      tx.object(CLOCK_ID),\n    ],\n  });\n};\n","import { TransactionArgument, TransactionBlock } from \"@mysten/sui.js\";\nimport { MODULE, SWAP_V3 } from \"../../constants\";\n\nexport const SwapAfterMathHandle = async (\n  routeObject: any,\n  lpType: string,\n  coinInType: string,\n  coinOutType: string,\n  poolId: string,\n  amountOut: string,\n  txb?: TransactionBlock\n): Promise<TransactionArgument & TransactionArgument[]> => {\n  let tx = new TransactionBlock();\n  if (txb) tx = txb;\n  return tx.moveCall({\n    target: `${SWAP_V3.UNIVERSAL_ROUTER}::${MODULE.UNIVERSAL_ROUTER}::aftermath_swap_exact_input`,\n    typeArguments: [lpType, coinInType, coinOutType],\n    arguments: [\n      routeObject,\n      tx.object(\n        \"0xfcc774493db2c45c79f688f88d28023a3e7d98e4ee9f48bbf5c7990f651577ae\"\n      ), // pool_registry\n      tx.object(poolId),\n      tx.object(\n        \"0xf194d9b1bcad972e45a7dd67dd49b3ee1e3357a00a50850c52cd51bb450e13b4\"\n      ), // protocol_fee_vault\n      tx.object(\n        \"0x28e499dff5e864a2eafe476269a4f5035f1c16f338da7be18b103499abf271ce\"\n      ), // treasury\n      tx.object(\n        \"0xf0c40d67b078000e18032334c3325c47b9ec9f3d9ae4128be820d54663d14e3b\"\n      ), // insurance_fund\n      tx.object(\n        \"0x35d35b0e5b177593d8c3a801462485572fc30861e6ce96a55af6dc4730709278\"\n      ), //referral_vault\n      tx.pure(amountOut), // Amount out from paths api\n    ],\n  });\n};\n","import { TransactionArgument, TransactionBlock } from \"@mysten/sui.js\";\nimport { CLOCK_ID, MODULE, SWAP_V3 } from \"../../constants\";\n\nexport const SwapDeepBookHandle = async (\n  routeObject: any,\n  coinInType: string,\n  coinOutType: string,\n  swapXtoY: boolean,\n  poolId: string,\n  txb?: TransactionBlock\n): Promise<TransactionArgument & TransactionArgument[]> => {\n  try {\n    let tx = new TransactionBlock();\n    if (txb) tx = txb;\n    return tx.moveCall({\n      target: `${SWAP_V3.UNIVERSAL_ROUTER}::${MODULE.UNIVERSAL_ROUTER}::${\n        swapXtoY\n          ? \"deepbook_swap_exact_base_for_quote\"\n          : \"deepbook_swap_exact_quote_for_base\"\n      }`,\n      typeArguments: [\n        swapXtoY ? coinInType : coinOutType,\n        swapXtoY ? coinOutType : coinInType,\n      ],\n      arguments: [\n        tx.object(SWAP_V3.UNIVERSAL_TREASURY),\n        routeObject,\n        tx.object(poolId),\n        tx.object(CLOCK_ID),\n      ],\n    });\n  } catch (error) {\n    console.log(\"SwapDeepBookHandle ERROR\", error);\n  }\n};\n","import { TransactionBlock } from \"@mysten/sui.js\";\nimport { ISmartPathV3, Route } from \"../../types\";\nimport { estimateDealine, standardizeType } from \"../../utils\";\nimport { BigNumber } from \"../../BigNumber\";\nimport { MAX_SQRT_PRICE, MIN_SQRT_PRICE } from \"../../constants\";\nimport { InitPath } from \"./InitPath\";\nimport { InitRouting } from \"./InitRouting\";\nimport { NextRouting } from \"./NextRouting\";\nimport { SwapV2Handle, SwapV3Handle } from \"./SwapFlowXHandle\";\nimport { SwapKriyaHandle } from \"./SwapKriyaHandle\";\nimport { SwapCetusHandle } from \"./SwapCetusHandle\";\nimport { SwapTurbosHandle } from \"./SwapTurbosHandle\";\nimport { SwapAfterMathHandle } from \"./SwapAftermathHandle\";\nimport { SwapDeepBookHandle } from \"./SwapDeepBookHandle\";\n\nexport const routeTxBuild = async (\n  route: Route,\n  slippage: number,\n  tx: TransactionBlock,\n  routeObject: any,\n  coinObjectIn: any,\n  routeIndex: number,\n  path: ISmartPathV3,\n  amountOut: number\n): Promise<any> => {\n  try {\n    const coinTypeIn = standardizeType(route.coinX.coinType),\n      coinTypeOut = standardizeType(route.coinY.coinType);\n    if (routeIndex === 0) {\n      let sqrtPrice = \"0\";\n      if (route?.sqrtPrice && route?.swapXtoY !== undefined) {\n        const rate = route?.swapXtoY\n          ? BigNumber(1).minus(0.15)\n          : BigNumber(1).plus(0.15);\n        const sqrtPriceCalc = rate.multipliedBy(route?.sqrtPrice).toFixed(0);\n        sqrtPrice = BigNumber(sqrtPriceCalc).isGreaterThan(MAX_SQRT_PRICE)\n          ? MAX_SQRT_PRICE\n          : BigNumber(sqrtPriceCalc).isLessThan(MIN_SQRT_PRICE)\n          ? MIN_SQRT_PRICE\n          : sqrtPriceCalc;\n      }\n      const [firstPath] = await InitPath(\n        coinTypeIn,\n        coinTypeOut,\n        coinObjectIn,\n        route?.fee ?? 0,\n        sqrtPrice,\n        tx\n      );\n      [routeObject] = await InitRouting(\n        coinTypeIn,\n        coinTypeOut,\n        firstPath,\n        amountOut,\n        slippage,\n        estimateDealine(),\n        path.info.routes.length,\n        tx\n      );\n    }\n    // console.log('XXXXX', routeIndex, path.info.routes);\n\n    const protocol = route.protocol;\n    if (protocol === \"FLOWX_CLMM\" || protocol === \"FLOWX\") {\n      if (route.sqrtPrice) {\n        await SwapV3Handle(routeObject, coinTypeIn, coinTypeOut, tx);\n      } else {\n        // console.log('go here');\n        await SwapV2Handle(routeObject, coinTypeIn, coinTypeOut, tx);\n      }\n    }\n    if (protocol === \"KRIYA\")\n      await SwapKriyaHandle(\n        routeObject,\n        coinTypeIn,\n        coinTypeOut,\n        route.swapXtoY,\n        route.poolId,\n        tx\n      );\n    if (protocol === \"CETUS\")\n      await SwapCetusHandle(\n        routeObject,\n        coinTypeIn,\n        coinTypeOut,\n        route.swapXtoY,\n        route.poolId,\n        tx\n      );\n    if (protocol === \"TURBOS\") {\n      await SwapTurbosHandle(\n        routeObject,\n        coinTypeIn,\n        coinTypeOut,\n        route.swapXtoY,\n        route.poolId,\n        route.fee,\n        tx\n      );\n    }\n    if (protocol === \"AFTERMATH\") {\n      await SwapAfterMathHandle(\n        routeObject,\n        route.lpType,\n        coinTypeIn,\n        coinTypeOut,\n        route.poolId,\n        route.amountOut.toFixed(0),\n        tx\n      );\n    }\n    if (protocol === \"DEEPBOOK\") {\n      await SwapDeepBookHandle(\n        routeObject,\n        coinTypeIn,\n        coinTypeOut,\n        route.swapXtoY,\n        route.poolId,\n        tx\n      );\n    }\n    const nextRoute = path.info.routes[routeIndex + 1];\n    if (nextRoute) {\n      const {\n        coinY,\n        fee: feeTier,\n        sqrtPrice: sqrtPriceLimit,\n        swapXtoY,\n      } = nextRoute;\n      // console.log('sqrtPriceLimit', sqrtPriceLimit.toString(), route.sqrtPrice.toString());\n      let sqrtPrice = \"0\";\n      if (sqrtPriceLimit && swapXtoY !== undefined) {\n        const rate = nextRoute?.swapXtoY\n          ? BigNumber(1).minus(0.15)\n          : BigNumber(1).plus(0.15);\n        const sqrtPriceCalc = rate.multipliedBy(sqrtPriceLimit).toFixed(0);\n        sqrtPrice = BigNumber(sqrtPriceCalc).isGreaterThan(MAX_SQRT_PRICE)\n          ? MAX_SQRT_PRICE\n          : BigNumber(sqrtPriceCalc).isLessThan(MIN_SQRT_PRICE)\n          ? MIN_SQRT_PRICE\n          : sqrtPriceCalc;\n        sqrtPrice = sqrtPriceCalc.toString();\n      }\n      // console.log(\"nextRoute\", nextRoute);\n      await NextRouting(\n        coinTypeIn,\n        coinTypeOut,\n        coinY.coinType,\n        routeObject,\n        feeTier ?? 0,\n        +sqrtPrice,\n        tx\n      );\n    }\n    return { routeObject, tx };\n  } catch (error) {\n    console.log(\"buildTxRouteFlowX ERROR\", error);\n  }\n};\n","import { TransactionArgument, TransactionBlock } from \"@mysten/sui.js\";\nimport { CLOCK_ID, FUNCTION, MODULE, SWAP_V3 } from \"../../constants\";\n\nexport const SettleRouting = async (\n  coinInType: string,\n  coinOutType: string,\n  routeObject: any,\n  account: string,\n  txb?: TransactionBlock\n): Promise<TransactionArgument & TransactionArgument[]> => {\n  try {\n    let tx = new TransactionBlock();\n    if (txb) tx = txb;\n    // console.log(\"SettleRouting\", coinInType, coinOutType);\n    const [coinYObject] = tx.moveCall({\n      target: `${SWAP_V3.UNIVERSAL_ROUTER}::${MODULE.UNIVERSAL_ROUTER}::${FUNCTION.SETTLE_ROUTING_V3}`,\n      typeArguments: [coinInType, coinOutType],\n      arguments: [\n        tx.object(SWAP_V3.UNIVERSAL_TREASURY),\n        routeObject,\n        tx.object(CLOCK_ID),\n      ],\n    });\n    return tx.transferObjects([coinYObject], tx.pure(account));\n  } catch (error) {\n    console.log(\"SettleRouting ERROR\", error);\n  }\n};\n","import { BigNumber } from \"../../BigNumber\";\nimport Lodash from \"../../lodash\";\nimport { ISmartPathV3 } from \"../../types\";\nimport { standardizeType } from \"../../utils\";\nimport { getSplitCoinForTx } from \"./GetSplitCoinForTx\";\nimport { routeTxBuild } from \"./RouteTxBuild\";\nimport { SettleRouting } from \"./SettleRouting\";\n\nexport const txBuild = async (\n  listSmartPath: ISmartPathV3[],\n  slippage: number,\n  amountIn: string,\n  amountOut: string,\n  coinInType: string,\n  account: string,\n  pathsAmountOut?: string[]\n) => {\n  // console.log(\n  //   \"AA\",\n  //   listSmartPath,\n  //   slippage,\n  //   amountIn,\n  //   amountOut,\n  //   inspecTransaction,\n  //   coinInType,\n  //   inspecTransaction\n  // );\n  if (!account) return;\n  let rates = Lodash.map(listSmartPath, \"rate\");\n  // console.log('AAAA', listSmartRoute, amountIn, coinIn.symbol, coinIn.decimals);\n  const listAmountInDecimal = listSmartPath.map((i) =>\n    i.info.amountIn.toFixed(0)\n  );\n  // console.log('listSmartRoute', listSmartRoute);\n  let { tx, coinData } = await getSplitCoinForTx(\n    account,\n    amountIn,\n    listAmountInDecimal,\n    coinInType\n  );\n  // console.log(\"JJJJ\", inspecTransaction, coinInType);\n  for (const rateIndex in rates) {\n    let routeObject: any = null,\n      path = listSmartPath[rateIndex],\n      coinObjectIn = coinData[rateIndex];\n    for (const [routeIndex] of path.info.routes.entries()) {\n      // console.log(\"routeIndex\", routeIndex);\n      const route = path.info.routes[routeIndex];\n      // console.log(\"route\", route);\n      const { routeObject: tempObject, tx: tempTx } = await routeTxBuild(\n        route,\n        !pathsAmountOut ? 1 : slippage,\n        tx,\n        routeObject,\n        coinObjectIn,\n        routeIndex,\n        path,\n        !pathsAmountOut\n          ? +BigNumber(amountOut).toFixed(0)\n          : +pathsAmountOut[rateIndex]\n      );\n      routeObject = tempObject;\n      tx = tempTx;\n      if (routeIndex === path.info.routes.length - 1) {\n        // console.log('ok');\n        await SettleRouting(\n          standardizeType(route.coinX.coinType),\n          standardizeType(route.coinY.coinType),\n          routeObject,\n          account,\n          tx\n        );\n      }\n    }\n  }\n  return tx;\n};\n","import { BigNumber } from \"../BigNumber\";\nimport { CoinMetadata } from \"../types\";\nimport { getBalanceAmount } from \"../utils\";\n\nexport const estimatePriceImpact = (\n  amountInDecimal: string | number,\n  amountOutDecimal: string | number,\n  coinIn?: CoinMetadata,\n  coinOut?: CoinMetadata\n): string => {\n  const amountIn = coinIn\n    ? getBalanceAmount(amountInDecimal, coinIn?.decimals).toFixed()\n    : \"0\";\n  const amountOut = coinOut\n    ? getBalanceAmount(amountOutDecimal, coinOut.decimals).toFixed()\n    : \"0\";\n  const amountInUsd = BigNumber(amountIn).multipliedBy(\n    coinIn.derivedPriceInUSD\n  );\n  const amountOutUsd = BigNumber(amountOut).multipliedBy(\n    coinOut.derivedPriceInUSD\n  );\n  const priceImpacts =\n    amountOutUsd.isEqualTo(0) || amountInUsd.isEqualTo(0)\n      ? \"0\"\n      : amountOutUsd\n          .minus(amountInUsd)\n          .div(amountInUsd)\n          .multipliedBy(-100)\n          .toFixed();\n  return priceImpacts;\n};\n","import { CoinMetadata, ISmartPathV3 } from \"../types\";\nimport { getBalanceAmount } from \"../utils\";\nimport { BigNumber, BigNumber as BN } from \"../BigNumber\";\nimport { estimateGasFee } from \"./libs/EstimateGasFee\";\nimport { txBuild } from \"./libs/Txbuild\";\nimport { TransactionBlock } from \"@mysten/sui.js\";\nimport Lodash from \"../lodash\";\nimport { estimatePriceImpact } from \"./estimatePriceImpact\";\n\nexport const computeSwapExactIn = async (\n  paths: ISmartPathV3[],\n  amountIn: string | number,\n  amountOut: string | number, // total out from all path (api)\n  coinIn: CoinMetadata,\n  coinOut: CoinMetadata,\n  slippage: number,\n  account: string\n): Promise<{\n  gasFee: string;\n  priceChange: boolean;\n  totalAmountOutInspec: string;\n  inRate: string;\n  outRate: string;\n  tx: TransactionBlock;\n  priceImpact: string;\n}> => {\n  try {\n    if (\n      paths.length > 0 &&\n      BigNumber(coinIn.balance ?? 0).isGreaterThanOrEqualTo(amountIn)\n    ) {\n      const tx = await txBuild(\n        paths,\n        slippage,\n        amountIn + \"\",\n        amountOut + \"\",\n        coinIn.type,\n        account\n      );\n      const estimateResult = await estimateGasFee(tx, account);\n      // console.log(\"estimateResult\", estimateResult);\n      if (estimateResult) {\n        const { fee, amountOut: amountOutDev, pathsAmountOut } = estimateResult;\n        let priceChange = false;\n        const txb = await txBuild(\n          paths,\n          slippage,\n          amountIn.toString(),\n          amountOutDev,\n          coinIn.type,\n          account,\n          pathsAmountOut\n        );\n        const inAmountFormat = getBalanceAmount(\n            amountIn,\n            coinIn.decimals\n          ).toFixed(),\n          outAmountFormat = getBalanceAmount(\n            amountOutDev,\n            coinOut?.decimals\n          ).toFixed(),\n          outRate = BigNumber(inAmountFormat).div(outAmountFormat).toFixed(),\n          inRate = BigNumber(outAmountFormat).div(inAmountFormat).toFixed();\n        const differRate = BigNumber(amountOutDev)\n          .minus(amountOut)\n          .div(amountOut)\n          .toFixed();\n        priceChange = BigNumber(differRate).abs().gt(0.005);\n        const priceImpact = estimatePriceImpact(\n          amountIn,\n          amountOutDev,\n          coinIn,\n          coinOut\n        );\n        return {\n          totalAmountOutInspec: amountOutDev,\n          gasFee: fee,\n          priceImpact,\n          priceChange,\n          inRate,\n          outRate,\n          tx: txb,\n        };\n      }\n    }\n  } catch (error) {\n    throw error;\n  }\n};\n","import axios from \"axios\";\nimport { BigNumber } from \"../BigNumber\";\nimport { ISmartRouting, Route, TSourceSmartRouting } from \"../types\";\nimport { standardizeType } from \"../utils\";\nimport { normalizeStructTag } from \"@mysten/sui.js\";\nexport const getSmartRouting = async (\n  tokenIn: string,\n  tokenOut: string,\n  amountIn: string,\n  signal: any,\n  source?: TSourceSmartRouting[]\n): Promise<ISmartRouting> => {\n  try {\n    // &includeSources=FLOWX\n    let response = await axios.get(\n      `https://api.flowx.finance/flowx-ag-routing/api/v1/quote?tokenIn=${normalizeStructTag(\n        tokenIn\n      )}&tokenOut=${normalizeStructTag(tokenOut)}&amountIn=${amountIn}${\n        source?.length > 0 ? `&includeSources=${source.join(\",\")}` : \"\"\n      }`,\n      // `https://flowx-dev.flowx.finance/flowx-ag-routing/api/v1/quote?tokenIn=${tokenIn}&tokenOut=${tokenOut}&amountIn=${amountIn}`,\n      { signal }\n    );\n    // console.log(\"response\", response);\n    if (!response.data.data) return { amountOut: \"0\", paths: [] };\n    const smartPathData = response.data.data;\n    // console.log(\"smartPathData\", smartPathData);\n    const smartAmountIn = smartPathData.amountIn,\n      smartAmountOut = smartPathData.amountOut;\n    const listPath = smartPathData.paths.map((path: any) => {\n      const coinTypeIn = standardizeType(path[0].tokenIn),\n        coinTypeOut = standardizeType(path[path.length - 1].tokenOut),\n        pathAmountIn = BigNumber(path[0].amountIn),\n        pathAmountOut = BigNumber(path[path.length - 1].amountOut);\n\n      const routes = path.map((j: any) => {\n        let data: Route = {\n          protocol: j.source,\n          sourceType: j.sourceType,\n          poolId: j.poolId,\n          coinX: { coinType: standardizeType(j.tokenIn) },\n          coinY: { coinType: standardizeType(j.tokenOut) },\n          amountIn: BigNumber(j.amountIn),\n          amountOut: BigNumber(j.amountOut),\n        };\n        if (j.extra) {\n          const {\n            nextStateSqrtRatioX64,\n            nextStateLiquidity,\n            nextStateTickCurrent,\n            fee,\n            swapXToY,\n            lpCoinType,\n          } = j.extra;\n          data.sqrtPrice = nextStateSqrtRatioX64;\n          data.liquidity = nextStateLiquidity;\n          data.tickIndex = nextStateTickCurrent;\n          data.fee = fee;\n          data.swapXtoY = swapXToY;\n          data.lpType = lpCoinType;\n        }\n        return data;\n      });\n\n      return {\n        info: {\n          routes,\n          amountIn: pathAmountIn,\n          amountOut: pathAmountOut,\n          coinTypeOut,\n          coinTypeIn,\n        },\n        rate: +pathAmountIn.div(smartAmountIn).multipliedBy(100).toFixed(),\n      };\n    });\n    return {\n      amountOut: smartAmountOut,\n      paths: listPath,\n    };\n  } catch (error) {\n    console.log(\"getSmartRouting ERROR\", error);\n    return { amountOut: \"0\", paths: [] };\n  }\n};\n","import { TransactionBlock } from \"@mysten/sui.js\";\nimport BigNumber from \"bignumber.js\";\n\nexport interface PairStats {\n  volume7D: number | string;\n  volume24H: number | string;\n  transaction24H: number | string;\n  totalLiquidity: number | string;\n  fee24H: number | string;\n  aprPerformance7D: number | string;\n  totalLiquidityInUSD: string | number;\n}\nexport interface PairRanking {\n  reserveY: number | string;\n  reserveX: number | string;\n  lpType: string;\n  explorerUrl?: string;\n  coinYType: string;\n  coinXType: string;\n  isNewPair?: boolean;\n  createdBy?: string;\n  lpObjectId: string;\n  lpName?: string;\n  createdAtTimestamp: number | null;\n  stats: PairStats;\n}\nexport interface CoinStats {\n  totalLiquidityInUSD: number | string;\n  priceChange24H: number | string;\n  price: number | string;\n  volume7D: number | string;\n  volume24H: number | string;\n  transaction24H: number | string;\n  totalLiquidity: number | string;\n  fee24H: number | string;\n}\nexport interface CoinMetadata {\n  type: string;\n  decimals: number;\n  description?: string;\n  iconUrl?: string;\n  isVerified?: boolean;\n  symbol?: string;\n  balance?: string;\n  derivedSUI?: string;\n  derivedPriceInUSD?: string;\n  name?: string;\n  id?: string;\n  stats?: CoinStats;\n  twitterUrl?: string;\n  websiteUrl?: string;\n  coinMarketcapUrl?: string;\n  coingeckoUrl?: string;\n  __typename?: string;\n}\nexport interface ICoinBalance {\n  balance: string;\n  type: string;\n}\nexport type Reserve = {\n  fields: {\n    balance: string;\n  };\n  type: string;\n};\nexport interface IPoolInfo {\n  objectId?: string;\n  reserveX?: Reserve;\n  reserveY?: Reserve;\n  totalLpSupply?: string;\n  coinX?: string;\n  coinY?: string;\n  lpType?: string;\n  feeRate?: number;\n}\nexport interface IRawCoins {\n  coinX?: string;\n  coinY?: string;\n}\nexport interface IFullDataCoins {\n  coinX?: CoinMetadata;\n  coinY?: CoinMetadata;\n  apr?: string;\n  lpValue?: string;\n  userLpBalance?: string;\n}\nexport interface IPools {\n  coinXType?: string;\n  coinYType?: string;\n  createdAtTimestamp?: number;\n  createdBy?: string;\n  explorerUrl?: string;\n  feeRate?: number;\n  lpName?: string;\n  lpObjectId?: string;\n  lpType?: string;\n  objectId?: string;\n  stats?: {\n    aprPerformance7D?: string;\n    fee24H?: string;\n    totalLiquidity?: string;\n    totalLiquidityInUSD?: string;\n    transaction24H?: number;\n    volume7D: string;\n    volume24H?: string;\n    __typename?: string;\n  };\n  totalLpSupply?: string;\n  reserveX?: Reserve;\n  reserveY?: Reserve;\n  __typename?: string;\n}\nexport interface IGetLpPrice {\n  poolInfo: IPools;\n  coinX: CoinMetadata;\n  coinY: CoinMetadata;\n}\nexport interface ILiquidity extends IFullDataCoins, IPools {}\nexport interface IPoolInfos extends IRawCoins, IPools {}\nexport interface IFaasUserRw {\n  token: CoinMetadata;\n  amount: string;\n}\nexport interface IGenesisUserJoin {\n  type: string;\n  lp_locked_amount: string;\n  xflx_locked_amount: string;\n  id: string;\n  pool_id: string;\n  pool_idx: string;\n  acc_pending_rewards: string;\n}\nexport interface IGenesisPoolsData {\n  totalLpDeposit: string;\n  totalXFlxDeposit: string;\n  totalPendingReward: string;\n  coinX: CoinMetadata;\n  coinY: CoinMetadata;\n}\nexport interface IAprPdrwposition {\n  apr: string;\n  pendingReward: string;\n  __typename: string;\n}\nexport interface IFaasData {\n  coinX: CoinMetadata;\n  coinY: CoinMetadata;\n  userReward: IFaasUserRw[];\n  totalLpDeposit: string;\n}\nexport interface IPairsRankingItem {\n  reserveX: number;\n  reserveY: number;\n  stats: {\n    volume7D: string;\n    volume24H: string;\n    transaction24H: number;\n    totalLiquidityInUSD: string;\n    totalLiquidity: string;\n    fee24H: string;\n    aprPerformance7D: string;\n  };\n  lpType: string;\n  lpObjectId: string;\n  lpName: string;\n  explorerUrl: string;\n  createdBy: string;\n  createdAtTimestamp: number;\n  coinY: string;\n  coinX: string;\n}\nexport interface IFaasV2 {\n  id: string;\n  poolIndex: string;\n  started_at_ms: string | number;\n  ended_at_ms: string | number;\n  creator: string;\n  totalLiquid: string | number;\n  totalLiquidDecimal: string | number;\n  totalLpDeposit: string;\n  rewardApr: string;\n  tradingApr: string;\n  userReward: IFaasUserRw[];\n  poolReward: IFaasUserRw[];\n  isLegacy: boolean;\n  lpPrice: string;\n  poolLiquid: IPoolInfo;\n}\nexport class Coin {\n  coinType: string;\n}\nexport type Amount = {\n  amount: number | string;\n  decimalAmount: number | string;\n};\nexport interface GetSplitSmartRoute {\n  path: {\n    routes: Route[];\n    amountIn: string;\n    amountOut: string;\n    coinTypeOut: string;\n    coinTypeIn: string;\n  };\n  rate: number;\n}\nexport interface PairSetting {\n  _id?: string;\n  coinXType: string;\n  coinYType: string;\n  createdBy?: string;\n  createdAt?: string;\n  isNewPair?: boolean;\n  lpType?: string;\n  lpName?: string;\n  userLpBalance?: string;\n  reserveX?: string;\n  reserveY?: string;\n  lpObjectId?: string;\n  inRate?: string;\n  outRate?: string;\n  stats?: PairStats;\n}\nexport type PoolInfo = {\n  objectId?: string;\n  reserveX?: Reserve;\n  reserveY?: Reserve;\n  totalLpSupply?: string;\n  coinX?: string;\n  coinY?: string;\n  lpType?: string;\n  feeRate?: number;\n  kLast?: string;\n};\nexport type SmartRoute = {\n  amountIn?: string | number;\n  amountOut?: string | number;\n  routes?: {\n    coinTypeIn?: string;\n    coinTypeOut?: string;\n    amountIn?: string | number;\n    amountOut?: string | number;\n    pair?: PairSetting;\n  }[];\n};\nexport interface SwapArgs {\n  typeArguments: string[];\n  args: any[];\n  tx: TransactionBlock;\n  callFunction: string;\n}\nexport interface ICalcAmountExact {\n  amountIn: Amount;\n  amountOut: Amount;\n  trades: PairSetting[];\n  smartRoute: SmartRoute;\n}\nexport interface IGetPools {\n  poolInfos: IPools[];\n  pairs: PairSetting[];\n}\n\nexport class Route {\n  protocol?: string;\n  lpObjectId?: string;\n  pairId?: string;\n  pairType?: string;\n  fee?: number;\n  coinX?: Coin;\n  coinY?: Coin;\n  reserveX?: number;\n  reserveY?: number;\n  amountIn?: BigNumber;\n  amountOut?: BigNumber;\n  //V3\n  poolId?: string;\n  sourceType?: string;\n  sqrtPrice?: string;\n  liquidity?: string;\n  tickIndex?: string;\n  swapXtoY?: boolean;\n  lpType?: string;\n}\nexport interface ISmartPathV3 {\n  info: {\n    routes: Route[];\n    amountIn: BigNumber;\n    amountOut: BigNumber;\n    coinTypeOut: string;\n    coinTypeIn: string;\n  };\n  rate: number;\n}\nexport interface ISmartRouting {\n  paths: ISmartPathV3[];\n  amountOut: string;\n}\nexport interface ITradeRateItem {\n  coinInType: string;\n  coinOutType: string;\n  outRate: string;\n  inRate: string;\n}\nexport interface IEstimateGasResult {\n  fee: string;\n  amountOut: string;\n  pathsAmountOut: string[];\n}\nexport type TSourceSmartRouting =\n  | \"FLOWX\"\n  | \"FLOWX_CLMM\"\n  | \"KRIYA\"\n  | \"TURBOS\"\n  | \"CETUS\"\n  | \"AFTERMATH\"\n  | \"DEEPBOOK\";\nexport interface IPriceWithTick {\n  price: string;\n  sqrtPrice?: string;\n  tickIndex: number;\n}\nexport interface IPortionItem {\n  amount: string;\n  amountInUsd: string;\n}\nexport interface IPortionItemWithPercent extends IPortionItem {\n  percentage: string;\n}\nexport interface ILpCoinPortionWithPercent {\n  coinX: IPortionItemWithPercent;\n  coinY: IPortionItemWithPercent;\n}\nexport interface ILpCoinPortion {\n  coinX: IPortionItem;\n  coinY: IPortionItem;\n}\nexport interface ILpV3Rw {\n  rewardX: string;\n  rewardY: string;\n}\nexport interface ILpV3Unclaimed extends ILpCoinPortion {\n  totalInUsd: string;\n}\nexport interface ICurrentPricePD extends IPriceWithTick {\n  sqrtPrice: string;\n}\nexport interface IPoolRewardV3 {\n  amount: string;\n  coin: CoinMetadata;\n}\nexport interface IUserLiquidV3Position {\n  coinX: CoinMetadata;\n  coinY: CoinMetadata;\n  currentPortion: ILpCoinPortion;\n  positionLiquid: string;\n  positionId: string;\n  minPrice: ICurrentPricePD;\n  maxPrice: ICurrentPricePD;\n  currentPrice: ICurrentPricePD;\n  poolLiquid: string;\n  feeRate: string;\n  reward: ILpV3Rw;\n  apr: string;\n  id: string;\n  poolReward: IPoolRewardV3[];\n}\nexport interface IPoolInfoV3Brief {\n  feeGrowthGlobalX: string;\n  feeGrowthGlobalY: string;\n  liquidity: string;\n  locked: boolean;\n  maxLiquidityPerTick: string;\n  protocolFeeRate: string;\n  protocolFeeX: string;\n  protocolFeeY: string;\n  sqrtPrice: string;\n  feeRate: string;\n}\nexport interface ILpCoin {\n  coinX: CoinMetadata | null;\n  coinY: CoinMetadata | null;\n}\nexport interface ITransactionClmm {\n  amountXIn: string;\n  amountXOut: string;\n  amountYIn: string;\n  amountYOut: string;\n  coinX: CoinMetadata;\n  coinY: CoinMetadata;\n  eventSeq: string;\n  sender: string;\n  timestamp: string;\n  totalAmountInUSD: string;\n  txDigest: string;\n  type: string;\n}\nexport interface IPDV3State extends IPoolInfoV3Brief, ILpCoin {\n  currentPrice: ICurrentPricePD;\n  currentPortion: ILpCoinPortionWithPercent;\n  positionLiquid: string;\n  isOwned: boolean;\n  minPrice: ICurrentPricePD;\n  maxPrice: ICurrentPricePD;\n  reward: ILpV3Rw;\n  unClaimedLiquid: ILpV3Unclaimed;\n  id: string;\n  apr: string;\n  poolReward: IPoolRewardV3[];\n  ticks: ChartEntry[];\n  history: ITransactionClmm[];\n}\nexport interface ITickClmm {\n  liquidityNet: string;\n  liquidityGross: string;\n  tick: number;\n}\nexport interface ChartEntry {\n  activeLiquidity: number;\n  price0: number;\n  liquidityNet: number;\n  tick: number;\n}\nexport interface IGetTransactionClmm {\n  poolId: string;\n  positionId: string;\n  page: number;\n  size: number;\n  sender: string;\n}\nexport type TCachingRequest =\n  | \"no-cache\"\n  | \"no-store\"\n  | \"force-cache\"\n  | \"only-if-cached\"\n  | \"reload\"\n  | \"default\";\n// export interface IClient {\n//   signal?: AbortSignal;\n//   cache?: TCachingRequest;\n// }\nexport interface IFeeTierV3 {\n  value: number;\n  valueDecimal: number;\n  spacing: number;\n}\nexport interface IDataPools {\n  typeCoinX: string;\n  typeCoinY: string;\n  feeRate: string;\n  id: string;\n}\nexport interface IGetClmmPoolDetail {\n  volume24H?: string;\n  fee24H?: string;\n  fee7D?: string;\n  apr?: string;\n  totalLiquidityInUSD?: string;\n  liquidityUSDX?: string;\n  liquidityUSDY?: string;\n}\nexport interface IPoolInfoV3 extends IGetClmmPoolDetail {\n  typeCoinX: string;\n  typeCoinY: string;\n  liquidity: string;\n  sqrtPrice: string;\n  feeRate: number;\n  reserveX: string;\n  reserveY: string;\n  id: string;\n  totalLiquid: string;\n  volume24h?: string;\n  fee24h?: string;\n  fee7d?: string;\n  apr?: string;\n  rewardApr: string;\n  currentPrice: string;\n  currentTickIndex: number;\n}\nexport interface IGetClmmTicks {\n  _id: string;\n  liquidityGross: string;\n  liquidityNet: string;\n  pool: string;\n  tick: number;\n}\n"],"mappings":"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","names":["res","item","i","type","_a","TransactionBlock","BN","Decimal","MAX_SQRT_PRICE","MIN_SQRT_PRICE","FEE_RATE_DENOMINATOR","BN","BN","BN","BN","BN","MAX_SQRT_PRICE","MIN_SQRT_PRICE","BN","FEE_RATE_DENOMINATOR","BN","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","_a","_b","TransactionBlock","BN","_c","TransactionBlock","TransactionBlock","coin","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","gql","isObject","TransactionBlock","TransactionBlock","pureAmount","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock","TransactionBlock"]}