@alphafi/alphafi-sdk 0.0.24 → 0.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/common/coins.d.ts.map +1 -1
- package/dist/cjs/common/coins.js +6 -0
- package/dist/cjs/common/coins.js.map +1 -1
- package/dist/cjs/common/constants.d.ts.map +1 -1
- package/dist/cjs/common/constants.js +64 -10
- package/dist/cjs/common/constants.js.map +1 -1
- package/dist/cjs/common/maps.d.ts.map +1 -1
- package/dist/cjs/common/maps.js +64 -2
- package/dist/cjs/common/maps.js.map +1 -1
- package/dist/cjs/common/types.d.ts.map +1 -1
- package/dist/cjs/common/types.js +1 -0
- package/dist/cjs/common/types.js.map +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +6 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/sui-sdk/events/fetchAutoCompoundingEvents.d.ts.map +1 -1
- package/dist/cjs/sui-sdk/events/fetchAutoCompoundingEvents.js +140 -71
- package/dist/cjs/sui-sdk/events/fetchAutoCompoundingEvents.js.map +1 -1
- package/dist/cjs/sui-sdk/events/fetchEvents.d.ts.map +1 -1
- package/dist/cjs/sui-sdk/events/fetchEvents.js +11 -0
- package/dist/cjs/sui-sdk/events/fetchEvents.js.map +1 -1
- package/dist/cjs/sui-sdk/events/types.d.ts.map +1 -1
- package/dist/cjs/sui-sdk/events/types.js.map +1 -1
- package/dist/cjs/sui-sdk/functions/getPortfolioAmounts.d.ts.map +1 -1
- package/dist/cjs/sui-sdk/functions/getPortfolioAmounts.js +10 -6
- package/dist/cjs/sui-sdk/functions/getPortfolioAmounts.js.map +1 -1
- package/dist/cjs/utils/clmm/prices.js +3 -3
- package/dist/cjs/utils/clmm/prices.js.map +1 -1
- package/dist/cjs/utils/hop.d.ts.map +1 -1
- package/dist/cjs/utils/hop.js +4 -5
- package/dist/cjs/utils/hop.js.map +1 -1
- package/dist/cjs/utils/prices.d.ts.map +1 -1
- package/dist/cjs/utils/prices.js +34 -120
- package/dist/cjs/utils/prices.js.map +1 -1
- package/dist/cjs/utils/userHoldings.d.ts.map +1 -1
- package/dist/cjs/utils/userHoldings.js +3 -1
- package/dist/cjs/utils/userHoldings.js.map +1 -1
- package/dist/esm/common/coins.d.ts.map +1 -1
- package/dist/esm/common/coins.js +6 -0
- package/dist/esm/common/coins.js.map +1 -1
- package/dist/esm/common/constants.d.ts.map +1 -1
- package/dist/esm/common/constants.js +64 -10
- package/dist/esm/common/constants.js.map +1 -1
- package/dist/esm/common/maps.d.ts.map +1 -1
- package/dist/esm/common/maps.js +64 -2
- package/dist/esm/common/maps.js.map +1 -1
- package/dist/esm/common/types.d.ts.map +1 -1
- package/dist/esm/common/types.js +1 -0
- package/dist/esm/common/types.js.map +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/sui-sdk/events/fetchAutoCompoundingEvents.d.ts.map +1 -1
- package/dist/esm/sui-sdk/events/fetchAutoCompoundingEvents.js +140 -71
- package/dist/esm/sui-sdk/events/fetchAutoCompoundingEvents.js.map +1 -1
- package/dist/esm/sui-sdk/events/fetchEvents.d.ts.map +1 -1
- package/dist/esm/sui-sdk/events/fetchEvents.js +11 -0
- package/dist/esm/sui-sdk/events/fetchEvents.js.map +1 -1
- package/dist/esm/sui-sdk/events/types.d.ts.map +1 -1
- package/dist/esm/sui-sdk/events/types.js.map +1 -1
- package/dist/esm/sui-sdk/functions/getPortfolioAmounts.d.ts.map +1 -1
- package/dist/esm/sui-sdk/functions/getPortfolioAmounts.js +8 -4
- package/dist/esm/sui-sdk/functions/getPortfolioAmounts.js.map +1 -1
- package/dist/esm/utils/clmm/prices.js +4 -4
- package/dist/esm/utils/clmm/prices.js.map +1 -1
- package/dist/esm/utils/hop.d.ts.map +1 -1
- package/dist/esm/utils/hop.js +5 -6
- package/dist/esm/utils/hop.js.map +1 -1
- package/dist/esm/utils/prices.d.ts.map +1 -1
- package/dist/esm/utils/prices.js +34 -118
- package/dist/esm/utils/prices.js.map +1 -1
- package/dist/esm/utils/userHoldings.d.ts.map +1 -1
- package/dist/esm/utils/userHoldings.js +4 -2
- package/dist/esm/utils/userHoldings.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPortfolioAmounts.js","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/getPortfolioAmounts.ts"],"names":[],"mappings":"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","sourcesContent":["import { SuiClient } from \"@mysten/sui/client\";\nimport { Decimal } from \"decimal.js\";\nimport {\n CoinName,\n PoolName,\n DoubleAssetPoolNames,\n NaviInvestor,\n CommonInvestorFields,\n SingleAssetPoolNames,\n} from \"../../index.js\";\nimport {\n getCoinAmountsFromLiquidity,\n getPool,\n getPoolExchangeRate,\n getReceipts,\n getNaviInvestor,\n fetchVoloExchangeRate,\n} from \"./getReceipts.js\";\nimport { SimpleCache } from \"../../utils/simpleCache.js\";\nimport { coins } from \"../../common/coins.js\";\nimport { poolCoinMap, poolCoinPairMap } from \"../../common/maps.js\";\nimport { PythPriceIdPair } from \"../../common/pyth.js\";\nimport { getLatestPrice } from \"../../utils/prices.js\";\nimport { getAlphaPrice } from \"../../utils/clmm/prices.js\";\n\nexport async function getAlphaPortfolioAmount(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n) {\n const receipts = await getReceipts(poolName, options.address);\n const pool = await getPool(poolName);\n if (!pool) {\n throw new Error(\"Pool not found\");\n }\n\n const exchangeRate = await getPoolExchangeRate(poolName);\n let totalXTokens = new Decimal(0);\n if (!exchangeRate) {\n return \"0\"; // if pool has 0 xtokens\n }\n if (options.isLocked === true) {\n receipts.forEach(async (receipt) => {\n const xTokens = new Decimal(receipt.content.fields.xTokenBalance);\n const bal = new Decimal(\n Number(receipt.content.fields.unlocked_xtokens) *\n exchangeRate.toNumber(),\n );\n totalXTokens = totalXTokens.add(xTokens.sub(bal));\n });\n } else if (options.isLocked === false) {\n receipts.forEach((receipt) => {\n const bal = new Decimal(\n Number(receipt.content.fields.unlocked_xtokens) *\n exchangeRate.toNumber(),\n );\n totalXTokens = totalXTokens.add(bal);\n });\n } else {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n if (totalXTokens.gt(0)) {\n const poolExchangeRate = await getPoolExchangeRate(poolName);\n if (poolExchangeRate) {\n const tokens = totalXTokens.div(1e9).mul(poolExchangeRate);\n return `${tokens}`;\n } else {\n console.error(`Could not get poolExchangeRate for poolName: ${poolName}`);\n }\n } else {\n return \"0\";\n }\n}\n\nexport async function getAlphaPortfolioAmountInUSD(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n) {\n const tokens = await getAlphaPortfolioAmount(poolName, options);\n const priceOfAlpha = await getAlphaPrice();\n if (priceOfAlpha && tokens) {\n let amount = new Decimal(tokens);\n amount = amount.mul(priceOfAlpha);\n return amount.toString();\n }\n}\n\nconst portfolioAmountCache = new SimpleCache<[number, number]>();\nconst portfolioAmountPromiseCache = new SimpleCache<\n Promise<[number, number]>\n>();\nexport async function getPortfolioAmount(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<[number, number] | undefined> {\n let portfolioAmount: [number, number] = [0, 0];\n const portfolioAmountCacheKey = `getPortfolioAmount:${poolName}-${options.address}}`;\n if (ignoreCache) {\n portfolioAmountCache.delete(portfolioAmountCacheKey);\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey);\n }\n const cachedResponse = portfolioAmountCache.get(portfolioAmountCacheKey);\n\n if (cachedResponse) {\n return cachedResponse;\n }\n\n let cachedPromise = portfolioAmountPromiseCache.get(portfolioAmountCacheKey);\n\n if (!cachedPromise) {\n cachedPromise = (async () => {\n const receipts = await getReceipts(poolName, options.address);\n let totalXTokens = new Decimal(0);\n if (receipts) {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n\n if (totalXTokens.gt(0)) {\n const poolExchangeRate = await getPoolExchangeRate(poolName);\n if (poolExchangeRate) {\n const tokens = totalXTokens.mul(poolExchangeRate);\n const poolTokenAmounts = await getCoinAmountsFromLiquidity(\n poolName,\n tokens.toNumber(),\n );\n portfolioAmount = poolTokenAmounts;\n } else {\n console.error(\n `Could not get poolExchangeRate for poolName: ${poolName}`,\n );\n }\n } else {\n portfolioAmount = [0, 0];\n }\n\n portfolioAmountCache.set(portfolioAmountCacheKey, portfolioAmount);\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n return portfolioAmount;\n })().catch((error) => {\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n throw error;\n });\n\n portfolioAmountPromiseCache.set(portfolioAmountCacheKey, cachedPromise);\n }\n\n return cachedPromise;\n}\n\nexport async function getDoubleAssetPortfolioAmountInUSD(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<string | undefined> {\n if ((poolName as DoubleAssetPoolNames) !== undefined) {\n const amounts = await getPortfolioAmount(poolName, options, ignoreCache);\n if (amounts !== undefined) {\n const ten = new Decimal(10);\n const pool1 = poolCoinPairMap[poolName as DoubleAssetPoolNames]\n .coinA as CoinName;\n const pool2 = poolCoinPairMap[poolName as DoubleAssetPoolNames]\n .coinB as CoinName;\n const amount0 = new Decimal(amounts[0]).div(\n ten.pow(coins[pool1 as CoinName].expo),\n );\n const amount1 = new Decimal(amounts[1]).div(\n ten.pow(coins[pool2 as CoinName].expo),\n );\n const tokens = poolName.split(\"-\");\n const priceOfCoin0 = await getLatestPrice(\n `${tokens[0]}/USD` as PythPriceIdPair,\n );\n const priceOfCoin1 = await getLatestPrice(\n `${tokens[1]}/USD` as PythPriceIdPair,\n );\n if (priceOfCoin0 && priceOfCoin1) {\n const amount = amount0.mul(priceOfCoin0).add(amount1.mul(priceOfCoin1));\n return amount.toString();\n }\n } else {\n console.error(\n `getPortfolioAmountInUSD is not implemented for poolName: ${poolName}`,\n );\n }\n return \"0\";\n }\n}\n\nconst singleAssetPortfolioAmountCache = new SimpleCache<number>();\nconst singleAssetPortfolioAmountPromiseCache = new SimpleCache<\n Promise<number>\n>();\nexport async function getSingleAssetPortfolioAmount(\n poolName: SingleAssetPoolNames,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n) {\n let portfolioAmount: number = 0;\n const portfolioAmountCacheKey = `getPortfolioAmount:${poolName}-${options.address}}`;\n if (ignoreCache) {\n singleAssetPortfolioAmountCache.delete(portfolioAmountCacheKey);\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey);\n }\n const cachedResponse = singleAssetPortfolioAmountCache.get(\n portfolioAmountCacheKey,\n );\n\n if (cachedResponse) {\n return cachedResponse;\n }\n\n let cachedPromise = singleAssetPortfolioAmountPromiseCache.get(\n portfolioAmountCacheKey,\n );\n\n if (!cachedPromise) {\n cachedPromise = (async () => {\n const receipts = await getReceipts(\n poolName,\n options.address,\n ignoreCache,\n );\n let totalXTokens = new Decimal(0);\n if (receipts) {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n if (totalXTokens.gt(0)) {\n if (\n poolName == \"NAVI-LOOP-SUI-VSUI\" ||\n poolName == \"NAVI-LOOP-USDC-USDT\"\n ) {\n const pool = await getPool(poolName, ignoreCache);\n const investor = (await getNaviInvestor(\n poolName,\n ignoreCache,\n )) as NaviInvestor & CommonInvestorFields;\n if (pool && investor) {\n const liquidity = new Decimal(\n investor.content.fields.tokensDeposited,\n );\n const debtToSupplyRatio = new Decimal(\n investor.content.fields.current_debt_to_supply_ratio,\n );\n const tokensInvested = liquidity.mul(\n new Decimal(1).minus(new Decimal(debtToSupplyRatio).div(1e20)),\n );\n const xTokenSupplyInPool = new Decimal(\n pool.content.fields.xTokenSupply,\n );\n const userTokens = totalXTokens\n .mul(tokensInvested)\n .div(xTokenSupplyInPool);\n const tokens = userTokens.div(\n Math.pow(10, 9 - coins[poolCoinMap[poolName]].expo),\n );\n if (poolName == \"NAVI-LOOP-SUI-VSUI\") {\n // const { SevenKGateway } = await import(\"../\");\n // const sevenKInstance = new SevenKGateway();\n // const numberOfTokensInSui = (await sevenKInstance.getQuote({\n // slippage: 1,\n // senderAddress: options.address,\n // pair: { coinA: coins[\"VSUI\"], coinB: coins[\"SUI\"] },\n // inAmount: new BN(tokens.toNumber()),\n // })) as QuoteResponse;\n const voloExchRate = await fetchVoloExchangeRate();\n portfolioAmount = Number(\n tokens.mul(parseFloat(voloExchRate.data.exchangeRate)),\n );\n }\n // TODO: Whenever NAVI-LOOP-USDT-WUSDC is released, change this else implementation\n else {\n portfolioAmount = Number(tokens);\n }\n } else {\n console.error(`Could not get object for poolName: ${poolName}`);\n }\n } else {\n const poolExchangeRate = await getPoolExchangeRate(\n poolName,\n ignoreCache,\n );\n if (poolExchangeRate) {\n let tokens = totalXTokens.mul(poolExchangeRate);\n tokens = tokens.div(\n Math.pow(\n 10,\n 9 -\n coins[poolCoinMap[poolName as keyof typeof poolCoinMap]].expo,\n ),\n );\n portfolioAmount = tokens.toNumber();\n } else {\n console.error(\n `Could not get poolExchangeRate for poolName: ${poolName}`,\n );\n }\n }\n } else {\n portfolioAmount = 0;\n }\n\n singleAssetPortfolioAmountCache.set(\n portfolioAmountCacheKey,\n portfolioAmount,\n );\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n return portfolioAmount;\n })().catch((error) => {\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n throw error;\n });\n\n singleAssetPortfolioAmountPromiseCache.set(\n portfolioAmountCacheKey,\n cachedPromise,\n );\n }\n\n return cachedPromise;\n}\n\nexport async function getSingleAssetPortfolioAmountInUSD(\n poolName: SingleAssetPoolNames,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<string | undefined> {\n const amounts = await getSingleAssetPortfolioAmount(\n poolName,\n options,\n ignoreCache,\n );\n if (amounts !== undefined) {\n const amount = new Decimal(amounts).div(\n new Decimal(\n Math.pow(\n 10,\n coins[poolCoinMap[poolName as keyof typeof poolCoinMap]].expo,\n ),\n ),\n );\n const priceOfCoin = await getLatestPrice(\n `${poolCoinMap[poolName as keyof typeof poolCoinMap]}/USD` as PythPriceIdPair,\n );\n if (priceOfCoin) {\n const amountInUSD = amount.mul(priceOfCoin);\n return amountInUSD.toString();\n }\n } else {\n console.error(\n `getPortfolioAmountInUSD is not implemented for poolName: ${poolName}`,\n );\n }\n return \"0\";\n}\n"]}
|
|
1
|
+
{"version":3,"file":"getPortfolioAmounts.js","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/getPortfolioAmounts.ts"],"names":[],"mappings":"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","sourcesContent":["import { SuiClient } from \"@mysten/sui/client\";\nimport { Decimal } from \"decimal.js\";\nimport {\n CoinName,\n PoolName,\n DoubleAssetPoolNames,\n NaviInvestor,\n CommonInvestorFields,\n SingleAssetPoolNames,\n} from \"../../index.js\";\nimport {\n getCoinAmountsFromLiquidity,\n getPool,\n getPoolExchangeRate,\n getReceipts,\n getNaviInvestor,\n fetchVoloExchangeRate,\n} from \"./getReceipts.js\";\nimport { SimpleCache } from \"../../utils/simpleCache.js\";\nimport { coins } from \"../../common/coins.js\";\nimport { poolCoinMap, poolCoinPairMap } from \"../../common/maps.js\";\nimport { PythPriceIdPair } from \"../../common/pyth.js\";\nimport { getAlphaPrice } from \"../../utils/clmm/prices.js\";\nimport { getLatestPrices } from \"../../utils/prices.js\";\n\nexport async function getAlphaPortfolioAmount(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n) {\n const receipts = await getReceipts(poolName, options.address);\n const pool = await getPool(poolName);\n if (!pool) {\n throw new Error(\"Pool not found\");\n }\n\n const exchangeRate = await getPoolExchangeRate(poolName);\n let totalXTokens = new Decimal(0);\n if (!exchangeRate) {\n return \"0\"; // if pool has 0 xtokens\n }\n if (options.isLocked === true) {\n receipts.forEach(async (receipt) => {\n const xTokens = new Decimal(receipt.content.fields.xTokenBalance);\n const bal = new Decimal(\n Number(receipt.content.fields.unlocked_xtokens) *\n exchangeRate.toNumber(),\n );\n totalXTokens = totalXTokens.add(xTokens.sub(bal));\n });\n } else if (options.isLocked === false) {\n receipts.forEach((receipt) => {\n const bal = new Decimal(\n Number(receipt.content.fields.unlocked_xtokens) *\n exchangeRate.toNumber(),\n );\n totalXTokens = totalXTokens.add(bal);\n });\n } else {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n if (totalXTokens.gt(0)) {\n const poolExchangeRate = await getPoolExchangeRate(poolName);\n if (poolExchangeRate) {\n const tokens = totalXTokens.div(1e9).mul(poolExchangeRate);\n return `${tokens}`;\n } else {\n console.error(`Could not get poolExchangeRate for poolName: ${poolName}`);\n }\n } else {\n return \"0\";\n }\n}\n\nexport async function getAlphaPortfolioAmountInUSD(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n) {\n const tokens = await getAlphaPortfolioAmount(poolName, options);\n const priceOfAlpha = await getAlphaPrice();\n if (priceOfAlpha && tokens) {\n let amount = new Decimal(tokens);\n amount = amount.mul(priceOfAlpha);\n return amount.toString();\n }\n}\n\nconst portfolioAmountCache = new SimpleCache<[number, number]>();\nconst portfolioAmountPromiseCache = new SimpleCache<\n Promise<[number, number]>\n>();\nexport async function getPortfolioAmount(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<[number, number] | undefined> {\n let portfolioAmount: [number, number] = [0, 0];\n const portfolioAmountCacheKey = `getPortfolioAmount:${poolName}-${options.address}}`;\n if (ignoreCache) {\n portfolioAmountCache.delete(portfolioAmountCacheKey);\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey);\n }\n const cachedResponse = portfolioAmountCache.get(portfolioAmountCacheKey);\n\n if (cachedResponse) {\n return cachedResponse;\n }\n\n let cachedPromise = portfolioAmountPromiseCache.get(portfolioAmountCacheKey);\n\n if (!cachedPromise) {\n cachedPromise = (async () => {\n const receipts = await getReceipts(poolName, options.address);\n let totalXTokens = new Decimal(0);\n if (receipts) {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n\n if (totalXTokens.gt(0)) {\n const poolExchangeRate = await getPoolExchangeRate(poolName);\n if (poolExchangeRate) {\n const tokens = totalXTokens.mul(poolExchangeRate);\n const poolTokenAmounts = await getCoinAmountsFromLiquidity(\n poolName,\n tokens.toNumber(),\n );\n portfolioAmount = poolTokenAmounts;\n } else {\n console.error(\n `Could not get poolExchangeRate for poolName: ${poolName}`,\n );\n }\n } else {\n portfolioAmount = [0, 0];\n }\n\n portfolioAmountCache.set(portfolioAmountCacheKey, portfolioAmount);\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n return portfolioAmount;\n })().catch((error) => {\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n throw error;\n });\n\n portfolioAmountPromiseCache.set(portfolioAmountCacheKey, cachedPromise);\n }\n\n return cachedPromise;\n}\n\nexport async function getDoubleAssetPortfolioAmountInUSD(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<string | undefined> {\n if ((poolName as DoubleAssetPoolNames) !== undefined) {\n const amounts = await getPortfolioAmount(poolName, options, ignoreCache);\n if (amounts !== undefined) {\n const ten = new Decimal(10);\n const pool1 = poolCoinPairMap[poolName as DoubleAssetPoolNames]\n .coinA as CoinName;\n const pool2 = poolCoinPairMap[poolName as DoubleAssetPoolNames]\n .coinB as CoinName;\n const amount0 = new Decimal(amounts[0]).div(\n ten.pow(coins[pool1 as CoinName].expo),\n );\n const amount1 = new Decimal(amounts[1]).div(\n ten.pow(coins[pool2 as CoinName].expo),\n );\n const tokens = poolName.split(\"-\");\n const [priceOfCoin0, priceOfCoin1] = await getLatestPrices(\n [\n `${tokens[0]}/USD` as PythPriceIdPair,\n `${tokens[1]}/USD` as PythPriceIdPair,\n ],\n false,\n );\n if (priceOfCoin0 && priceOfCoin1) {\n const amount = amount0.mul(priceOfCoin0).add(amount1.mul(priceOfCoin1));\n return amount.toString();\n }\n } else {\n console.error(\n `getPortfolioAmountInUSD is not implemented for poolName: ${poolName}`,\n );\n }\n return \"0\";\n }\n}\n\nconst singleAssetPortfolioAmountCache = new SimpleCache<number>();\nconst singleAssetPortfolioAmountPromiseCache = new SimpleCache<\n Promise<number>\n>();\nexport async function getSingleAssetPortfolioAmount(\n poolName: SingleAssetPoolNames,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n) {\n let portfolioAmount: number = 0;\n const portfolioAmountCacheKey = `getPortfolioAmount:${poolName}-${options.address}}`;\n if (ignoreCache) {\n singleAssetPortfolioAmountCache.delete(portfolioAmountCacheKey);\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey);\n }\n const cachedResponse = singleAssetPortfolioAmountCache.get(\n portfolioAmountCacheKey,\n );\n\n if (cachedResponse) {\n return cachedResponse;\n }\n\n let cachedPromise = singleAssetPortfolioAmountPromiseCache.get(\n portfolioAmountCacheKey,\n );\n\n if (!cachedPromise) {\n cachedPromise = (async () => {\n const receipts = await getReceipts(\n poolName,\n options.address,\n ignoreCache,\n );\n let totalXTokens = new Decimal(0);\n if (receipts) {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n if (totalXTokens.gt(0)) {\n if (\n poolName == \"NAVI-LOOP-SUI-VSUI\" ||\n poolName == \"NAVI-LOOP-USDC-USDT\"\n ) {\n const pool = await getPool(poolName, ignoreCache);\n const investor = (await getNaviInvestor(\n poolName,\n ignoreCache,\n )) as NaviInvestor & CommonInvestorFields;\n if (pool && investor) {\n const liquidity = new Decimal(\n investor.content.fields.tokensDeposited,\n );\n const debtToSupplyRatio = new Decimal(\n investor.content.fields.current_debt_to_supply_ratio,\n );\n const tokensInvested = liquidity.mul(\n new Decimal(1).minus(new Decimal(debtToSupplyRatio).div(1e20)),\n );\n const xTokenSupplyInPool = new Decimal(\n pool.content.fields.xTokenSupply,\n );\n const userTokens = totalXTokens\n .mul(tokensInvested)\n .div(xTokenSupplyInPool);\n const tokens = userTokens.div(\n Math.pow(10, 9 - coins[poolCoinMap[poolName]].expo),\n );\n if (poolName == \"NAVI-LOOP-SUI-VSUI\") {\n // const { SevenKGateway } = await import(\"../\");\n // const sevenKInstance = new SevenKGateway();\n // const numberOfTokensInSui = (await sevenKInstance.getQuote({\n // slippage: 1,\n // senderAddress: options.address,\n // pair: { coinA: coins[\"VSUI\"], coinB: coins[\"SUI\"] },\n // inAmount: new BN(tokens.toNumber()),\n // })) as QuoteResponse;\n const voloExchRate = await fetchVoloExchangeRate();\n portfolioAmount = Number(\n tokens.mul(parseFloat(voloExchRate.data.exchangeRate)),\n );\n }\n // TODO: Whenever NAVI-LOOP-USDT-WUSDC is released, change this else implementation\n else {\n portfolioAmount = Number(tokens);\n }\n } else {\n console.error(`Could not get object for poolName: ${poolName}`);\n }\n } else {\n const poolExchangeRate = await getPoolExchangeRate(\n poolName,\n ignoreCache,\n );\n if (poolExchangeRate) {\n let tokens = totalXTokens.mul(poolExchangeRate);\n tokens = tokens.div(\n Math.pow(\n 10,\n 9 -\n coins[poolCoinMap[poolName as keyof typeof poolCoinMap]].expo,\n ),\n );\n portfolioAmount = tokens.toNumber();\n } else {\n console.error(\n `Could not get poolExchangeRate for poolName: ${poolName}`,\n );\n }\n }\n } else {\n portfolioAmount = 0;\n }\n\n singleAssetPortfolioAmountCache.set(\n portfolioAmountCacheKey,\n portfolioAmount,\n );\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n return portfolioAmount;\n })().catch((error) => {\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n throw error;\n });\n\n singleAssetPortfolioAmountPromiseCache.set(\n portfolioAmountCacheKey,\n cachedPromise,\n );\n }\n\n return cachedPromise;\n}\n\nexport async function getSingleAssetPortfolioAmountInUSD(\n poolName: SingleAssetPoolNames,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<string | undefined> {\n const amounts = await getSingleAssetPortfolioAmount(\n poolName,\n options,\n ignoreCache,\n );\n if (amounts !== undefined) {\n const amount = new Decimal(amounts).div(\n new Decimal(\n Math.pow(\n 10,\n coins[poolCoinMap[poolName as keyof typeof poolCoinMap]].expo,\n ),\n ),\n );\n const [priceOfCoin] = await getLatestPrices(\n [\n `${poolCoinMap[poolName as keyof typeof poolCoinMap]}/USD` as PythPriceIdPair,\n ],\n false,\n );\n if (priceOfCoin) {\n const amountInUSD = amount.mul(priceOfCoin);\n return amountInUSD.toString();\n }\n } else {\n console.error(\n `getPortfolioAmountInUSD is not implemented for poolName: ${poolName}`,\n );\n }\n return \"0\";\n}\n"]}
|
|
@@ -2,7 +2,7 @@ import { Percentage, adjustForSlippage, ClmmPoolUtil, TickMath, d, CetusClmmSDK,
|
|
|
2
2
|
import BN from "bn.js";
|
|
3
3
|
import { coins } from "../../common/coins.js";
|
|
4
4
|
import { cetusMainnetSDKOptions } from "../../common/cetus_mainnet_config.js";
|
|
5
|
-
import {
|
|
5
|
+
import { getLatestPrices } from "../prices.js";
|
|
6
6
|
import { SimpleCache } from "../simpleCache.js";
|
|
7
7
|
const poolData = {
|
|
8
8
|
"SUI/USDC": {
|
|
@@ -110,7 +110,7 @@ export async function getAlphaPrice(ignoreCache = false) {
|
|
|
110
110
|
inAmount: new BN(1_000_000_000),
|
|
111
111
|
};
|
|
112
112
|
const res = await cetusGateway.getPrice(swapOption);
|
|
113
|
-
const latestSuiPrice = await
|
|
113
|
+
const [latestSuiPrice] = await getLatestPrices(["SUI/USD"], false);
|
|
114
114
|
if (latestSuiPrice) {
|
|
115
115
|
alphaPrice =
|
|
116
116
|
res.estimatedAmountOut.toNumber() * Number(latestSuiPrice) * 1e-9;
|
|
@@ -135,7 +135,7 @@ export async function getUSDYPrice() {
|
|
|
135
135
|
inAmount: new BN(1_000_000),
|
|
136
136
|
};
|
|
137
137
|
const res = await cetusGateway.getPrice(swapOption);
|
|
138
|
-
const latestUSDCPrice = await
|
|
138
|
+
const [latestUSDCPrice] = await getLatestPrices(["USDC/USD"], false);
|
|
139
139
|
if (latestUSDCPrice) {
|
|
140
140
|
return res.estimatedAmountOut.toNumber() * Number(latestUSDCPrice) * 1e-6;
|
|
141
141
|
}
|
|
@@ -152,7 +152,7 @@ export async function getBUCKPrice() {
|
|
|
152
152
|
inAmount: new BN(1_000_000_000),
|
|
153
153
|
};
|
|
154
154
|
const res = await cetusGateway.getPrice(swapOption);
|
|
155
|
-
const latestUSDCPrice = await
|
|
155
|
+
const [latestUSDCPrice] = await getLatestPrices(["USDC/USD"], false);
|
|
156
156
|
if (latestUSDCPrice) {
|
|
157
157
|
return res.estimatedAmountOut.toNumber() * Number(latestUSDCPrice) * 1e-6;
|
|
158
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prices.js","sourceRoot":"","sources":["../../../../src/utils/clmm/prices.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EACV,iBAAiB,EAEjB,YAAY,EACZ,QAAQ,EACR,CAAC,EACD,YAAY,GACb,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,MAAM,OAAO,CAAC;AAGvB,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQhD,MAAM,QAAQ,GAAgC;IAC5C,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,KAAK;KACX;IACD,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,IAAI;KACV;IACD,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,KAAK;KACX;IACD,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,IAAI;KACV;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,KAAK;KACX;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,IAAI;KACV;IACD,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,KAAK;KACX;IACD,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,IAAI;KACV;IACD,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,KAAK;KACX;IACD,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,IAAI;KACV;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,IAAI;KACV;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,KAAK;KACX;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,IAAI;KACV;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,KAAK;KACX;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,IAAI;KACV;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,EAAE,EAAE,oEAAoE;QACxE,GAAG,EAAE,KAAK;KACX;CACF,CAAC;AAEF,MAAM,sBAAsB,GAAG,IAAI,WAAW,CAAkB,KAAK,CAAC,CAAC;AACvE,MAAM,eAAe,GAAG,IAAI,WAAW,CAAS,KAAK,CAAC,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,cAAuB,KAAK;IAE5B,MAAM,QAAQ,GAAG,eAAe,CAAC;IACjC,IAAI,WAAW,EAAE,CAAC;QAChB,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjC,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAErD,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,aAAa,GAAG,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,aAAa,GAAG,CAAC,KAAK,IAAqB,EAAE;YAC3C,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,sBAAsB,CAAC,CAAC;YAC9D,MAAM,UAAU,GAAqB;gBACnC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE;gBAC9C,aAAa,EACX,oEAAoE;gBACtE,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC;aAChC,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACpD,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;YACvD,IAAI,cAAc,EAAE,CAAC;gBACnB,UAAU;oBACR,GAAG,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;gBACpE,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAC1C,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,gCAAgC;YAC3E,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACnB,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,gCAAgC;YACzE,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,sBAAsB,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAqB;QACnC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;QAC9C,aAAa,EACX,oEAAoE;QACtE,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC;KAC5B,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,sBAAsB,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAqB;QACnC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;QAC9C,aAAa,EACX,oEAAoE;QACtE,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC;KAChC,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IACtD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,YAAY;IACf,QAAQ,CAAe;IAE/B,YAAY,UAAsB;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAuC;QACpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAW,EAAE,CAAC;QAEhC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,MAAM,aAAa,GAAW,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAU,EAAE,EAAE;gBAC3D,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC7B,OAAO,CACL,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI;wBACjC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;wBACrC,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI;4BACjC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CACtC,CAAC;gBACJ,CAAC;qBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACrC,OAAO,CACL,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI;wBAClC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CACnC,CAAC;gBACJ,CAAC;qBAAM,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACrC,OAAO,CACL,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI;wBAClC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CACnC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,SAAS,CAAC;gBACnB,CAAC;YACH,CAAC,CAAC,CAAC;YACH,YAAY,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,sCAAsC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAyB;QACtC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC9C,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,MAAM,GAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,UAAU,GAAY,IAAI,CAAC;QAC/B,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,GAAG,IAAI,CAAC;YAClB,MAAM,GAAG,QAAQ,CAAC;QACpB,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,UAAU,GAAG,KAAK,CAAC;YACnB,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAE5D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YACpD,OAAO,EAAE,IAAI,CAAC,WAAW;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;YAC5C,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YAC1B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YAC1B,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,UAAU;YACV,MAAM;YACN,SAAS;YACT,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAyB;QAC5C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QACvE,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEtD,IAAI,UAAU,GAAY,IAAI,CAAC;QAC/B,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,UAAU,CACvC,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,EAC7C,IAAI,EAAE,CAAC,GAAG,CAAC,CACZ,CAAC;QACF,MAAM,QAAQ,GAAG,UAAU;YACzB,CAAC,CAAC,GAAG,CAAC,kBAAkB;YACxB,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAC1B,MAAM,WAAW,GAAG,iBAAiB,CACnC,QAAQ,EACR,kBAAkB,EAClB,CAAC,UAAU,CACZ,CAAC;QACF,mBAAmB;QACnB,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC;YAC1D,OAAO,EAAE,IAAI,CAAC,WAAW;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,YAAY,EAAE,UAAU;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC7B,YAAY,EAAE,WAAW,CAAC,QAAQ,EAAE;SACrC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,0BAA0B,CAC9B,OAA0B;QAE1B,OAAO,CAAC,GAAG,CACT,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,EAC1B,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EAC7B,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAC9B,CAAC;QAEF,MAAM,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB,CACtD,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,EAC1B,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EAC7B,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAC9B,CAAC,QAAQ,EAAE,CAAC;QAEb,MAAM,kBAAkB,GAAG,QAAQ,CAAC,uBAAuB,CACzD,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAC/D,CAAC;QAEF,mBAAmB;QACnB,MAAM,SAAS,GAAG,QAAQ,CAAC,6BAA6B,CACtD,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,EAC5D,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAClD,CAAC;QACF,MAAM,SAAS,GAAG,QAAQ,CAAC,6BAA6B,CACtD,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,EAC5D,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAClD,CAAC;QAEF,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC;QACtB,uDAAuD;QACvD,MAAM,cAAc,GAAG,YAAY,CAAC,uCAAuC,CACzE,SAAS,EACT,SAAS,EACT,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EACjC,OAAO,CAAC,SAAS,EACjB,IAAI,EACJ,QAAQ,EACR,IAAI,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CACvC,CAAC;QAEF,uCAAuC;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS;YAChC,CAAC,CAAC,OAAO,CAAC,MAAM;YAChB,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS;YAChC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE;YACrC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAEnB,OAAO,CAAC,GAAG,CAAC;YACV,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI;YACxC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI;YACxC,YAAY,EAAE,OAAO,CAAC,WAAW;YACjC,qBAAqB,EAAE,GAAG,mBAAmB,EAAE;YAC/C,GAAG,EAAE,OAAO,CAAC,QAAQ;YACrB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,OAAO,CAAC,SAAS;YAC/B,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;QAEH,iCAAiC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC;YACzD,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI;YACxC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI;YACxC,YAAY,EAAE,OAAO,CAAC,WAAW;YACjC,qBAAqB,EAAE,GAAG,mBAAmB,EAAE;YAC/C,GAAG,EAAE,OAAO,CAAC,QAAQ;YACrB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,OAAO,CAAC,SAAS;YAC/B,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC;CACF","sourcesContent":["import {\n SdkOptions,\n Pool,\n Percentage,\n adjustForSlippage,\n CalculateRatesResult,\n ClmmPoolUtil,\n TickMath,\n d,\n CetusClmmSDK,\n} from \"@cetusprotocol/cetus-sui-clmm-sdk\";\nimport BN from \"bn.js\";\nimport { Transaction } from \"@mysten/sui/transactions\";\nimport { Coin } from \"../../common/types.js\";\nimport { coins } from \"../../common/coins.js\";\nimport { CetusSwapOptions, CreatePoolOptions } from \"./types.js\";\nimport { cetusMainnetSDKOptions } from \"../../common/cetus_mainnet_config.js\";\nimport { getLatestPrice } from \"../prices.js\";\nimport { SimpleCache } from \"../simpleCache.js\";\n\ninterface PoolData {\n pair: string;\n id: string;\n a2b: boolean;\n}\n\nconst poolData: { [key: string]: PoolData } = {\n \"SUI/USDC\": {\n pair: \"SUI/USDC\",\n id: \"0xcf994611fd4c48e277ce3ffd4d4364c914af2c3cbb05f7bf6facd371de688630\",\n a2b: false,\n },\n \"USDC/SUI\": {\n pair: \"USDC/SUI\",\n id: \"0xcf994611fd4c48e277ce3ffd4d4364c914af2c3cbb05f7bf6facd371de688630\",\n a2b: true,\n },\n \"SUI/USDT\": {\n pair: \"SUI/USDT\",\n id: \"0x06d8af9e6afd27262db436f0d37b304a041f710c3ea1fa4c3a9bab36b3569ad3\",\n a2b: false,\n },\n \"USDT/SUI\": {\n pair: \"USDT/SUI\",\n id: \"0x06d8af9e6afd27262db436f0d37b304a041f710c3ea1fa4c3a9bab36b3569ad3\",\n a2b: true,\n },\n \"USDC/USDT\": {\n pair: \"USDC/USDT\",\n id: \"0xc8d7a1503dc2f9f5b05449a87d8733593e2f0f3e7bffd90541252782e4d2ca20\",\n a2b: false,\n },\n \"USDT/USDC\": {\n pair: \"USDT/USDC\",\n id: \"0xc8d7a1503dc2f9f5b05449a87d8733593e2f0f3e7bffd90541252782e4d2ca20\",\n a2b: true,\n },\n \"SUI/VSUI\": {\n pair: \"SUI/VSUI\",\n id: \"0x6c545e78638c8c1db7a48b282bb8ca79da107993fcb185f75cedc1f5adb2f535\",\n a2b: false,\n },\n \"VSUI/SUI\": {\n pair: \"VSUI/SUI\",\n id: \"0x6c545e78638c8c1db7a48b282bb8ca79da107993fcb185f75cedc1f5adb2f535\",\n a2b: true,\n },\n \"SUI/NAVX\": {\n pair: \"SUI/NAVX\",\n id: \"0x0254747f5ca059a1972cd7f6016485d51392a3fde608107b93bbaebea550f703\",\n a2b: false,\n },\n \"NAVX/SUI\": {\n pair: \"NAVX/SUI\",\n id: \"0x0254747f5ca059a1972cd7f6016485d51392a3fde608107b93bbaebea550f703\",\n a2b: true,\n },\n \"ALPHA/SUI\": {\n pair: \"ALPHA/SUI\",\n id: \"0xda7347c3192a27ddac32e659c9d9cbed6f8c9d1344e605c71c8886d7b787d720\",\n a2b: true,\n },\n \"SUI/ALPHA\": {\n pair: \"ALPHA/SUI\",\n id: \"0xda7347c3192a27ddac32e659c9d9cbed6f8c9d1344e605c71c8886d7b787d720\",\n a2b: false,\n },\n \"USDY/USDC\": {\n pair: \"USDY/USDC\",\n id: \"0x0e809689d04d87f4bd4e660cd1b84bf5448c5a7997e3d22fc480e7e5e0b3f58d\",\n a2b: true,\n },\n \"USDC/USDY\": {\n pair: \"USDY/USDC\",\n id: \"0x0e809689d04d87f4bd4e660cd1b84bf5448c5a7997e3d22fc480e7e5e0b3f58d\",\n a2b: false,\n },\n \"BUCK/USDC\": {\n pair: \"BUCK/USDC\",\n id: \"0x81fe26939ed676dd766358a60445341a06cea407ca6f3671ef30f162c84126d5\",\n a2b: true,\n },\n \"USDC/BUCK\": {\n pair: \"USDC/BUCK\",\n id: \"0x81fe26939ed676dd766358a60445341a06cea407ca6f3671ef30f162c84126d5\",\n a2b: false,\n },\n};\n\nconst alphaPricePromiseCache = new SimpleCache<Promise<number>>(60000);\nconst alphaPriceCache = new SimpleCache<number>(60000);\n\nexport async function getAlphaPrice(\n ignoreCache: boolean = false,\n): Promise<number | undefined> {\n const cacheKey = `getAlphaPrice`;\n if (ignoreCache) {\n alphaPriceCache.delete(cacheKey);\n alphaPricePromiseCache.delete(cacheKey);\n }\n const cachedResponse = alphaPriceCache.get(cacheKey);\n\n if (cachedResponse) {\n return cachedResponse;\n }\n let alphaPrice = 0;\n let cachedPromise = alphaPricePromiseCache.get(cacheKey);\n if (!cachedPromise) {\n cachedPromise = (async (): Promise<number> => {\n const cetusGateway = new CetusGateway(cetusMainnetSDKOptions);\n const swapOption: CetusSwapOptions = {\n pair: { coinA: coins.ALPHA, coinB: coins.SUI },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n slippage: 1,\n inAmount: new BN(1_000_000_000),\n };\n const res = await cetusGateway.getPrice(swapOption);\n const latestSuiPrice = await getLatestPrice(\"SUI/USD\");\n if (latestSuiPrice) {\n alphaPrice =\n res.estimatedAmountOut.toNumber() * Number(latestSuiPrice) * 1e-9;\n alphaPriceCache.set(cacheKey, alphaPrice);\n alphaPricePromiseCache.delete(cacheKey); // Remove the promise from cache\n }\n return alphaPrice;\n })().catch((error) => {\n alphaPricePromiseCache.delete(cacheKey); // Remove the promise from cache\n throw error;\n });\n\n alphaPricePromiseCache.set(cacheKey, cachedPromise);\n }\n\n return cachedPromise;\n}\n\nexport async function getUSDYPrice(): Promise<number | undefined> {\n const cetusGateway = new CetusGateway(cetusMainnetSDKOptions);\n const swapOption: CetusSwapOptions = {\n pair: { coinA: coins.USDY, coinB: coins.USDC },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n slippage: 1,\n inAmount: new BN(1_000_000),\n };\n const res = await cetusGateway.getPrice(swapOption);\n const latestUSDCPrice = await getLatestPrice(\"USDC/USD\");\n if (latestUSDCPrice) {\n return res.estimatedAmountOut.toNumber() * Number(latestUSDCPrice) * 1e-6;\n } else {\n return undefined;\n }\n}\n\nexport async function getBUCKPrice(): Promise<number | undefined> {\n const cetusGateway = new CetusGateway(cetusMainnetSDKOptions);\n const swapOption: CetusSwapOptions = {\n pair: { coinA: coins.BUCK, coinB: coins.USDC },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n slippage: 1,\n inAmount: new BN(1_000_000_000),\n };\n const res = await cetusGateway.getPrice(swapOption);\n const latestUSDCPrice = await getLatestPrice(\"USDC/USD\");\n if (latestUSDCPrice) {\n return res.estimatedAmountOut.toNumber() * Number(latestUSDCPrice) * 1e-6;\n } else {\n return undefined;\n }\n}\n\nexport async function getPriceFromCetus(coinType: string): Promise<string> {\n return coinType;\n}\n\nexport class CetusGateway {\n private cetusSDK: CetusClmmSDK;\n\n constructor(sdkOptions: SdkOptions) {\n this.cetusSDK = new CetusClmmSDK(sdkOptions);\n this.cetusSDK.senderAddress = sdkOptions.simulationAccount.address;\n }\n\n async getPools(pairs: { coinA?: Coin; coinB?: Coin }[]) {\n const allPools = await this.cetusSDK.Pool.getPoolsWithPage([]);\n const matchedPools: Pool[] = [];\n\n pairs.forEach((pair) => {\n const filteredPools: Pool[] = allPools.filter((pool: Pool) => {\n if (pair.coinA && pair.coinB) {\n return (\n (pool.coinTypeA === pair.coinA.type &&\n pool.coinTypeB === pair.coinB.type) ||\n (pool.coinTypeA === pair.coinB.type &&\n pool.coinTypeB === pair.coinA.type)\n );\n } else if (pair.coinA && !pair.coinB) {\n return (\n pool.coinTypeA === pair.coinA.type ||\n pool.coinTypeB === pair.coinA.type\n );\n } else if (!pair.coinA && pair.coinB) {\n return (\n pool.coinTypeB === pair.coinB.type ||\n pool.coinTypeB === pair.coinB.type\n );\n } else {\n return undefined;\n }\n });\n matchedPools.push(...filteredPools);\n });\n\n console.log(matchedPools);\n console.log(`Matched pools for specified pairs: ${matchedPools.length}`);\n console.log(`Total pools: ${allPools.length}`);\n return matchedPools;\n }\n\n async getPrice(options: CetusSwapOptions): Promise<CalculateRatesResult> {\n const { pair, inAmount, outAmount } = options;\n const poolDatum = poolData[pair.coinA.name + \"/\" + pair.coinB.name];\n let amount: BN = new BN(0);\n let byAmountIn: boolean = true;\n if (inAmount) {\n byAmountIn = true;\n amount = inAmount;\n } else if (outAmount) {\n byAmountIn = false;\n amount = outAmount;\n }\n\n const pool = await this.cetusSDK.Pool.getPool(poolDatum.id);\n\n const swapTicks = await this.cetusSDK.Pool.fetchTicks({\n pool_id: pool.poolAddress,\n coinTypeA: pool.coinTypeA,\n coinTypeB: pool.coinTypeB,\n });\n\n const res = this.cetusSDK.Swap.calculateRates({\n decimalsA: pair.coinA.expo,\n decimalsB: pair.coinB.expo,\n a2b: poolDatum.a2b,\n byAmountIn,\n amount,\n swapTicks,\n currentPool: pool,\n });\n\n return res;\n }\n\n async getTransaction(options: CetusSwapOptions): Promise<Transaction> {\n const res = await this.getPrice(options);\n\n const { pair, senderAddress, slippage, inAmount, outAmount } = options;\n const poolDatum = poolData[pair.coinA.name + \"/\" + pair.coinB.name];\n const poolID = poolDatum.id;\n const pool = await this.cetusSDK.Pool.getPool(poolID);\n\n let byAmountIn: boolean = true;\n if (inAmount) {\n byAmountIn = true;\n } else if (outAmount) {\n byAmountIn = false;\n }\n\n const slippagePercentage = new Percentage(\n new BN(Math.floor(slippage * 100).toString()),\n new BN(100),\n );\n const toAmount = byAmountIn\n ? res.estimatedAmountOut\n : res.estimatedAmountIn;\n const amountLimit = adjustForSlippage(\n toAmount,\n slippagePercentage,\n !byAmountIn,\n );\n // TransactionBlock\n this.cetusSDK.senderAddress = senderAddress;\n const txb = this.cetusSDK.Swap.createSwapTransactionPayload({\n pool_id: pool.poolAddress,\n coinTypeA: pool.coinTypeA,\n coinTypeB: pool.coinTypeB,\n a2b: poolDatum.a2b,\n by_amount_in: byAmountIn,\n amount: res.amount.toString(),\n amount_limit: amountLimit.toString(),\n });\n\n return txb;\n }\n\n async createPoolTransactionBlock(\n options: CreatePoolOptions,\n ): Promise<Transaction> {\n console.log(\n d(options.initializePrice),\n coins[options.coinNameA].expo,\n coins[options.coinNameB].expo,\n );\n\n const initializeSqrtPrice = TickMath.priceToSqrtPriceX64(\n d(options.initializePrice),\n coins[options.coinNameA].expo,\n coins[options.coinNameB].expo,\n ).toString();\n\n const current_tick_index = TickMath.sqrtPriceX64ToTickIndex(\n new BN(Math.floor(parseFloat(initializeSqrtPrice)).toString()),\n );\n\n // build tick range\n const lowerTick = TickMath.getPrevInitializableTickIndex(\n new BN(Math.floor(current_tick_index).toString()).toNumber(),\n new BN(options.tickSpacing.toString()).toNumber(),\n );\n const upperTick = TickMath.getNextInitializableTickIndex(\n new BN(Math.floor(current_tick_index).toString()).toNumber(),\n new BN(options.tickSpacing.toString()).toNumber(),\n );\n\n // slippage value 0.05 means 5%\n const slippage = 0.01;\n // Estimate liquidity and token amount from one amounts\n const liquidityInput = ClmmPoolUtil.estLiquidityAndcoinAmountFromOneAmounts(\n lowerTick,\n upperTick,\n new BN(options.amount.toString()),\n options.isAmountA,\n true,\n slippage,\n new BN(initializeSqrtPrice.toString()),\n );\n\n // Estimate token a and token b amount\n const amount_a = options.isAmountA\n ? options.amount\n : liquidityInput.tokenMaxA.toNumber();\n const amount_b = options.isAmountA\n ? liquidityInput.tokenMaxB.toNumber()\n : options.amount;\n\n console.log({\n coinTypeA: coins[options.coinNameA].type,\n coinTypeB: coins[options.coinNameB].type,\n tick_spacing: options.tickSpacing,\n initialize_sqrt_price: `${initializeSqrtPrice}`,\n uri: options.imageUrl,\n amount_a: amount_a,\n amount_b: amount_b,\n fix_amount_a: options.isAmountA,\n tick_lower: lowerTick,\n tick_upper: upperTick,\n });\n\n // build creatPoolPayload Payload\n const txb = this.cetusSDK.Pool.creatPoolTransactionPayload({\n coinTypeA: coins[options.coinNameA].type,\n coinTypeB: coins[options.coinNameB].type,\n tick_spacing: options.tickSpacing,\n initialize_sqrt_price: `${initializeSqrtPrice}`,\n uri: options.imageUrl,\n amount_a: amount_a,\n amount_b: amount_b,\n fix_amount_a: options.isAmountA,\n tick_lower: lowerTick,\n tick_upper: upperTick,\n });\n\n return txb;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"prices.js","sourceRoot":"","sources":["../../../../src/utils/clmm/prices.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n SdkOptions,\n Pool,\n Percentage,\n adjustForSlippage,\n CalculateRatesResult,\n ClmmPoolUtil,\n TickMath,\n d,\n CetusClmmSDK,\n} from \"@cetusprotocol/cetus-sui-clmm-sdk\";\nimport BN from \"bn.js\";\nimport { Transaction } from \"@mysten/sui/transactions\";\nimport { Coin } from \"../../common/types.js\";\nimport { coins } from \"../../common/coins.js\";\nimport { CetusSwapOptions, CreatePoolOptions } from \"./types.js\";\nimport { cetusMainnetSDKOptions } from \"../../common/cetus_mainnet_config.js\";\nimport { getLatestPrices } from \"../prices.js\";\nimport { SimpleCache } from \"../simpleCache.js\";\n\ninterface PoolData {\n pair: string;\n id: string;\n a2b: boolean;\n}\n\nconst poolData: { [key: string]: PoolData } = {\n \"SUI/USDC\": {\n pair: \"SUI/USDC\",\n id: \"0xcf994611fd4c48e277ce3ffd4d4364c914af2c3cbb05f7bf6facd371de688630\",\n a2b: false,\n },\n \"USDC/SUI\": {\n pair: \"USDC/SUI\",\n id: \"0xcf994611fd4c48e277ce3ffd4d4364c914af2c3cbb05f7bf6facd371de688630\",\n a2b: true,\n },\n \"SUI/USDT\": {\n pair: \"SUI/USDT\",\n id: \"0x06d8af9e6afd27262db436f0d37b304a041f710c3ea1fa4c3a9bab36b3569ad3\",\n a2b: false,\n },\n \"USDT/SUI\": {\n pair: \"USDT/SUI\",\n id: \"0x06d8af9e6afd27262db436f0d37b304a041f710c3ea1fa4c3a9bab36b3569ad3\",\n a2b: true,\n },\n \"USDC/USDT\": {\n pair: \"USDC/USDT\",\n id: \"0xc8d7a1503dc2f9f5b05449a87d8733593e2f0f3e7bffd90541252782e4d2ca20\",\n a2b: false,\n },\n \"USDT/USDC\": {\n pair: \"USDT/USDC\",\n id: \"0xc8d7a1503dc2f9f5b05449a87d8733593e2f0f3e7bffd90541252782e4d2ca20\",\n a2b: true,\n },\n \"SUI/VSUI\": {\n pair: \"SUI/VSUI\",\n id: \"0x6c545e78638c8c1db7a48b282bb8ca79da107993fcb185f75cedc1f5adb2f535\",\n a2b: false,\n },\n \"VSUI/SUI\": {\n pair: \"VSUI/SUI\",\n id: \"0x6c545e78638c8c1db7a48b282bb8ca79da107993fcb185f75cedc1f5adb2f535\",\n a2b: true,\n },\n \"SUI/NAVX\": {\n pair: \"SUI/NAVX\",\n id: \"0x0254747f5ca059a1972cd7f6016485d51392a3fde608107b93bbaebea550f703\",\n a2b: false,\n },\n \"NAVX/SUI\": {\n pair: \"NAVX/SUI\",\n id: \"0x0254747f5ca059a1972cd7f6016485d51392a3fde608107b93bbaebea550f703\",\n a2b: true,\n },\n \"ALPHA/SUI\": {\n pair: \"ALPHA/SUI\",\n id: \"0xda7347c3192a27ddac32e659c9d9cbed6f8c9d1344e605c71c8886d7b787d720\",\n a2b: true,\n },\n \"SUI/ALPHA\": {\n pair: \"ALPHA/SUI\",\n id: \"0xda7347c3192a27ddac32e659c9d9cbed6f8c9d1344e605c71c8886d7b787d720\",\n a2b: false,\n },\n \"USDY/USDC\": {\n pair: \"USDY/USDC\",\n id: \"0x0e809689d04d87f4bd4e660cd1b84bf5448c5a7997e3d22fc480e7e5e0b3f58d\",\n a2b: true,\n },\n \"USDC/USDY\": {\n pair: \"USDY/USDC\",\n id: \"0x0e809689d04d87f4bd4e660cd1b84bf5448c5a7997e3d22fc480e7e5e0b3f58d\",\n a2b: false,\n },\n \"BUCK/USDC\": {\n pair: \"BUCK/USDC\",\n id: \"0x81fe26939ed676dd766358a60445341a06cea407ca6f3671ef30f162c84126d5\",\n a2b: true,\n },\n \"USDC/BUCK\": {\n pair: \"USDC/BUCK\",\n id: \"0x81fe26939ed676dd766358a60445341a06cea407ca6f3671ef30f162c84126d5\",\n a2b: false,\n },\n};\n\nconst alphaPricePromiseCache = new SimpleCache<Promise<number>>(60000);\nconst alphaPriceCache = new SimpleCache<number>(60000);\n\nexport async function getAlphaPrice(\n ignoreCache: boolean = false,\n): Promise<number | undefined> {\n const cacheKey = `getAlphaPrice`;\n if (ignoreCache) {\n alphaPriceCache.delete(cacheKey);\n alphaPricePromiseCache.delete(cacheKey);\n }\n const cachedResponse = alphaPriceCache.get(cacheKey);\n\n if (cachedResponse) {\n return cachedResponse;\n }\n let alphaPrice = 0;\n let cachedPromise = alphaPricePromiseCache.get(cacheKey);\n if (!cachedPromise) {\n cachedPromise = (async (): Promise<number> => {\n const cetusGateway = new CetusGateway(cetusMainnetSDKOptions);\n const swapOption: CetusSwapOptions = {\n pair: { coinA: coins.ALPHA, coinB: coins.SUI },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n slippage: 1,\n inAmount: new BN(1_000_000_000),\n };\n const res = await cetusGateway.getPrice(swapOption);\n const [latestSuiPrice] = await getLatestPrices([\"SUI/USD\"], false);\n if (latestSuiPrice) {\n alphaPrice =\n res.estimatedAmountOut.toNumber() * Number(latestSuiPrice) * 1e-9;\n alphaPriceCache.set(cacheKey, alphaPrice);\n alphaPricePromiseCache.delete(cacheKey); // Remove the promise from cache\n }\n return alphaPrice;\n })().catch((error) => {\n alphaPricePromiseCache.delete(cacheKey); // Remove the promise from cache\n throw error;\n });\n\n alphaPricePromiseCache.set(cacheKey, cachedPromise);\n }\n\n return cachedPromise;\n}\n\nexport async function getUSDYPrice(): Promise<number | undefined> {\n const cetusGateway = new CetusGateway(cetusMainnetSDKOptions);\n const swapOption: CetusSwapOptions = {\n pair: { coinA: coins.USDY, coinB: coins.USDC },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n slippage: 1,\n inAmount: new BN(1_000_000),\n };\n const res = await cetusGateway.getPrice(swapOption);\n const [latestUSDCPrice] = await getLatestPrices([\"USDC/USD\"], false);\n if (latestUSDCPrice) {\n return res.estimatedAmountOut.toNumber() * Number(latestUSDCPrice) * 1e-6;\n } else {\n return undefined;\n }\n}\n\nexport async function getBUCKPrice(): Promise<number | undefined> {\n const cetusGateway = new CetusGateway(cetusMainnetSDKOptions);\n const swapOption: CetusSwapOptions = {\n pair: { coinA: coins.BUCK, coinB: coins.USDC },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n slippage: 1,\n inAmount: new BN(1_000_000_000),\n };\n const res = await cetusGateway.getPrice(swapOption);\n const [latestUSDCPrice] = await getLatestPrices([\"USDC/USD\"], false);\n if (latestUSDCPrice) {\n return res.estimatedAmountOut.toNumber() * Number(latestUSDCPrice) * 1e-6;\n } else {\n return undefined;\n }\n}\n\nexport async function getPriceFromCetus(coinType: string): Promise<string> {\n return coinType;\n}\n\nexport class CetusGateway {\n private cetusSDK: CetusClmmSDK;\n\n constructor(sdkOptions: SdkOptions) {\n this.cetusSDK = new CetusClmmSDK(sdkOptions);\n this.cetusSDK.senderAddress = sdkOptions.simulationAccount.address;\n }\n\n async getPools(pairs: { coinA?: Coin; coinB?: Coin }[]) {\n const allPools = await this.cetusSDK.Pool.getPoolsWithPage([]);\n const matchedPools: Pool[] = [];\n\n pairs.forEach((pair) => {\n const filteredPools: Pool[] = allPools.filter((pool: Pool) => {\n if (pair.coinA && pair.coinB) {\n return (\n (pool.coinTypeA === pair.coinA.type &&\n pool.coinTypeB === pair.coinB.type) ||\n (pool.coinTypeA === pair.coinB.type &&\n pool.coinTypeB === pair.coinA.type)\n );\n } else if (pair.coinA && !pair.coinB) {\n return (\n pool.coinTypeA === pair.coinA.type ||\n pool.coinTypeB === pair.coinA.type\n );\n } else if (!pair.coinA && pair.coinB) {\n return (\n pool.coinTypeB === pair.coinB.type ||\n pool.coinTypeB === pair.coinB.type\n );\n } else {\n return undefined;\n }\n });\n matchedPools.push(...filteredPools);\n });\n\n console.log(matchedPools);\n console.log(`Matched pools for specified pairs: ${matchedPools.length}`);\n console.log(`Total pools: ${allPools.length}`);\n return matchedPools;\n }\n\n async getPrice(options: CetusSwapOptions): Promise<CalculateRatesResult> {\n const { pair, inAmount, outAmount } = options;\n const poolDatum = poolData[pair.coinA.name + \"/\" + pair.coinB.name];\n let amount: BN = new BN(0);\n let byAmountIn: boolean = true;\n if (inAmount) {\n byAmountIn = true;\n amount = inAmount;\n } else if (outAmount) {\n byAmountIn = false;\n amount = outAmount;\n }\n\n const pool = await this.cetusSDK.Pool.getPool(poolDatum.id);\n\n const swapTicks = await this.cetusSDK.Pool.fetchTicks({\n pool_id: pool.poolAddress,\n coinTypeA: pool.coinTypeA,\n coinTypeB: pool.coinTypeB,\n });\n\n const res = this.cetusSDK.Swap.calculateRates({\n decimalsA: pair.coinA.expo,\n decimalsB: pair.coinB.expo,\n a2b: poolDatum.a2b,\n byAmountIn,\n amount,\n swapTicks,\n currentPool: pool,\n });\n\n return res;\n }\n\n async getTransaction(options: CetusSwapOptions): Promise<Transaction> {\n const res = await this.getPrice(options);\n\n const { pair, senderAddress, slippage, inAmount, outAmount } = options;\n const poolDatum = poolData[pair.coinA.name + \"/\" + pair.coinB.name];\n const poolID = poolDatum.id;\n const pool = await this.cetusSDK.Pool.getPool(poolID);\n\n let byAmountIn: boolean = true;\n if (inAmount) {\n byAmountIn = true;\n } else if (outAmount) {\n byAmountIn = false;\n }\n\n const slippagePercentage = new Percentage(\n new BN(Math.floor(slippage * 100).toString()),\n new BN(100),\n );\n const toAmount = byAmountIn\n ? res.estimatedAmountOut\n : res.estimatedAmountIn;\n const amountLimit = adjustForSlippage(\n toAmount,\n slippagePercentage,\n !byAmountIn,\n );\n // TransactionBlock\n this.cetusSDK.senderAddress = senderAddress;\n const txb = this.cetusSDK.Swap.createSwapTransactionPayload({\n pool_id: pool.poolAddress,\n coinTypeA: pool.coinTypeA,\n coinTypeB: pool.coinTypeB,\n a2b: poolDatum.a2b,\n by_amount_in: byAmountIn,\n amount: res.amount.toString(),\n amount_limit: amountLimit.toString(),\n });\n\n return txb;\n }\n\n async createPoolTransactionBlock(\n options: CreatePoolOptions,\n ): Promise<Transaction> {\n console.log(\n d(options.initializePrice),\n coins[options.coinNameA].expo,\n coins[options.coinNameB].expo,\n );\n\n const initializeSqrtPrice = TickMath.priceToSqrtPriceX64(\n d(options.initializePrice),\n coins[options.coinNameA].expo,\n coins[options.coinNameB].expo,\n ).toString();\n\n const current_tick_index = TickMath.sqrtPriceX64ToTickIndex(\n new BN(Math.floor(parseFloat(initializeSqrtPrice)).toString()),\n );\n\n // build tick range\n const lowerTick = TickMath.getPrevInitializableTickIndex(\n new BN(Math.floor(current_tick_index).toString()).toNumber(),\n new BN(options.tickSpacing.toString()).toNumber(),\n );\n const upperTick = TickMath.getNextInitializableTickIndex(\n new BN(Math.floor(current_tick_index).toString()).toNumber(),\n new BN(options.tickSpacing.toString()).toNumber(),\n );\n\n // slippage value 0.05 means 5%\n const slippage = 0.01;\n // Estimate liquidity and token amount from one amounts\n const liquidityInput = ClmmPoolUtil.estLiquidityAndcoinAmountFromOneAmounts(\n lowerTick,\n upperTick,\n new BN(options.amount.toString()),\n options.isAmountA,\n true,\n slippage,\n new BN(initializeSqrtPrice.toString()),\n );\n\n // Estimate token a and token b amount\n const amount_a = options.isAmountA\n ? options.amount\n : liquidityInput.tokenMaxA.toNumber();\n const amount_b = options.isAmountA\n ? liquidityInput.tokenMaxB.toNumber()\n : options.amount;\n\n console.log({\n coinTypeA: coins[options.coinNameA].type,\n coinTypeB: coins[options.coinNameB].type,\n tick_spacing: options.tickSpacing,\n initialize_sqrt_price: `${initializeSqrtPrice}`,\n uri: options.imageUrl,\n amount_a: amount_a,\n amount_b: amount_b,\n fix_amount_a: options.isAmountA,\n tick_lower: lowerTick,\n tick_upper: upperTick,\n });\n\n // build creatPoolPayload Payload\n const txb = this.cetusSDK.Pool.creatPoolTransactionPayload({\n coinTypeA: coins[options.coinNameA].type,\n coinTypeB: coins[options.coinNameB].type,\n tick_spacing: options.tickSpacing,\n initialize_sqrt_price: `${initializeSqrtPrice}`,\n uri: options.imageUrl,\n amount_a: amount_a,\n amount_b: amount_b,\n fix_amount_a: options.isAmountA,\n tick_lower: lowerTick,\n tick_upper: upperTick,\n });\n\n return txb;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hop.d.ts","sourceRoot":"","sources":["../../../src/utils/hop.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,aAAa,EAEb,gBAAgB,EACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAMvD,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC;AAEzC,eAAO,MAAM,aAAa,EAAE,aAI3B,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;gBAEX,UAAU,EAAE,aAAa;IAK/B,QAAQ,CACZ,OAAO,EAAE,cAAc,EACvB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,gBAAgB,CAAC;IAuBtB,mBAAmB,CACvB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,gBAAgB,EACvB,KAAK,GAAE,OAAe,EACtB,WAAW,GAAE,WAAW,GAAG,SAAqB,GAC/C,OAAO,CAAC,WAAW,CAAC;CA4BxB;AACD,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"hop.d.ts","sourceRoot":"","sources":["../../../src/utils/hop.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,aAAa,EAEb,gBAAgB,EACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAMvD,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC;AAEzC,eAAO,MAAM,aAAa,EAAE,aAI3B,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;gBAEX,UAAU,EAAE,aAAa;IAK/B,QAAQ,CACZ,OAAO,EAAE,cAAc,EACvB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,gBAAgB,CAAC;IAuBtB,mBAAmB,CACvB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,gBAAgB,EACvB,KAAK,GAAE,OAAe,EACtB,WAAW,GAAE,WAAW,GAAG,SAAqB,GAC/C,OAAO,CAAC,WAAW,CAAC;CA4BxB;AACD,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAGjE;AACD,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAqBhE;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoB/D;AACD,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkBhE"}
|
package/dist/esm/utils/hop.js
CHANGED
|
@@ -2,7 +2,7 @@ import { HopApi, } from "@hop.ag/sdk";
|
|
|
2
2
|
import { conf, CONF_ENV } from "../common/constants.js";
|
|
3
3
|
import { getSuiNodeUrl } from "../sui-sdk/client.js";
|
|
4
4
|
import { coins } from "../common/coins.js";
|
|
5
|
-
import {
|
|
5
|
+
import { getLatestPrices } from "./prices.js";
|
|
6
6
|
import BN from "bn.js";
|
|
7
7
|
export const hopSDKOptions = {
|
|
8
8
|
api_key: conf[CONF_ENV].HOP_API_KEY,
|
|
@@ -64,8 +64,7 @@ export class HopGateway {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
export async function getWUSDCPrice() {
|
|
67
|
-
const
|
|
68
|
-
const [wusdcPrice] = await fetchPricesFromAlphaAPI(["USDC/USD"]);
|
|
67
|
+
const [wusdcPrice] = await getLatestPrices(["USDC/USD"], false);
|
|
69
68
|
return Number(wusdcPrice);
|
|
70
69
|
}
|
|
71
70
|
export async function getBlubPrice() {
|
|
@@ -78,7 +77,7 @@ export async function getBlubPrice() {
|
|
|
78
77
|
slippage: 1,
|
|
79
78
|
};
|
|
80
79
|
const res = await hopGateway.getQuote(swapOptions);
|
|
81
|
-
const latestUSDCPrice = await
|
|
80
|
+
const [latestUSDCPrice] = await getLatestPrices(["USDC/USD"], false);
|
|
82
81
|
if (latestUSDCPrice) {
|
|
83
82
|
return (Number(res.amount_out_with_fee) * Number(latestUSDCPrice) * 1e-6 * 1e-7);
|
|
84
83
|
}
|
|
@@ -95,7 +94,7 @@ export async function getFudPrice() {
|
|
|
95
94
|
slippage: 1,
|
|
96
95
|
};
|
|
97
96
|
const res = await hopGateway.getQuote(swapOptions);
|
|
98
|
-
const latestUSDCPrice = await
|
|
97
|
+
const [latestUSDCPrice] = await getLatestPrices(["USDC/USD"], false);
|
|
99
98
|
if (latestUSDCPrice) {
|
|
100
99
|
return (Number(res.amount_out_with_fee) * Number(latestUSDCPrice) * 1e-6 * 1e-7);
|
|
101
100
|
}
|
|
@@ -112,7 +111,7 @@ export async function getWsolPrice() {
|
|
|
112
111
|
slippage: 1,
|
|
113
112
|
};
|
|
114
113
|
const res = await hopGateway.getQuote(swapOptions);
|
|
115
|
-
const latestUSDCPrice = await
|
|
114
|
+
const [latestUSDCPrice] = await getLatestPrices(["USDC/USD"], false);
|
|
116
115
|
if (latestUSDCPrice) {
|
|
117
116
|
return Number(res.amount_out_with_fee) * Number(latestUSDCPrice) * 1e-6;
|
|
118
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hop.js","sourceRoot":"","sources":["../../../src/utils/hop.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,GAIP,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"hop.js","sourceRoot":"","sources":["../../../src/utils/hop.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n GetTxParams,\n HopApi,\n HopApiOptions,\n GetQuoteParams,\n GetQuoteResponse,\n} from \"@hop.ag/sdk\";\nimport { SwapOptions } from \"../common/types.js\";\nimport { conf, CONF_ENV } from \"../common/constants.js\";\nimport { Transaction } from \"@mysten/sui/transactions\";\nimport { getSuiNodeUrl } from \"../sui-sdk/client.js\";\nimport { coins } from \"../common/coins.js\";\nimport { getLatestPrices } from \"./prices.js\";\nimport BN from \"bn.js\";\n\nexport type HopSwapOptions = SwapOptions;\n\nexport const hopSDKOptions: HopApiOptions = {\n api_key: conf[CONF_ENV].HOP_API_KEY,\n fee_bps: conf[CONF_ENV].HOP_FEE_BPS,\n fee_wallet: conf[CONF_ENV].HOP_QUERY_WALLET,\n};\n\nexport class HopGateway {\n private hopAPI: HopApi;\n\n constructor(sdkOptions: HopApiOptions) {\n const rpc_url = getSuiNodeUrl();\n this.hopAPI = new HopApi(rpc_url, sdkOptions);\n }\n\n async getQuote(\n options: HopSwapOptions,\n debug: boolean = false,\n ): Promise<GetQuoteResponse> {\n const { pair, inAmount, outAmount } = options;\n let amount: BN = new BN(0);\n if (inAmount) {\n amount = inAmount;\n } else if (outAmount) {\n amount = outAmount;\n }\n\n const params: GetQuoteParams = {\n token_in: pair.coinA.type,\n token_out: pair.coinB.type,\n amount_in: BigInt(amount.toString()),\n };\n\n if (debug) {\n console.debug(\"fetchQuote Params:\");\n console.debug(params);\n }\n const quote = await this.hopAPI.fetchQuote(params);\n return quote;\n }\n\n async getTransactionBlock(\n options: HopSwapOptions,\n quote: GetQuoteResponse,\n debug: boolean = false,\n transaction: Transaction | undefined = undefined,\n ): Promise<Transaction> {\n const { senderAddress, slippage } = options;\n const splippageBPS = slippage * 100;\n\n let params: GetTxParams;\n if (transaction) {\n params = {\n trade: quote.trade,\n sui_address: senderAddress,\n max_slippage_bps: splippageBPS,\n base_transaction: transaction,\n };\n } else {\n params = {\n trade: quote.trade,\n sui_address: senderAddress,\n max_slippage_bps: splippageBPS,\n };\n }\n\n if (debug) {\n console.debug(\"fetchTx Params:\");\n console.debug(params);\n }\n const trade = await this.hopAPI.fetchTx(params);\n\n return trade.transaction;\n }\n}\nexport async function getWUSDCPrice(): Promise<number | undefined> {\n const [wusdcPrice] = await getLatestPrices([\"USDC/USD\"], false);\n return Number(wusdcPrice);\n}\nexport async function getBlubPrice(): Promise<number | undefined> {\n // return 1;\n const hopGateway = new HopGateway(hopSDKOptions);\n\n const swapOptions: HopSwapOptions = {\n pair: { coinA: coins.BLUB, coinB: coins.USDC },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n inAmount: new BN(1_000_000_000),\n slippage: 1,\n };\n\n const res = await hopGateway.getQuote(swapOptions);\n const [latestUSDCPrice] = await getLatestPrices([\"USDC/USD\"], false);\n if (latestUSDCPrice) {\n return (\n Number(res.amount_out_with_fee) * Number(latestUSDCPrice) * 1e-6 * 1e-7\n );\n } else {\n return undefined;\n }\n}\n\nexport async function getFudPrice(): Promise<number | undefined> {\n const hopGateway = new HopGateway(hopSDKOptions);\n\n const swapOptions: HopSwapOptions = {\n pair: { coinA: coins.FUD, coinB: coins.USDC },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n inAmount: new BN(1_000_000_000_000),\n slippage: 1,\n };\n\n const res = await hopGateway.getQuote(swapOptions);\n const [latestUSDCPrice] = await getLatestPrices([\"USDC/USD\"], false);\n if (latestUSDCPrice) {\n return (\n Number(res.amount_out_with_fee) * Number(latestUSDCPrice) * 1e-6 * 1e-7\n );\n } else {\n return undefined;\n }\n}\nexport async function getWsolPrice(): Promise<number | undefined> {\n const hopGateway = new HopGateway(hopSDKOptions);\n\n const swapOptions: HopSwapOptions = {\n pair: { coinA: coins.WSOL, coinB: coins.USDC },\n senderAddress:\n \"0x4260738f0f7341adc79a8edaa62f8a4681ebd27c595aecab1f322f47bfc52c5e\",\n inAmount: new BN(1_000_000_00),\n slippage: 1,\n };\n\n const res = await hopGateway.getQuote(swapOptions);\n const [latestUSDCPrice] = await getLatestPrices([\"USDC/USD\"], false);\n if (latestUSDCPrice) {\n return Number(res.amount_out_with_fee) * Number(latestUSDCPrice) * 1e-6;\n } else {\n return undefined;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prices.d.ts","sourceRoot":"","sources":["../../../src/utils/prices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"prices.d.ts","sourceRoot":"","sources":["../../../src/utils/prices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD,wBAAsB,eAAe,CACnC,KAAK,EAAE,eAAe,EAAE,EACxB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CAsCnB;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,eAAe,EAAE,EACxB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CAWhD"}
|
package/dist/esm/utils/prices.js
CHANGED
|
@@ -1,148 +1,64 @@
|
|
|
1
|
-
import { getAlphaPrice, getBUCKPrice, getUSDYPrice } from "./clmm/prices.js";
|
|
2
|
-
import { getBlubPrice, getWsolPrice, getFudPrice, getWUSDCPrice, } from "./hop.js";
|
|
3
1
|
import { SimpleCache } from "./simpleCache.js";
|
|
4
|
-
const
|
|
5
|
-
export async function getLatestPrices(pairs) {
|
|
6
|
-
const prices = new Array(pairs.length).fill(undefined);
|
|
2
|
+
const latestPriceCache = new SimpleCache(5000);
|
|
3
|
+
export async function getLatestPrices(pairs, ignoreCache) {
|
|
7
4
|
const pairsToFetch = [];
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const alphaPrice = await getAlphaPrice();
|
|
14
|
-
prices[i] = alphaPrice ? `${alphaPrice}` : undefined;
|
|
15
|
-
}
|
|
16
|
-
else if (pair === "USDY/USD") {
|
|
17
|
-
const usdyPrice = await getUSDYPrice();
|
|
18
|
-
prices[i] = usdyPrice ? `${usdyPrice}` : undefined;
|
|
19
|
-
}
|
|
20
|
-
else if (pair === "BUCK/USD") {
|
|
21
|
-
const buckPrice = await getBUCKPrice();
|
|
22
|
-
prices[i] = buckPrice ? `${buckPrice}` : undefined;
|
|
23
|
-
}
|
|
24
|
-
else if (pair === "WSOL/USD") {
|
|
25
|
-
const wsolPrice = await getWsolPrice();
|
|
26
|
-
prices[i] = wsolPrice ? `${wsolPrice}` : undefined;
|
|
27
|
-
}
|
|
28
|
-
else if (pair === "FUD/USD") {
|
|
29
|
-
const fudPrice = await getFudPrice();
|
|
30
|
-
prices[i] = fudPrice ? `${fudPrice}` : undefined;
|
|
31
|
-
}
|
|
32
|
-
else if (pair === "BLUB/USD") {
|
|
33
|
-
const blubPrice = await getBlubPrice();
|
|
34
|
-
prices[i] = blubPrice ? `${blubPrice}` : undefined;
|
|
35
|
-
}
|
|
36
|
-
else if (pair === "WUSDC/USD") {
|
|
37
|
-
const wusdcPrice = await getWUSDCPrice();
|
|
38
|
-
prices[i] = wusdcPrice ? `${wusdcPrice}` : undefined;
|
|
5
|
+
const pairsToFetchIndexes = [];
|
|
6
|
+
const prices = pairs.map((pair, index) => {
|
|
7
|
+
const cacheKey = `getLatestPrice-${pair}`;
|
|
8
|
+
if (ignoreCache) {
|
|
9
|
+
latestPriceCache.delete(cacheKey);
|
|
39
10
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
indexMap.set(pair, []);
|
|
44
|
-
}
|
|
45
|
-
indexMap.get(pair).push(i);
|
|
11
|
+
const cachedResponse = latestPriceCache.get(cacheKey);
|
|
12
|
+
if (cachedResponse) {
|
|
13
|
+
return cachedResponse;
|
|
46
14
|
}
|
|
47
|
-
|
|
15
|
+
pairsToFetch.push(pair);
|
|
16
|
+
pairsToFetchIndexes.push(index);
|
|
17
|
+
return "";
|
|
18
|
+
});
|
|
48
19
|
if (pairsToFetch.length > 0) {
|
|
49
20
|
try {
|
|
50
21
|
const fetchedPrices = await fetchPricesFromAlphaAPI(pairsToFetch);
|
|
51
|
-
pairsToFetch.forEach((
|
|
22
|
+
pairsToFetch.forEach((_pair, i) => {
|
|
52
23
|
const price = fetchedPrices[i];
|
|
53
|
-
|
|
54
|
-
prices[index] = price;
|
|
55
|
-
});
|
|
24
|
+
prices[pairsToFetchIndexes[i]] = price.price;
|
|
56
25
|
});
|
|
57
26
|
}
|
|
58
27
|
catch (error) {
|
|
59
28
|
console.error(`Error in getLatestPrices for pairs ${pairsToFetch}:`, error);
|
|
60
29
|
}
|
|
61
30
|
}
|
|
31
|
+
prices.forEach((price, i) => {
|
|
32
|
+
if (price) {
|
|
33
|
+
const cacheKey = `getLatestPrice-${pairs[i]}`;
|
|
34
|
+
latestPriceCache.set(cacheKey, price);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
62
37
|
return prices;
|
|
63
38
|
}
|
|
64
|
-
export async function getLatestTokenPricePairs(pairs) {
|
|
39
|
+
export async function getLatestTokenPricePairs(pairs, ignoreCache) {
|
|
65
40
|
const priceMap = {};
|
|
66
41
|
// Use getLatestPrices to fetch all prices at once
|
|
67
|
-
const prices = await getLatestPrices(pairs);
|
|
42
|
+
const prices = await getLatestPrices(pairs, ignoreCache);
|
|
68
43
|
pairs.forEach((pair, index) => {
|
|
69
44
|
priceMap[pair] = prices[index];
|
|
70
45
|
});
|
|
71
46
|
return priceMap;
|
|
72
47
|
}
|
|
73
|
-
|
|
74
|
-
|
|
48
|
+
async function fetchPricesFromAlphaAPI(pairs) {
|
|
49
|
+
const req_url = `https://api.alphafi.xyz/alpha/fetchPrices?pairs=${pairs.join(",")}`;
|
|
50
|
+
let prices = [];
|
|
75
51
|
try {
|
|
76
|
-
|
|
77
|
-
if (!
|
|
78
|
-
|
|
52
|
+
const res = await fetch(req_url);
|
|
53
|
+
if (!res.ok) {
|
|
54
|
+
throw new Error(`HTTP error! status: ${res.status}`);
|
|
79
55
|
}
|
|
56
|
+
const data = (await res.json());
|
|
57
|
+
prices = data;
|
|
80
58
|
}
|
|
81
59
|
catch (error) {
|
|
82
|
-
console.error(`Error
|
|
83
|
-
|
|
84
|
-
return price;
|
|
85
|
-
}
|
|
86
|
-
function generateCacheKey(pair) {
|
|
87
|
-
return `pyth_${pair}`;
|
|
88
|
-
}
|
|
89
|
-
function generateCacheKeyForPairs(pairs) {
|
|
90
|
-
return `pyth_${pairs.join("_")}`;
|
|
91
|
-
}
|
|
92
|
-
const pythCache = new SimpleCache(10000); // cache TTL = 10 seconds
|
|
93
|
-
const pythPromiseCache = new SimpleCache(10000);
|
|
94
|
-
const pythPromisesCache = new SimpleCache(10000);
|
|
95
|
-
export async function fetchPricesFromAlphaAPI(pairs) {
|
|
96
|
-
const prices = new Array(pairs.length).fill(undefined);
|
|
97
|
-
const pairsToFetch = [];
|
|
98
|
-
const pairsToFetchIndexes = [];
|
|
99
|
-
pairs.forEach((pair, index) => {
|
|
100
|
-
const priceCacheKey = generateCacheKey(pair);
|
|
101
|
-
const cachedResponse = pythCache.get(priceCacheKey);
|
|
102
|
-
if (cachedResponse) {
|
|
103
|
-
if (debug)
|
|
104
|
-
console.log(`From CACHE for ${pair}`);
|
|
105
|
-
prices[index] = cachedResponse.price;
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
pairsToFetch.push(pair);
|
|
109
|
-
pairsToFetchIndexes.push(index);
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
if (pairsToFetch.length > 0) {
|
|
113
|
-
const pairsToFetchKey = generateCacheKeyForPairs(pairsToFetch);
|
|
114
|
-
let cachedPairsPromise = pythPromisesCache.get(pairsToFetchKey);
|
|
115
|
-
if (!cachedPairsPromise) {
|
|
116
|
-
if (debug)
|
|
117
|
-
console.log(`Fetching prices for: ${pairsToFetch.join(",")}`);
|
|
118
|
-
cachedPairsPromise = fetch(`https://api.alphafi.xyz/alpha/fetchPrices?pairs=${pairsToFetch.join(",")}`)
|
|
119
|
-
.then(async (response) => {
|
|
120
|
-
if (!response.ok) {
|
|
121
|
-
throw new Error(`HTTP error! status: ${response.status}`);
|
|
122
|
-
}
|
|
123
|
-
const data = (await response.json()); // Parse the JSON response
|
|
124
|
-
if (debug)
|
|
125
|
-
console.log(`From SERVER for ${pairsToFetch}`, data);
|
|
126
|
-
data.forEach((pricePair, idx) => {
|
|
127
|
-
const priceCacheKey = generateCacheKey(pricePair.pair);
|
|
128
|
-
pythCache.set(priceCacheKey, pricePair); // Cache each response
|
|
129
|
-
pythPromiseCache.delete(priceCacheKey); // Remove the promise from the cache
|
|
130
|
-
prices[pairsToFetchIndexes[idx]] = pricePair.price; // Set the price at the correct index
|
|
131
|
-
});
|
|
132
|
-
pythPromisesCache.delete(pairsToFetchKey); // Remove the promise for the array
|
|
133
|
-
return data;
|
|
134
|
-
})
|
|
135
|
-
.catch((error) => {
|
|
136
|
-
console.error(`Error fetching prices for pairs ${pairsToFetch}:`, error);
|
|
137
|
-
pythPromisesCache.delete(pairsToFetchKey); // Ensure the promise is removed on error
|
|
138
|
-
throw error;
|
|
139
|
-
});
|
|
140
|
-
pythPromisesCache.set(pairsToFetchKey, cachedPairsPromise);
|
|
141
|
-
}
|
|
142
|
-
const fetchedPrices = await cachedPairsPromise;
|
|
143
|
-
fetchedPrices.forEach((pricePair, idx) => {
|
|
144
|
-
prices[pairsToFetchIndexes[idx]] = pricePair.price;
|
|
145
|
-
});
|
|
60
|
+
console.error(`Error fetching prices for pairs ${pairs}:`, error);
|
|
61
|
+
throw error;
|
|
146
62
|
}
|
|
147
63
|
return prices;
|
|
148
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prices.js","sourceRoot":"","sources":["../../../src/utils/prices.ts"],"names":[],"mappings":"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","sourcesContent":["import { PythPriceIdPair } from \"../common/pyth.js\";\nimport { getAlphaPrice, getBUCKPrice, getUSDYPrice } from \"./clmm/prices.js\";\nimport {\n getBlubPrice,\n getWsolPrice,\n getFudPrice,\n getWUSDCPrice,\n} from \"./hop.js\";\nimport { SimpleCache } from \"./simpleCache.js\";\n\nconst debug = false;\n\nexport async function getLatestPrices(\n pairs: PythPriceIdPair[],\n): Promise<(string | undefined)[]> {\n const prices: (string | undefined)[] = new Array(pairs.length).fill(\n undefined,\n );\n const pairsToFetch: PythPriceIdPair[] = [];\n const indexMap: Map<PythPriceIdPair, number[]> = new Map();\n\n // Initialize indexMap with the indices of pairs that need to be fetched\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i];\n if (pair === (\"ALPHA/USD\" as PythPriceIdPair)) {\n const alphaPrice = await getAlphaPrice();\n prices[i] = alphaPrice ? `${alphaPrice}` : undefined;\n } else if (pair === (\"USDY/USD\" as PythPriceIdPair)) {\n const usdyPrice = await getUSDYPrice();\n prices[i] = usdyPrice ? `${usdyPrice}` : undefined;\n } else if (pair === (\"BUCK/USD\" as PythPriceIdPair)) {\n const buckPrice = await getBUCKPrice();\n prices[i] = buckPrice ? `${buckPrice}` : undefined;\n } else if (pair === (\"WSOL/USD\" as PythPriceIdPair)) {\n const wsolPrice = await getWsolPrice();\n prices[i] = wsolPrice ? `${wsolPrice}` : undefined;\n } else if (pair === (\"FUD/USD\" as PythPriceIdPair)) {\n const fudPrice = await getFudPrice();\n prices[i] = fudPrice ? `${fudPrice}` : undefined;\n } else if (pair === (\"BLUB/USD\" as PythPriceIdPair)) {\n const blubPrice = await getBlubPrice();\n prices[i] = blubPrice ? `${blubPrice}` : undefined;\n } else if (pair === (\"WUSDC/USD\" as PythPriceIdPair)) {\n const wusdcPrice = await getWUSDCPrice();\n prices[i] = wusdcPrice ? `${wusdcPrice}` : undefined;\n } else {\n pairsToFetch.push(pair);\n if (!indexMap.has(pair)) {\n indexMap.set(pair, []);\n }\n indexMap.get(pair)!.push(i);\n }\n }\n\n if (pairsToFetch.length > 0) {\n try {\n const fetchedPrices = await fetchPricesFromAlphaAPI(pairsToFetch);\n pairsToFetch.forEach((pair, i) => {\n const price = fetchedPrices[i];\n indexMap.get(pair)!.forEach((index) => {\n prices[index] = price;\n });\n });\n } catch (error) {\n console.error(\n `Error in getLatestPrices for pairs ${pairsToFetch}:`,\n error,\n );\n }\n }\n\n return prices;\n}\n\nexport async function getLatestTokenPricePairs(\n pairs: PythPriceIdPair[],\n): Promise<{ [key: string]: string | undefined }> {\n const priceMap: { [key: string]: string | undefined } = {};\n\n // Use getLatestPrices to fetch all prices at once\n const prices = await getLatestPrices(pairs);\n\n pairs.forEach((pair, index) => {\n priceMap[pair] = prices[index];\n });\n\n return priceMap;\n}\n\nexport async function getLatestPrice(\n pair: PythPriceIdPair,\n): Promise<string | undefined> {\n let price: string | undefined = undefined;\n\n try {\n [price] = await fetchPricesFromAlphaAPI([pair]);\n if (!price) {\n console.log(`Failed to get price for pair ${pair}`);\n }\n } catch (error) {\n console.error(`Error in getPrice for pair ${pair}:`, error);\n }\n return price;\n}\n\nfunction generateCacheKey(pair: PythPriceIdPair) {\n return `pyth_${pair}`;\n}\n\nfunction generateCacheKeyForPairs(pairs: PythPriceIdPair[]) {\n return `pyth_${pairs.join(\"_\")}`;\n}\n\ninterface PythPricePair {\n pair: PythPriceIdPair;\n price: string;\n}\n\nconst pythCache = new SimpleCache<PythPricePair>(10000); // cache TTL = 10 seconds\nconst pythPromiseCache = new SimpleCache<Promise<PythPricePair>>(10000);\nconst pythPromisesCache = new SimpleCache<Promise<PythPricePair[]>>(10000);\n\nexport async function fetchPricesFromAlphaAPI(\n pairs: string[],\n): Promise<string[]> {\n const prices: (string | undefined)[] = new Array(pairs.length).fill(\n undefined,\n );\n const pairsToFetch: PythPriceIdPair[] = [];\n const pairsToFetchIndexes: number[] = [];\n\n pairs.forEach((pair, index) => {\n const priceCacheKey = generateCacheKey(pair as PythPriceIdPair);\n const cachedResponse = pythCache.get(priceCacheKey);\n\n if (cachedResponse) {\n if (debug) console.log(`From CACHE for ${pair}`);\n prices[index] = cachedResponse.price;\n } else {\n pairsToFetch.push(pair as PythPriceIdPair);\n pairsToFetchIndexes.push(index);\n }\n });\n\n if (pairsToFetch.length > 0) {\n const pairsToFetchKey = generateCacheKeyForPairs(pairsToFetch);\n let cachedPairsPromise = pythPromisesCache.get(pairsToFetchKey);\n\n if (!cachedPairsPromise) {\n if (debug) console.log(`Fetching prices for: ${pairsToFetch.join(\",\")}`);\n cachedPairsPromise = fetch(\n `https://api.alphafi.xyz/alpha/fetchPrices?pairs=${pairsToFetch.join(\",\")}`,\n )\n .then(async (response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = (await response.json()) as PythPricePair[]; // Parse the JSON response\n if (debug) console.log(`From SERVER for ${pairsToFetch}`, data);\n data.forEach((pricePair, idx) => {\n const priceCacheKey = generateCacheKey(\n pricePair.pair as PythPriceIdPair,\n );\n pythCache.set(priceCacheKey, pricePair); // Cache each response\n pythPromiseCache.delete(priceCacheKey); // Remove the promise from the cache\n prices[pairsToFetchIndexes[idx]] = pricePair.price; // Set the price at the correct index\n });\n pythPromisesCache.delete(pairsToFetchKey); // Remove the promise for the array\n return data;\n })\n .catch((error) => {\n console.error(\n `Error fetching prices for pairs ${pairsToFetch}:`,\n error,\n );\n pythPromisesCache.delete(pairsToFetchKey); // Ensure the promise is removed on error\n throw error;\n });\n pythPromisesCache.set(pairsToFetchKey, cachedPairsPromise);\n }\n\n const fetchedPrices = await cachedPairsPromise;\n fetchedPrices.forEach((pricePair, idx) => {\n prices[pairsToFetchIndexes[idx]] = pricePair.price;\n });\n }\n\n return prices as string[];\n}\n"]}
|
|
1
|
+
{"version":3,"file":"prices.js","sourceRoot":"","sources":["../../../src/utils/prices.ts"],"names":[],"mappings":"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","sourcesContent":["import { PythPriceIdPair } from \"../common/pyth.js\";\nimport { SimpleCache } from \"./simpleCache.js\";\n\nconst latestPriceCache = new SimpleCache<string>(5000);\nexport async function getLatestPrices(\n pairs: PythPriceIdPair[],\n ignoreCache: boolean,\n): Promise<string[]> {\n const pairsToFetch: PythPriceIdPair[] = [];\n const pairsToFetchIndexes: number[] = [];\n\n const prices: string[] = pairs.map((pair, index) => {\n const cacheKey = `getLatestPrice-${pair}`;\n if (ignoreCache) {\n latestPriceCache.delete(cacheKey);\n }\n const cachedResponse = latestPriceCache.get(cacheKey);\n if (cachedResponse) {\n return cachedResponse;\n }\n pairsToFetch.push(pair);\n pairsToFetchIndexes.push(index);\n return \"\";\n });\n if (pairsToFetch.length > 0) {\n try {\n const fetchedPrices = await fetchPricesFromAlphaAPI(pairsToFetch);\n pairsToFetch.forEach((_pair, i) => {\n const price = fetchedPrices[i];\n prices[pairsToFetchIndexes[i]] = price.price;\n });\n } catch (error) {\n console.error(\n `Error in getLatestPrices for pairs ${pairsToFetch}:`,\n error,\n );\n }\n }\n prices.forEach((price, i) => {\n if (price) {\n const cacheKey = `getLatestPrice-${pairs[i]}`;\n latestPriceCache.set(cacheKey, price);\n }\n });\n return prices;\n}\n\nexport async function getLatestTokenPricePairs(\n pairs: PythPriceIdPair[],\n ignoreCache: boolean,\n): Promise<{ [key: string]: string | undefined }> {\n const priceMap: { [key: string]: string | undefined } = {};\n\n // Use getLatestPrices to fetch all prices at once\n const prices = await getLatestPrices(pairs, ignoreCache);\n\n pairs.forEach((pair, index) => {\n priceMap[pair] = prices[index];\n });\n\n return priceMap;\n}\n\ninterface PythPricePair {\n pair: PythPriceIdPair;\n price: string;\n}\n\nasync function fetchPricesFromAlphaAPI(\n pairs: PythPriceIdPair[],\n): Promise<PythPricePair[]> {\n const req_url = `https://api.alphafi.xyz/alpha/fetchPrices?pairs=${pairs.join(\",\")}`;\n let prices: PythPricePair[] = [];\n try {\n const res = await fetch(req_url);\n if (!res.ok) {\n throw new Error(`HTTP error! status: ${res.status}`);\n }\n const data = (await res.json()) as PythPricePair[];\n prices = data;\n } catch (error) {\n console.error(`Error fetching prices for pairs ${pairs}:`, error);\n throw error;\n }\n return prices;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userHoldings.d.ts","sourceRoot":"","sources":["../../../src/utils/userHoldings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"userHoldings.d.ts","sourceRoot":"","sources":["../../../src/utils/userHoldings.ts"],"names":[],"mappings":"AASA,OAAO,EACL,wBAAwB,EACxB,WAAW,EACX,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,aAAa,CAAC;AAerB,wBAAsB,uBAAuB,CAAC,eAAe,EAAE,WAAW,EAAE,0BAoB3E;AAED,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,oEA4BnE;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,uBAAuB,GAC9B,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAc3B;AA6HD,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,CAAC,wBAAwB,GAAG,wBAAwB,CAAC,EAAE,GACtE,OAAO,CAAC,WAAW,EAAE,CAAC,CAuCxB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getPoolExchangeRateMap, getTokenPriceMap, getCetusInvestorTicksMap, getCetusSqrtPriceMap, poolCoinPairMap, poolCoinMap, } from "../common/maps.js";
|
|
1
|
+
import { getPoolExchangeRateMap, getTokenPriceMap, getCetusInvestorTicksMap, getCetusSqrtPriceMap, poolCoinPairMap, poolCoinMap, poolInfo, } from "../common/maps.js";
|
|
2
2
|
import { Decimal } from "decimal.js";
|
|
3
3
|
import { ClmmPoolUtil, TickMath, } from "@cetusprotocol/cetus-sui-clmm-sdk";
|
|
4
4
|
import BN from "bn.js";
|
|
@@ -93,10 +93,12 @@ function doubleAssetliquidityToTokens(params) {
|
|
|
93
93
|
}
|
|
94
94
|
function alphaLiquidityToTokens(liquidity) {
|
|
95
95
|
const amount = new Decimal(liquidity).div(1e9);
|
|
96
|
-
return amount.toFixed(5)
|
|
96
|
+
return amount.toFixed(5);
|
|
97
97
|
}
|
|
98
98
|
function singleAssetLiquidityToTokens(liquidity, pool) {
|
|
99
99
|
const singlePool = pool;
|
|
100
|
+
if (poolInfo[pool].parentProtocolName !== "NAVI")
|
|
101
|
+
throw new Error("only NAVI pools allowed");
|
|
100
102
|
const coin = poolCoinMap[singlePool];
|
|
101
103
|
let amount = new Decimal(liquidity).div(Math.pow(10, 9 - coins[coin].expo));
|
|
102
104
|
amount = amount.div(new Decimal(Math.pow(10, coins[coin].expo)));
|