@pancakeswap/stable-swap-sdk 1.0.0
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/LICENSE +674 -0
- package/dist/amm/amm.d.ts +24 -0
- package/dist/amm/amm.d.ts.map +1 -0
- package/dist/amm/getLPOutput.d.ts +10 -0
- package/dist/amm/getLPOutput.d.ts.map +1 -0
- package/dist/amm/getLPOutputWithoutFee.d.ts +4 -0
- package/dist/amm/getLPOutputWithoutFee.d.ts.map +1 -0
- package/dist/amm/getSwapOutput.d.ts +15 -0
- package/dist/amm/getSwapOutput.d.ts.map +1 -0
- package/dist/amm/index.d.ts +6 -0
- package/dist/amm/index.d.ts.map +1 -0
- package/dist/amm/utils.d.ts +4 -0
- package/dist/amm/utils.d.ts.map +1 -0
- package/dist/constants/index.d.ts +4 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/pools/arb.d.ts +3 -0
- package/dist/constants/pools/arb.d.ts.map +1 -0
- package/dist/constants/pools/bsc.d.ts +3 -0
- package/dist/constants/pools/bsc.d.ts.map +1 -0
- package/dist/constants/pools/bscTestnet.d.ts +3 -0
- package/dist/constants/pools/bscTestnet.d.ts.map +1 -0
- package/dist/constants/pools/index.d.ts +6 -0
- package/dist/constants/pools/index.d.ts.map +1 -0
- package/dist/constants/pools/pools.d.ts +14 -0
- package/dist/constants/pools/pools.d.ts.map +1 -0
- package/dist/index.cjs +468 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +450 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/amm/getLPOutputWithoutFee.ts","../src/amm/getLPOutput.ts","../src/amm/amm.ts","../src/amm/utils.ts","../src/amm/getSwapOutput.ts","../src/constants/index.ts","../src/constants/pools/pools.ts","../src/constants/pools/bsc.ts","../src/constants/pools/arb.ts","../src/constants/pools/bscTestnet.ts","../src/constants/pools/index.ts"],"names":["Percent","CurrencyAmount","ZERO","invariant","b","ChainId","pools","y","dy","amountOut"],"mappings":"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","sourcesContent":["import { CurrencyAmount, Currency, Percent } from '@pancakeswap/swap-sdk-core'\n\nimport { getLPOutput, GetLPOutputParams } from './getLPOutput'\n\nexport function getLPOutputWithoutFee(params: Omit<GetLPOutputParams, 'fee'>): CurrencyAmount<Currency> {\n return getLPOutput({ ...params, fee: new Percent(0) })\n}\n","import { BigintIsh, CurrencyAmount, Currency, ZERO, Percent } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\nimport { getD } from './amm'\nimport { getRawAmount } from './utils'\n\nexport interface GetLPOutputParams {\n amplifier: BigintIsh\n // Token balances of the stable pool\n balances: CurrencyAmount<Currency>[]\n // User input amounts\n amounts: CurrencyAmount<Currency>[]\n // Total supply of LP token\n totalSupply: CurrencyAmount<Currency>\n // Fee of adding liquidity\n fee: Percent\n}\n\nexport function getLPOutput({\n amplifier,\n balances,\n totalSupply,\n amounts,\n fee,\n}: GetLPOutputParams): CurrencyAmount<Currency> {\n const lpToken = totalSupply.currency\n const lpTotalSupply = totalSupply.quotient\n // No liquidity in pool\n if (lpTotalSupply === ZERO || !balances.length || balances.every((b) => b.quotient === ZERO)) {\n const d = getD({ amplifier, balances: amounts.map(getRawAmount) })\n return CurrencyAmount.fromRawAmount(lpToken, d)\n }\n\n const currentBalances: bigint[] = []\n const newBalances: bigint[] = []\n for (const [i, balance] of balances.entries()) {\n const amount = amounts[i] || CurrencyAmount.fromRawAmount(balance.currency, 0)\n invariant(\n amount.currency.wrapped.equals(balance.currency.wrapped),\n 'User input currency should be the same as pool balance currency.',\n )\n const balanceRaw = getRawAmount(balance)\n const amountRaw = getRawAmount(amount)\n currentBalances.push(balanceRaw)\n newBalances.push(balanceRaw + amountRaw)\n }\n\n const d0 = getD({ amplifier, balances: currentBalances })\n const d1 = getD({ amplifier, balances: newBalances })\n invariant(d1 >= d0, 'D1 should be greater than or equal than d0.')\n\n const isFirstSupply = lpTotalSupply <= ZERO\n if (isFirstSupply) {\n return CurrencyAmount.fromRawAmount(totalSupply.currency, d1)\n }\n\n const n = currentBalances.length\n const eachTokenFee = fee.multiply(n).divide(4 * (n - 1))\n\n let d2 = d1\n for (const [i, b] of currentBalances.entries()) {\n const idealBalance = (d1 * b) / d0\n let diff = ZERO\n if (idealBalance > newBalances[i]) {\n diff = idealBalance - newBalances[i]\n } else {\n diff = newBalances[i] - idealBalance\n }\n const feeAmount = eachTokenFee.multiply(diff).quotient\n // eslint-disable-next-line operator-assignment\n newBalances[i] = newBalances[i] - feeAmount\n }\n d2 = getD({ amplifier, balances: newBalances })\n\n const expectedMintLP = (lpTotalSupply * (d2 - d0)) / d0\n return CurrencyAmount.fromRawAmount(totalSupply.currency, expectedMintLP)\n}\n","import { BigintIsh, ZERO, ONE } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\ninterface Params {\n amplifier: BigintIsh\n balances: BigintIsh[]\n}\n\n/**\n * Calculate the constant D of Curve AMM formula\n * @see https://classic.curve.fi/files/stableswap-paper.pdf\n */\nexport function getD({ amplifier, balances }: Params): bigint {\n const numOfCoins = balances.length\n invariant(numOfCoins > 1, 'To get constant D, pool should have at least two coins.')\n\n const sum = balances.reduce<bigint>((s, cur) => s + BigInt(cur), ZERO)\n if (sum === ZERO) {\n return ZERO\n }\n\n const n = BigInt(numOfCoins)\n // Equality with the precision of 1\n const precision = ONE\n // The amplifier is actually An^n-1, so we only times n here\n const ann = BigInt(amplifier) * n\n let dPrev = ZERO\n let d = sum\n for (let i = 0; i < 255; i += 1) {\n let dp = d\n for (const b of balances) {\n dp = (dp * d) / (BigInt(b) * n + 1n)\n }\n dPrev = d\n d = ((ann * sum + dp * n) * d) / ((ann - ONE) * d + (n + ONE) * dp)\n\n if (d > dPrev && d - dPrev <= precision) {\n break\n }\n\n if (d <= dPrev && dPrev - d <= precision) {\n break\n }\n }\n\n return d\n}\n\ninterface GetYParams {\n amplifier: BigintIsh\n balances: BigintIsh[]\n // The index of the base token\n i: number\n // The index of the swap target token\n j: number\n // The amount of token i that user deposit\n x: BigintIsh\n}\n\n/**\n * Calculate the expected token amount y after user deposit\n * @see https://classic.curve.fi/files/stableswap-paper.pdf\n */\nexport function getY({ amplifier, balances, i, j, x }: GetYParams): bigint {\n const numOfCoins = balances.length\n invariant(numOfCoins > 1, 'To get y, pool should have at least two coins.')\n invariant(i !== j && i >= 0 && j >= 0 && i < numOfCoins && j < numOfCoins, `Invalid i: ${i} and j: ${j}`)\n\n const n = BigInt(numOfCoins)\n const d = getD({ amplifier, balances })\n let sum = ZERO\n let c = d\n // The amplifier is actually An^n-1, so we only times n here\n const ann = BigInt(amplifier) * n\n for (const [index, b] of balances.entries()) {\n if (index === j) {\n // eslint-disable-next-line no-continue\n continue\n }\n let balanceAfterDeposit = BigInt(b)\n if (index === i) {\n balanceAfterDeposit += BigInt(x)\n }\n\n invariant(balanceAfterDeposit > ZERO, 'Insufficient liquidity')\n\n sum += balanceAfterDeposit\n c = (c * d) / (balanceAfterDeposit * n)\n }\n c = (c * d) / (ann * n)\n const b = sum + d / ann\n\n // Equality with the precision of 1\n const precision = ONE\n let yPrev = ZERO\n let y = d\n for (let k = 0; k < 255; k += 1) {\n yPrev = y\n y = (y * y + c) / (2n * y + b - d)\n\n if (y > yPrev && y - yPrev <= precision) {\n break\n }\n\n if (y <= yPrev && yPrev - y <= precision) {\n break\n }\n }\n\n return y\n}\n","import { CurrencyAmount, Currency } from '@pancakeswap/swap-sdk-core'\n\nconst PRECISION = 10n ** 18n\n\nexport const getRawAmount = (amount: CurrencyAmount<Currency>) => {\n return (amount.quotient * PRECISION) / 10n ** BigInt(amount.currency.decimals)\n}\n\nexport const parseAmount = (currency: Currency, rawAmount: bigint) => {\n return CurrencyAmount.fromRawAmount(currency, (rawAmount * 10n ** BigInt(currency.decimals)) / PRECISION)\n}\n","import { BigintIsh, CurrencyAmount, Currency, Percent, ZERO } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\nimport { getY } from './amm'\nimport { getRawAmount, parseAmount } from './utils'\nimport { ONE_HUNDRED_PERCENT } from '../constants'\n\nexport interface GetSwapOutputParams {\n amplifier: BigintIsh\n // Token balances of the stable pool\n balances: CurrencyAmount<Currency>[]\n // User input amount\n amount: CurrencyAmount<Currency>\n // The currency user want to swap to\n outputCurrency: Currency\n // Fee of swapping\n fee: Percent\n}\n\nexport function getSwapOutput({\n amplifier,\n balances: balanceAmounts,\n outputCurrency,\n amount,\n fee,\n}: GetSwapOutputParams): CurrencyAmount<Currency> {\n const validateAmountOut = (a: CurrencyAmount<Currency>) =>\n invariant(!a.lessThan(ZERO), 'Insufficient liquidity to perform the swap')\n\n let i: number | null = null\n let j: number | null = null\n const balances: bigint[] = []\n for (const [index, b] of balanceAmounts.entries()) {\n balances.push(getRawAmount(b))\n if (b.currency.wrapped.equals(amount.currency.wrapped)) {\n i = index\n // eslint-disable-next-line no-continue\n continue\n }\n if (b.currency.wrapped.equals(outputCurrency.wrapped)) {\n j = index\n // eslint-disable-next-line no-continue\n continue\n }\n }\n\n invariant(\n i !== null && j !== null && i !== j,\n 'Input currency or output currency does not match currencies of token balances.',\n )\n\n // Exact output\n if (amount.quotient < ZERO) {\n const x = ONE_HUNDRED_PERCENT.subtract(fee).invert().multiply(getRawAmount(amount)).quotient\n const y = getY({ amplifier, balances, i, j, x })\n const dy = y - balances[j]\n const amountOut = parseAmount(outputCurrency, dy)\n validateAmountOut(amountOut)\n return amountOut\n }\n\n const y = getY({ amplifier, balances, i, j, x: getRawAmount(amount) })\n const dy = balances[j] - y\n const feeAmount = fee.multiply(dy).quotient\n const amountOut = parseAmount(outputCurrency, dy - feeAmount)\n validateAmountOut(amountOut)\n return amountOut\n}\n\nexport function getSwapOutputWithoutFee(params: Omit<GetSwapOutputParams, 'fee'>): CurrencyAmount<Currency> {\n return getSwapOutput({ ...params, fee: new Percent(0) })\n}\n\nexport function getSwapInput({ amount, ...rest }: GetSwapOutputParams) {\n return getSwapOutput({\n ...rest,\n amount: CurrencyAmount.fromRawAmount(amount.currency, -amount.quotient),\n })\n}\n\nexport function getSwapInputWithtouFee(params: Omit<GetSwapOutputParams, 'fee'>) {\n return getSwapInput({ ...params, fee: new Percent(0) })\n}\n\nfunction createQuoteGetter(isExactIn: boolean) {\n const getSwapQuote = isExactIn ? getSwapOutput : getSwapInput\n const applySwap = (\n balances: CurrencyAmount<Currency>[],\n amount: CurrencyAmount<Currency>,\n quote: CurrencyAmount<Currency>,\n ): CurrencyAmount<Currency>[] =>\n balances.map((b) => {\n if (b.currency.equals(amount.currency)) {\n return isExactIn ? b.add(amount) : b.subtract(amount)\n }\n if (b.currency.equals(quote.currency)) {\n return isExactIn ? b.subtract(quote) : b.add(quote)\n }\n return b\n })\n\n return function getQuote(\n params: GetSwapOutputParams,\n ): [CurrencyAmount<Currency>, Pick<GetSwapOutputParams, 'balances' | 'fee' | 'amplifier'>] {\n const { balances, amplifier, fee, amount } = params\n const quote = getSwapQuote(params)\n return [\n quote,\n {\n balances: applySwap(balances, amount, quote),\n amplifier,\n fee,\n },\n ]\n }\n}\n\nexport const getQuoteExactIn = createQuoteGetter(true)\n\nexport const getQuoteExactOut = createQuoteGetter(false)\n","import { Percent } from '@pancakeswap/swap-sdk-core'\n\nexport * from './pools'\n\nexport const ONE_HUNDRED_PERCENT = new Percent('1')\n","import { ChainId } from '@pancakeswap/chains'\n\nimport { StableSwapPool } from '../../types'\nimport { pools as bscPools } from './bsc'\nimport { pools as arbPools } from './arb'\nimport { pools as bscTestnetPools } from './bscTestnet'\n\nexport type StableSwapPoolMap<TChainId extends number> = {\n [chainId in TChainId]: StableSwapPool[]\n}\n\nexport const isStableSwapSupported = (chainId: number | undefined): chainId is StableSupportedChainId => {\n if (!chainId) {\n return false\n }\n return STABLE_SUPPORTED_CHAIN_IDS.includes(chainId)\n}\n\nexport const STABLE_SUPPORTED_CHAIN_IDS = [ChainId.BSC, ChainId.BSC_TESTNET, ChainId.ARBITRUM_ONE] as const\n\nexport type StableSupportedChainId = (typeof STABLE_SUPPORTED_CHAIN_IDS)[number]\n\nexport const STABLE_POOL_MAP = {\n [ChainId.BSC]: bscPools,\n [ChainId.BSC_TESTNET]: bscTestnetPools,\n [ChainId.ARBITRUM_ONE]: arbPools,\n} satisfies StableSwapPoolMap<StableSupportedChainId>\n","import { bscTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'lisUSD-BUSD LP',\n lpAddress: '0xB6040A9F294477dDAdf5543a24E5463B8F2423Ae',\n token: bscTokens.hay,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0x49079D07ef47449aF808A4f36c2a8dEC975594eC',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x36842F8fb99D55477C0Da638aF5ceb6bBf86aA98',\n token: bscTokens.usdt,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0x169F653A54ACD441aB34B73dA9946e2C451787EF',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDC-BUSD LP',\n lpAddress: '0x1A77C359D0019cD8F4d36b7CDf5a88043D801072',\n token: bscTokens.usdc,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0xc2F5B9a3d9138ab2B74d581fC11346219eBf43Fe',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-USDC LP',\n lpAddress: '0xee1bcc9F1692E81A281b3a302a4b67890BA4be76',\n token: bscTokens.usdt,\n quoteToken: bscTokens.usdc,\n stableSwapAddress: '0x3EFebC418efB585248A0D2140cfb87aFcc2C63DD',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'axlUSDC-USDT LP',\n lpAddress: '0x1c7e5a3A72b6D94DE5Ec20812E3e68713978a584',\n token: bscTokens.axlusdc,\n quoteToken: bscTokens.usdt,\n stableSwapAddress: '0x6D8fba276ec6F1EDa2344DA48565AdbCA7e4FFa5',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'WBNB-stkBNB LP',\n lpAddress: '0x9976f5c8BEfDee650226d5571d5F5551e8722b75',\n token: bscTokens.wbnb,\n quoteToken: bscTokens.stkbnb,\n stableSwapAddress: '0x0b03e3d6Ec0c5e5bBf993dED8D947C6fb6eEc18D',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'BNBx-BNB LP',\n lpAddress: '0x92357Ab9003CA881E08e32CDAE59B10B3161b05C',\n token: bscTokens.bnbx,\n quoteToken: bscTokens.wbnb,\n stableSwapAddress: '0x9c138bE1D76ee4C5162E0fe9D4eEA5542a23D1bD',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'lisUSD-USDT LP',\n lpAddress: '0xB2Aa63f363196caba3154D4187949283F085a488',\n token: bscTokens.hay,\n quoteToken: bscTokens.usdt,\n stableSwapAddress: '0xb1Da7D2C257c5700612BdE35C8d7187dc80d79f1',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0004,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'CAKE-sdCAKE LP',\n lpAddress: '0xB1D54d76E2cB9425Ec9c018538cc531440b55dbB',\n token: bscTokens.cake,\n quoteToken: bscTokens.sdcake,\n stableSwapAddress: '0xb8204D31379A9B317CD61C833406C972F58ecCbC',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.001,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'CAKE-mCAKE LP',\n lpAddress: '0xb9dC6396AcFFD24E0f69Dfd3231fDaeB31514D02',\n token: bscTokens.cake,\n quoteToken: bscTokens.mcake,\n stableSwapAddress: '0xc54d35a8Cfd9f6dAe50945Df27A91C9911A03ab1',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mPENDLE-PENDLE LP',\n lpAddress: '0x183F325b33d190597D80d1B46D865d0250fD9BF2',\n token: bscTokens.mpendle,\n quoteToken: bscTokens.pendle,\n stableSwapAddress: '0xD8CB82059da7215b1a9604E845d49D3e78d0f95A',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mDLP-DLP LP',\n lpAddress: '0xA2915ae3bc8C6C03f59496B6Dd26aa6a4335b788',\n token: bscTokens.mdlp,\n quoteToken: bscTokens.dlp,\n stableSwapAddress: '0x25d0eD3b1cE5aF0F3Ac7da4b39B46FC409bF67e2',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { arbitrumTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'PENDLE-mPENDLE LP',\n lpAddress: '0x1A2329546f11e4fE55b853D98Bba2c4678E3105A',\n token: arbitrumTokens.pendle,\n quoteToken: arbitrumTokens.mpendle,\n stableSwapAddress: '0x73ed25e04Aa673ddf7411441098fC5ae19976CE0',\n infoStableSwapAddress: '0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'DLP-mDLP LP',\n lpAddress: '0x0db5e247ab73FBaE16d9301f2977f974EC0AA336',\n token: arbitrumTokens.dlp,\n quoteToken: arbitrumTokens.mdlp,\n stableSwapAddress: '0xd0f0be815a76eFE677c92b07b39a5e972BAf22bD',\n infoStableSwapAddress: '0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { Token } from '@pancakeswap/swap-sdk-core'\nimport { ChainId } from '@pancakeswap/chains'\nimport { bscTestnetTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nconst mockUSDT = new Token(ChainId.BSC_TESTNET, '0x0fB5D7c73FA349A90392f873a4FA1eCf6a3d0a96', 18, 'USDT', 'MOCK Token')\n\nexport const pools: StableSwapPool[] = [\n // {\n // lpSymbol: 'USDC-BUSD LP',\n // lpAddress: '0xd1742b5eC6798cEB8C791e0ebbEf606A4946f67E',\n // token: bscTestnetTokens.usdc, // coins[0]\n // quoteToken: bscTestnetTokens.busd, // coins[1]\n // stableSwapAddress: '0x1288026D2c5a76A5bfb0730F615131A448f4Ad06',\n // infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n // },\n {\n lpSymbol: 'USDT-WBNB LP',\n lpAddress: '0x4c091Dc4418Bd3353A87488535528FD86954da2c',\n token: mockUSDT, // coins[0]\n quoteToken: bscTestnetTokens.wbnb, // coins[1]\n stableSwapAddress: '0xBcd585Ee8B8Ac8de6b0e45dA32Aa31703036b2a1',\n infoStableSwapAddress: '0x0A548d59D04096Bc01206D58C3D63c478e1e06dB',\n stableLpFee: 0.0004,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x746a7063101E2D3305D1556888ee08193f2B9a07',\n token: mockUSDT, // coins[0]\n quoteToken: bscTestnetTokens.busd, // coins[1]\n stableSwapAddress: '0xE25A1352477f3DB9B3008B31e9b7a07a18f8A9e6',\n infoStableSwapAddress: '0x0A548d59D04096Bc01206D58C3D63c478e1e06dB',\n stableLpFee: 0.0004,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'BUSD-USDC LP',\n lpAddress: '0x7CA885d338462790DD1B5416ebe6bec75ee045a1',\n token: bscTestnetTokens.mockBusd, // coins[0]\n quoteToken: bscTestnetTokens.usdc, // coins[1]\n stableSwapAddress: '0xd5E56CD4c8111643a94Ee084df31F44055a1EC9F',\n infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x9Fa2Ef2C3dF6F903F4b73047311e861C51a11B60',\n token: bscTestnetTokens.usdt, // coins[0]\n quoteToken: bscTestnetTokens.mockBusd, // coins[1]\n stableSwapAddress: '0xc418d68751Cbe0407C8fdd90Cde73cE95b892f39',\n infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { ChainId } from '@pancakeswap/chains'\n\nimport { isStableSwapSupported, STABLE_POOL_MAP, STABLE_SUPPORTED_CHAIN_IDS } from './pools'\nimport { StableSwapPool } from '../../types'\n\nexport function getStableSwapPools(chainId: ChainId): StableSwapPool[] {\n // Stable swap is only supported on BSC chain & BSC testnet\n if (!isStableSwapSupported(chainId)) {\n return []\n }\n return STABLE_POOL_MAP[chainId] || []\n}\n\nexport { isStableSwapSupported, STABLE_SUPPORTED_CHAIN_IDS }\n"]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,aAAa,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
import { Token, Percent, ZERO, ONE, CurrencyAmount } from '@pancakeswap/swap-sdk-core';
|
|
2
|
+
import invariant from 'tiny-invariant';
|
|
3
|
+
import { ChainId } from '@pancakeswap/chains';
|
|
4
|
+
import { bscTokens, arbitrumTokens, bscTestnetTokens } from '@pancakeswap/tokens';
|
|
5
|
+
|
|
6
|
+
// src/amm/getLPOutputWithoutFee.ts
|
|
7
|
+
function getD({ amplifier, balances }) {
|
|
8
|
+
const numOfCoins = balances.length;
|
|
9
|
+
invariant(numOfCoins > 1, "To get constant D, pool should have at least two coins.");
|
|
10
|
+
const sum = balances.reduce((s, cur) => s + BigInt(cur), ZERO);
|
|
11
|
+
if (sum === ZERO) {
|
|
12
|
+
return ZERO;
|
|
13
|
+
}
|
|
14
|
+
const n = BigInt(numOfCoins);
|
|
15
|
+
const precision = ONE;
|
|
16
|
+
const ann = BigInt(amplifier) * n;
|
|
17
|
+
let dPrev = ZERO;
|
|
18
|
+
let d = sum;
|
|
19
|
+
for (let i = 0; i < 255; i += 1) {
|
|
20
|
+
let dp = d;
|
|
21
|
+
for (const b of balances) {
|
|
22
|
+
dp = dp * d / (BigInt(b) * n + 1n);
|
|
23
|
+
}
|
|
24
|
+
dPrev = d;
|
|
25
|
+
d = (ann * sum + dp * n) * d / ((ann - ONE) * d + (n + ONE) * dp);
|
|
26
|
+
if (d > dPrev && d - dPrev <= precision) {
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
if (d <= dPrev && dPrev - d <= precision) {
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return d;
|
|
34
|
+
}
|
|
35
|
+
function getY({ amplifier, balances, i, j, x }) {
|
|
36
|
+
const numOfCoins = balances.length;
|
|
37
|
+
invariant(numOfCoins > 1, "To get y, pool should have at least two coins.");
|
|
38
|
+
invariant(i !== j && i >= 0 && j >= 0 && i < numOfCoins && j < numOfCoins, `Invalid i: ${i} and j: ${j}`);
|
|
39
|
+
const n = BigInt(numOfCoins);
|
|
40
|
+
const d = getD({ amplifier, balances });
|
|
41
|
+
let sum = ZERO;
|
|
42
|
+
let c = d;
|
|
43
|
+
const ann = BigInt(amplifier) * n;
|
|
44
|
+
for (const [index, b2] of balances.entries()) {
|
|
45
|
+
if (index === j) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
let balanceAfterDeposit = BigInt(b2);
|
|
49
|
+
if (index === i) {
|
|
50
|
+
balanceAfterDeposit += BigInt(x);
|
|
51
|
+
}
|
|
52
|
+
invariant(balanceAfterDeposit > ZERO, "Insufficient liquidity");
|
|
53
|
+
sum += balanceAfterDeposit;
|
|
54
|
+
c = c * d / (balanceAfterDeposit * n);
|
|
55
|
+
}
|
|
56
|
+
c = c * d / (ann * n);
|
|
57
|
+
const b = sum + d / ann;
|
|
58
|
+
const precision = ONE;
|
|
59
|
+
let yPrev = ZERO;
|
|
60
|
+
let y = d;
|
|
61
|
+
for (let k = 0; k < 255; k += 1) {
|
|
62
|
+
yPrev = y;
|
|
63
|
+
y = (y * y + c) / (2n * y + b - d);
|
|
64
|
+
if (y > yPrev && y - yPrev <= precision) {
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
if (y <= yPrev && yPrev - y <= precision) {
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return y;
|
|
72
|
+
}
|
|
73
|
+
var PRECISION = 10n ** 18n;
|
|
74
|
+
var getRawAmount = (amount) => {
|
|
75
|
+
return amount.quotient * PRECISION / 10n ** BigInt(amount.currency.decimals);
|
|
76
|
+
};
|
|
77
|
+
var parseAmount = (currency, rawAmount) => {
|
|
78
|
+
return CurrencyAmount.fromRawAmount(currency, rawAmount * 10n ** BigInt(currency.decimals) / PRECISION);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// src/amm/getLPOutput.ts
|
|
82
|
+
function getLPOutput({
|
|
83
|
+
amplifier,
|
|
84
|
+
balances,
|
|
85
|
+
totalSupply,
|
|
86
|
+
amounts,
|
|
87
|
+
fee
|
|
88
|
+
}) {
|
|
89
|
+
const lpToken = totalSupply.currency;
|
|
90
|
+
const lpTotalSupply = totalSupply.quotient;
|
|
91
|
+
if (lpTotalSupply === ZERO || !balances.length || balances.every((b) => b.quotient === ZERO)) {
|
|
92
|
+
const d = getD({ amplifier, balances: amounts.map(getRawAmount) });
|
|
93
|
+
return CurrencyAmount.fromRawAmount(lpToken, d);
|
|
94
|
+
}
|
|
95
|
+
const currentBalances = [];
|
|
96
|
+
const newBalances = [];
|
|
97
|
+
for (const [i, balance] of balances.entries()) {
|
|
98
|
+
const amount = amounts[i] || CurrencyAmount.fromRawAmount(balance.currency, 0);
|
|
99
|
+
invariant(
|
|
100
|
+
amount.currency.wrapped.equals(balance.currency.wrapped),
|
|
101
|
+
"User input currency should be the same as pool balance currency."
|
|
102
|
+
);
|
|
103
|
+
const balanceRaw = getRawAmount(balance);
|
|
104
|
+
const amountRaw = getRawAmount(amount);
|
|
105
|
+
currentBalances.push(balanceRaw);
|
|
106
|
+
newBalances.push(balanceRaw + amountRaw);
|
|
107
|
+
}
|
|
108
|
+
const d0 = getD({ amplifier, balances: currentBalances });
|
|
109
|
+
const d1 = getD({ amplifier, balances: newBalances });
|
|
110
|
+
invariant(d1 >= d0, "D1 should be greater than or equal than d0.");
|
|
111
|
+
const isFirstSupply = lpTotalSupply <= ZERO;
|
|
112
|
+
if (isFirstSupply) {
|
|
113
|
+
return CurrencyAmount.fromRawAmount(totalSupply.currency, d1);
|
|
114
|
+
}
|
|
115
|
+
const n = currentBalances.length;
|
|
116
|
+
const eachTokenFee = fee.multiply(n).divide(4 * (n - 1));
|
|
117
|
+
let d2 = d1;
|
|
118
|
+
for (const [i, b] of currentBalances.entries()) {
|
|
119
|
+
const idealBalance = d1 * b / d0;
|
|
120
|
+
let diff = ZERO;
|
|
121
|
+
if (idealBalance > newBalances[i]) {
|
|
122
|
+
diff = idealBalance - newBalances[i];
|
|
123
|
+
} else {
|
|
124
|
+
diff = newBalances[i] - idealBalance;
|
|
125
|
+
}
|
|
126
|
+
const feeAmount = eachTokenFee.multiply(diff).quotient;
|
|
127
|
+
newBalances[i] = newBalances[i] - feeAmount;
|
|
128
|
+
}
|
|
129
|
+
d2 = getD({ amplifier, balances: newBalances });
|
|
130
|
+
const expectedMintLP = lpTotalSupply * (d2 - d0) / d0;
|
|
131
|
+
return CurrencyAmount.fromRawAmount(totalSupply.currency, expectedMintLP);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// src/amm/getLPOutputWithoutFee.ts
|
|
135
|
+
function getLPOutputWithoutFee(params) {
|
|
136
|
+
return getLPOutput({ ...params, fee: new Percent(0) });
|
|
137
|
+
}
|
|
138
|
+
var pools = [
|
|
139
|
+
{
|
|
140
|
+
lpSymbol: "lisUSD-BUSD LP",
|
|
141
|
+
lpAddress: "0xB6040A9F294477dDAdf5543a24E5463B8F2423Ae",
|
|
142
|
+
token: bscTokens.hay,
|
|
143
|
+
quoteToken: bscTokens.busd,
|
|
144
|
+
stableSwapAddress: "0x49079D07ef47449aF808A4f36c2a8dEC975594eC",
|
|
145
|
+
infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
|
|
146
|
+
stableLpFee: 2e-4,
|
|
147
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
lpSymbol: "USDT-BUSD LP",
|
|
151
|
+
lpAddress: "0x36842F8fb99D55477C0Da638aF5ceb6bBf86aA98",
|
|
152
|
+
token: bscTokens.usdt,
|
|
153
|
+
quoteToken: bscTokens.busd,
|
|
154
|
+
stableSwapAddress: "0x169F653A54ACD441aB34B73dA9946e2C451787EF",
|
|
155
|
+
infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
|
|
156
|
+
stableLpFee: 5e-5,
|
|
157
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
lpSymbol: "USDC-BUSD LP",
|
|
161
|
+
lpAddress: "0x1A77C359D0019cD8F4d36b7CDf5a88043D801072",
|
|
162
|
+
token: bscTokens.usdc,
|
|
163
|
+
quoteToken: bscTokens.busd,
|
|
164
|
+
stableSwapAddress: "0xc2F5B9a3d9138ab2B74d581fC11346219eBf43Fe",
|
|
165
|
+
infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
|
|
166
|
+
stableLpFee: 5e-5,
|
|
167
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
lpSymbol: "USDT-USDC LP",
|
|
171
|
+
lpAddress: "0xee1bcc9F1692E81A281b3a302a4b67890BA4be76",
|
|
172
|
+
token: bscTokens.usdt,
|
|
173
|
+
quoteToken: bscTokens.usdc,
|
|
174
|
+
stableSwapAddress: "0x3EFebC418efB585248A0D2140cfb87aFcc2C63DD",
|
|
175
|
+
infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
|
|
176
|
+
stableLpFee: 5e-5,
|
|
177
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
lpSymbol: "axlUSDC-USDT LP",
|
|
181
|
+
lpAddress: "0x1c7e5a3A72b6D94DE5Ec20812E3e68713978a584",
|
|
182
|
+
token: bscTokens.axlusdc,
|
|
183
|
+
quoteToken: bscTokens.usdt,
|
|
184
|
+
stableSwapAddress: "0x6D8fba276ec6F1EDa2344DA48565AdbCA7e4FFa5",
|
|
185
|
+
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
186
|
+
stableLpFee: 2e-4,
|
|
187
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
lpSymbol: "WBNB-stkBNB LP",
|
|
191
|
+
lpAddress: "0x9976f5c8BEfDee650226d5571d5F5551e8722b75",
|
|
192
|
+
token: bscTokens.wbnb,
|
|
193
|
+
quoteToken: bscTokens.stkbnb,
|
|
194
|
+
stableSwapAddress: "0x0b03e3d6Ec0c5e5bBf993dED8D947C6fb6eEc18D",
|
|
195
|
+
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
196
|
+
stableLpFee: 2e-4,
|
|
197
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
lpSymbol: "BNBx-BNB LP",
|
|
201
|
+
lpAddress: "0x92357Ab9003CA881E08e32CDAE59B10B3161b05C",
|
|
202
|
+
token: bscTokens.bnbx,
|
|
203
|
+
quoteToken: bscTokens.wbnb,
|
|
204
|
+
stableSwapAddress: "0x9c138bE1D76ee4C5162E0fe9D4eEA5542a23D1bD",
|
|
205
|
+
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
206
|
+
stableLpFee: 2e-4,
|
|
207
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
lpSymbol: "lisUSD-USDT LP",
|
|
211
|
+
lpAddress: "0xB2Aa63f363196caba3154D4187949283F085a488",
|
|
212
|
+
token: bscTokens.hay,
|
|
213
|
+
quoteToken: bscTokens.usdt,
|
|
214
|
+
stableSwapAddress: "0xb1Da7D2C257c5700612BdE35C8d7187dc80d79f1",
|
|
215
|
+
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
216
|
+
stableLpFee: 4e-4,
|
|
217
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
lpSymbol: "CAKE-sdCAKE LP",
|
|
221
|
+
lpAddress: "0xB1D54d76E2cB9425Ec9c018538cc531440b55dbB",
|
|
222
|
+
token: bscTokens.cake,
|
|
223
|
+
quoteToken: bscTokens.sdcake,
|
|
224
|
+
stableSwapAddress: "0xb8204D31379A9B317CD61C833406C972F58ecCbC",
|
|
225
|
+
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
226
|
+
stableLpFee: 1e-3,
|
|
227
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
lpSymbol: "CAKE-mCAKE LP",
|
|
231
|
+
lpAddress: "0xb9dC6396AcFFD24E0f69Dfd3231fDaeB31514D02",
|
|
232
|
+
token: bscTokens.cake,
|
|
233
|
+
quoteToken: bscTokens.mcake,
|
|
234
|
+
stableSwapAddress: "0xc54d35a8Cfd9f6dAe50945Df27A91C9911A03ab1",
|
|
235
|
+
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
236
|
+
stableLpFee: 5e-3,
|
|
237
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
lpSymbol: "mPENDLE-PENDLE LP",
|
|
241
|
+
lpAddress: "0x183F325b33d190597D80d1B46D865d0250fD9BF2",
|
|
242
|
+
token: bscTokens.mpendle,
|
|
243
|
+
quoteToken: bscTokens.pendle,
|
|
244
|
+
stableSwapAddress: "0xD8CB82059da7215b1a9604E845d49D3e78d0f95A",
|
|
245
|
+
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
246
|
+
stableLpFee: 25e-4,
|
|
247
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
lpSymbol: "mDLP-DLP LP",
|
|
251
|
+
lpAddress: "0xA2915ae3bc8C6C03f59496B6Dd26aa6a4335b788",
|
|
252
|
+
token: bscTokens.mdlp,
|
|
253
|
+
quoteToken: bscTokens.dlp,
|
|
254
|
+
stableSwapAddress: "0x25d0eD3b1cE5aF0F3Ac7da4b39B46FC409bF67e2",
|
|
255
|
+
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
256
|
+
stableLpFee: 25e-4,
|
|
257
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
258
|
+
}
|
|
259
|
+
];
|
|
260
|
+
var pools2 = [
|
|
261
|
+
{
|
|
262
|
+
lpSymbol: "PENDLE-mPENDLE LP",
|
|
263
|
+
lpAddress: "0x1A2329546f11e4fE55b853D98Bba2c4678E3105A",
|
|
264
|
+
token: arbitrumTokens.pendle,
|
|
265
|
+
quoteToken: arbitrumTokens.mpendle,
|
|
266
|
+
stableSwapAddress: "0x73ed25e04Aa673ddf7411441098fC5ae19976CE0",
|
|
267
|
+
infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
|
|
268
|
+
stableLpFee: 25e-4,
|
|
269
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
lpSymbol: "DLP-mDLP LP",
|
|
273
|
+
lpAddress: "0x0db5e247ab73FBaE16d9301f2977f974EC0AA336",
|
|
274
|
+
token: arbitrumTokens.dlp,
|
|
275
|
+
quoteToken: arbitrumTokens.mdlp,
|
|
276
|
+
stableSwapAddress: "0xd0f0be815a76eFE677c92b07b39a5e972BAf22bD",
|
|
277
|
+
infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
|
|
278
|
+
stableLpFee: 25e-4,
|
|
279
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
280
|
+
}
|
|
281
|
+
];
|
|
282
|
+
var mockUSDT = new Token(ChainId.BSC_TESTNET, "0x0fB5D7c73FA349A90392f873a4FA1eCf6a3d0a96", 18, "USDT", "MOCK Token");
|
|
283
|
+
var pools3 = [
|
|
284
|
+
// {
|
|
285
|
+
// lpSymbol: 'USDC-BUSD LP',
|
|
286
|
+
// lpAddress: '0xd1742b5eC6798cEB8C791e0ebbEf606A4946f67E',
|
|
287
|
+
// token: bscTestnetTokens.usdc, // coins[0]
|
|
288
|
+
// quoteToken: bscTestnetTokens.busd, // coins[1]
|
|
289
|
+
// stableSwapAddress: '0x1288026D2c5a76A5bfb0730F615131A448f4Ad06',
|
|
290
|
+
// infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',
|
|
291
|
+
// },
|
|
292
|
+
{
|
|
293
|
+
lpSymbol: "USDT-WBNB LP",
|
|
294
|
+
lpAddress: "0x4c091Dc4418Bd3353A87488535528FD86954da2c",
|
|
295
|
+
token: mockUSDT,
|
|
296
|
+
// coins[0]
|
|
297
|
+
quoteToken: bscTestnetTokens.wbnb,
|
|
298
|
+
// coins[1]
|
|
299
|
+
stableSwapAddress: "0xBcd585Ee8B8Ac8de6b0e45dA32Aa31703036b2a1",
|
|
300
|
+
infoStableSwapAddress: "0x0A548d59D04096Bc01206D58C3D63c478e1e06dB",
|
|
301
|
+
stableLpFee: 4e-4,
|
|
302
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
lpSymbol: "USDT-BUSD LP",
|
|
306
|
+
lpAddress: "0x746a7063101E2D3305D1556888ee08193f2B9a07",
|
|
307
|
+
token: mockUSDT,
|
|
308
|
+
// coins[0]
|
|
309
|
+
quoteToken: bscTestnetTokens.busd,
|
|
310
|
+
// coins[1]
|
|
311
|
+
stableSwapAddress: "0xE25A1352477f3DB9B3008B31e9b7a07a18f8A9e6",
|
|
312
|
+
infoStableSwapAddress: "0x0A548d59D04096Bc01206D58C3D63c478e1e06dB",
|
|
313
|
+
stableLpFee: 4e-4,
|
|
314
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
lpSymbol: "BUSD-USDC LP",
|
|
318
|
+
lpAddress: "0x7CA885d338462790DD1B5416ebe6bec75ee045a1",
|
|
319
|
+
token: bscTestnetTokens.mockBusd,
|
|
320
|
+
// coins[0]
|
|
321
|
+
quoteToken: bscTestnetTokens.usdc,
|
|
322
|
+
// coins[1]
|
|
323
|
+
stableSwapAddress: "0xd5E56CD4c8111643a94Ee084df31F44055a1EC9F",
|
|
324
|
+
infoStableSwapAddress: "0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546",
|
|
325
|
+
stableLpFee: 2e-4,
|
|
326
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
lpSymbol: "USDT-BUSD LP",
|
|
330
|
+
lpAddress: "0x9Fa2Ef2C3dF6F903F4b73047311e861C51a11B60",
|
|
331
|
+
token: bscTestnetTokens.usdt,
|
|
332
|
+
// coins[0]
|
|
333
|
+
quoteToken: bscTestnetTokens.mockBusd,
|
|
334
|
+
// coins[1]
|
|
335
|
+
stableSwapAddress: "0xc418d68751Cbe0407C8fdd90Cde73cE95b892f39",
|
|
336
|
+
infoStableSwapAddress: "0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546",
|
|
337
|
+
stableLpFee: 2e-4,
|
|
338
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
339
|
+
}
|
|
340
|
+
];
|
|
341
|
+
|
|
342
|
+
// src/constants/pools/pools.ts
|
|
343
|
+
var isStableSwapSupported = (chainId) => {
|
|
344
|
+
if (!chainId) {
|
|
345
|
+
return false;
|
|
346
|
+
}
|
|
347
|
+
return STABLE_SUPPORTED_CHAIN_IDS.includes(chainId);
|
|
348
|
+
};
|
|
349
|
+
var STABLE_SUPPORTED_CHAIN_IDS = [ChainId.BSC, ChainId.BSC_TESTNET, ChainId.ARBITRUM_ONE];
|
|
350
|
+
var STABLE_POOL_MAP = {
|
|
351
|
+
[ChainId.BSC]: pools,
|
|
352
|
+
[ChainId.BSC_TESTNET]: pools3,
|
|
353
|
+
[ChainId.ARBITRUM_ONE]: pools2
|
|
354
|
+
};
|
|
355
|
+
|
|
356
|
+
// src/constants/pools/index.ts
|
|
357
|
+
function getStableSwapPools(chainId) {
|
|
358
|
+
if (!isStableSwapSupported(chainId)) {
|
|
359
|
+
return [];
|
|
360
|
+
}
|
|
361
|
+
return STABLE_POOL_MAP[chainId] || [];
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// src/constants/index.ts
|
|
365
|
+
var ONE_HUNDRED_PERCENT = new Percent("1");
|
|
366
|
+
|
|
367
|
+
// src/amm/getSwapOutput.ts
|
|
368
|
+
function getSwapOutput({
|
|
369
|
+
amplifier,
|
|
370
|
+
balances: balanceAmounts,
|
|
371
|
+
outputCurrency,
|
|
372
|
+
amount,
|
|
373
|
+
fee
|
|
374
|
+
}) {
|
|
375
|
+
const validateAmountOut = (a) => invariant(!a.lessThan(ZERO), "Insufficient liquidity to perform the swap");
|
|
376
|
+
let i = null;
|
|
377
|
+
let j = null;
|
|
378
|
+
const balances = [];
|
|
379
|
+
for (const [index, b] of balanceAmounts.entries()) {
|
|
380
|
+
balances.push(getRawAmount(b));
|
|
381
|
+
if (b.currency.wrapped.equals(amount.currency.wrapped)) {
|
|
382
|
+
i = index;
|
|
383
|
+
continue;
|
|
384
|
+
}
|
|
385
|
+
if (b.currency.wrapped.equals(outputCurrency.wrapped)) {
|
|
386
|
+
j = index;
|
|
387
|
+
continue;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
invariant(
|
|
391
|
+
i !== null && j !== null && i !== j,
|
|
392
|
+
"Input currency or output currency does not match currencies of token balances."
|
|
393
|
+
);
|
|
394
|
+
if (amount.quotient < ZERO) {
|
|
395
|
+
const x = ONE_HUNDRED_PERCENT.subtract(fee).invert().multiply(getRawAmount(amount)).quotient;
|
|
396
|
+
const y2 = getY({ amplifier, balances, i, j, x });
|
|
397
|
+
const dy2 = y2 - balances[j];
|
|
398
|
+
const amountOut2 = parseAmount(outputCurrency, dy2);
|
|
399
|
+
validateAmountOut(amountOut2);
|
|
400
|
+
return amountOut2;
|
|
401
|
+
}
|
|
402
|
+
const y = getY({ amplifier, balances, i, j, x: getRawAmount(amount) });
|
|
403
|
+
const dy = balances[j] - y;
|
|
404
|
+
const feeAmount = fee.multiply(dy).quotient;
|
|
405
|
+
const amountOut = parseAmount(outputCurrency, dy - feeAmount);
|
|
406
|
+
validateAmountOut(amountOut);
|
|
407
|
+
return amountOut;
|
|
408
|
+
}
|
|
409
|
+
function getSwapOutputWithoutFee(params) {
|
|
410
|
+
return getSwapOutput({ ...params, fee: new Percent(0) });
|
|
411
|
+
}
|
|
412
|
+
function getSwapInput({ amount, ...rest }) {
|
|
413
|
+
return getSwapOutput({
|
|
414
|
+
...rest,
|
|
415
|
+
amount: CurrencyAmount.fromRawAmount(amount.currency, -amount.quotient)
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
function getSwapInputWithtouFee(params) {
|
|
419
|
+
return getSwapInput({ ...params, fee: new Percent(0) });
|
|
420
|
+
}
|
|
421
|
+
function createQuoteGetter(isExactIn) {
|
|
422
|
+
const getSwapQuote = isExactIn ? getSwapOutput : getSwapInput;
|
|
423
|
+
const applySwap = (balances, amount, quote) => balances.map((b) => {
|
|
424
|
+
if (b.currency.equals(amount.currency)) {
|
|
425
|
+
return isExactIn ? b.add(amount) : b.subtract(amount);
|
|
426
|
+
}
|
|
427
|
+
if (b.currency.equals(quote.currency)) {
|
|
428
|
+
return isExactIn ? b.subtract(quote) : b.add(quote);
|
|
429
|
+
}
|
|
430
|
+
return b;
|
|
431
|
+
});
|
|
432
|
+
return function getQuote(params) {
|
|
433
|
+
const { balances, amplifier, fee, amount } = params;
|
|
434
|
+
const quote = getSwapQuote(params);
|
|
435
|
+
return [
|
|
436
|
+
quote,
|
|
437
|
+
{
|
|
438
|
+
balances: applySwap(balances, amount, quote),
|
|
439
|
+
amplifier,
|
|
440
|
+
fee
|
|
441
|
+
}
|
|
442
|
+
];
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
var getQuoteExactIn = createQuoteGetter(true);
|
|
446
|
+
var getQuoteExactOut = createQuoteGetter(false);
|
|
447
|
+
|
|
448
|
+
export { ONE_HUNDRED_PERCENT, STABLE_SUPPORTED_CHAIN_IDS, getD, getLPOutput, getLPOutputWithoutFee, getQuoteExactIn, getQuoteExactOut, getStableSwapPools, getSwapInput, getSwapInputWithtouFee, getSwapOutput, getSwapOutputWithoutFee, isStableSwapSupported };
|
|
449
|
+
//# sourceMappingURL=out.js.map
|
|
450
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/amm/getLPOutputWithoutFee.ts","../src/amm/getLPOutput.ts","../src/amm/amm.ts","../src/amm/utils.ts","../src/amm/getSwapOutput.ts","../src/constants/index.ts","../src/constants/pools/pools.ts","../src/constants/pools/bsc.ts","../src/constants/pools/arb.ts","../src/constants/pools/bscTestnet.ts","../src/constants/pools/index.ts"],"names":["Percent","CurrencyAmount","ZERO","invariant","b","ChainId","pools","y","dy","amountOut"],"mappings":";AAAA,SAAmC,WAAAA,gBAAe;;;ACAlD,SAAoB,kBAAAC,iBAA0B,QAAAC,aAAqB;AACnE,OAAOC,gBAAe;;;ACDtB,SAAoB,MAAM,WAAW;AACrC,OAAO,eAAe;AAWf,SAAS,KAAK,EAAE,WAAW,SAAS,GAAmB;AAC5D,QAAM,aAAa,SAAS;AAC5B,YAAU,aAAa,GAAG,yDAAyD;AAEnF,QAAM,MAAM,SAAS,OAAe,CAAC,GAAG,QAAQ,IAAI,OAAO,GAAG,GAAG,IAAI;AACrE,MAAI,QAAQ,MAAM;AAChB,WAAO;AAAA,EACT;AAEA,QAAM,IAAI,OAAO,UAAU;AAE3B,QAAM,YAAY;AAElB,QAAM,MAAM,OAAO,SAAS,IAAI;AAChC,MAAI,QAAQ;AACZ,MAAI,IAAI;AACR,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;AAC/B,QAAI,KAAK;AACT,eAAW,KAAK,UAAU;AACxB,WAAM,KAAK,KAAM,OAAO,CAAC,IAAI,IAAI;AAAA,IACnC;AACA,YAAQ;AACR,SAAM,MAAM,MAAM,KAAK,KAAK,MAAO,MAAM,OAAO,KAAK,IAAI,OAAO;AAEhE,QAAI,IAAI,SAAS,IAAI,SAAS,WAAW;AACvC;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,QAAQ,KAAK,WAAW;AACxC;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAiBO,SAAS,KAAK,EAAE,WAAW,UAAU,GAAG,GAAG,EAAE,GAAuB;AACzE,QAAM,aAAa,SAAS;AAC5B,YAAU,aAAa,GAAG,gDAAgD;AAC1E,YAAU,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,cAAc,IAAI,YAAY,cAAc,YAAY,GAAG;AAExG,QAAM,IAAI,OAAO,UAAU;AAC3B,QAAM,IAAI,KAAK,EAAE,WAAW,SAAS,CAAC;AACtC,MAAI,MAAM;AACV,MAAI,IAAI;AAER,QAAM,MAAM,OAAO,SAAS,IAAI;AAChC,aAAW,CAAC,OAAOC,EAAC,KAAK,SAAS,QAAQ,GAAG;AAC3C,QAAI,UAAU,GAAG;AAEf;AAAA,IACF;AACA,QAAI,sBAAsB,OAAOA,EAAC;AAClC,QAAI,UAAU,GAAG;AACf,6BAAuB,OAAO,CAAC;AAAA,IACjC;AAEA,cAAU,sBAAsB,MAAM,wBAAwB;AAE9D,WAAO;AACP,QAAK,IAAI,KAAM,sBAAsB;AAAA,EACvC;AACA,MAAK,IAAI,KAAM,MAAM;AACrB,QAAM,IAAI,MAAM,IAAI;AAGpB,QAAM,YAAY;AAClB,MAAI,QAAQ;AACZ,MAAI,IAAI;AACR,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;AAC/B,YAAQ;AACR,SAAK,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI;AAEhC,QAAI,IAAI,SAAS,IAAI,SAAS,WAAW;AACvC;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,QAAQ,KAAK,WAAW;AACxC;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;AC9GA,SAAS,sBAAgC;AAEzC,IAAM,YAAY,OAAO;AAElB,IAAM,eAAe,CAAC,WAAqC;AAChE,SAAQ,OAAO,WAAW,YAAa,OAAO,OAAO,OAAO,SAAS,QAAQ;AAC/E;AAEO,IAAM,cAAc,CAAC,UAAoB,cAAsB;AACpE,SAAO,eAAe,cAAc,UAAW,YAAY,OAAO,OAAO,SAAS,QAAQ,IAAK,SAAS;AAC1G;;;AFQO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgD;AAC9C,QAAM,UAAU,YAAY;AAC5B,QAAM,gBAAgB,YAAY;AAElC,MAAI,kBAAkBF,SAAQ,CAAC,SAAS,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,aAAaA,KAAI,GAAG;AAC5F,UAAM,IAAI,KAAK,EAAE,WAAW,UAAU,QAAQ,IAAI,YAAY,EAAE,CAAC;AACjE,WAAOD,gBAAe,cAAc,SAAS,CAAC;AAAA,EAChD;AAEA,QAAM,kBAA4B,CAAC;AACnC,QAAM,cAAwB,CAAC;AAC/B,aAAW,CAAC,GAAG,OAAO,KAAK,SAAS,QAAQ,GAAG;AAC7C,UAAM,SAAS,QAAQ,CAAC,KAAKA,gBAAe,cAAc,QAAQ,UAAU,CAAC;AAC7E,IAAAE;AAAA,MACE,OAAO,SAAS,QAAQ,OAAO,QAAQ,SAAS,OAAO;AAAA,MACvD;AAAA,IACF;AACA,UAAM,aAAa,aAAa,OAAO;AACvC,UAAM,YAAY,aAAa,MAAM;AACrC,oBAAgB,KAAK,UAAU;AAC/B,gBAAY,KAAK,aAAa,SAAS;AAAA,EACzC;AAEA,QAAM,KAAK,KAAK,EAAE,WAAW,UAAU,gBAAgB,CAAC;AACxD,QAAM,KAAK,KAAK,EAAE,WAAW,UAAU,YAAY,CAAC;AACpD,EAAAA,WAAU,MAAM,IAAI,6CAA6C;AAEjE,QAAM,gBAAgB,iBAAiBD;AACvC,MAAI,eAAe;AACjB,WAAOD,gBAAe,cAAc,YAAY,UAAU,EAAE;AAAA,EAC9D;AAEA,QAAM,IAAI,gBAAgB;AAC1B,QAAM,eAAe,IAAI,SAAS,CAAC,EAAE,OAAO,KAAK,IAAI,EAAE;AAEvD,MAAI,KAAK;AACT,aAAW,CAAC,GAAG,CAAC,KAAK,gBAAgB,QAAQ,GAAG;AAC9C,UAAM,eAAgB,KAAK,IAAK;AAChC,QAAI,OAAOC;AACX,QAAI,eAAe,YAAY,CAAC,GAAG;AACjC,aAAO,eAAe,YAAY,CAAC;AAAA,IACrC,OAAO;AACL,aAAO,YAAY,CAAC,IAAI;AAAA,IAC1B;AACA,UAAM,YAAY,aAAa,SAAS,IAAI,EAAE;AAE9C,gBAAY,CAAC,IAAI,YAAY,CAAC,IAAI;AAAA,EACpC;AACA,OAAK,KAAK,EAAE,WAAW,UAAU,YAAY,CAAC;AAE9C,QAAM,iBAAkB,iBAAiB,KAAK,MAAO;AACrD,SAAOD,gBAAe,cAAc,YAAY,UAAU,cAAc;AAC1E;;;ADxEO,SAAS,sBAAsB,QAAkE;AACtG,SAAO,YAAY,EAAE,GAAG,QAAQ,KAAK,IAAID,SAAQ,CAAC,EAAE,CAAC;AACvD;;;AINA,SAAoB,kBAAAC,iBAA0B,WAAAD,UAAS,QAAAE,aAAY;AACnE,OAAOC,gBAAe;;;ACDtB,SAAS,WAAAH,gBAAe;;;ACAxB,SAAS,WAAAK,gBAAe;;;ACAxB,SAAS,iBAAiB;AAInB,IAAM,QAA0B;AAAA,EACrC;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,UAAU;AAAA,IACjB,YAAY,UAAU;AAAA,IACtB,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,UAAU;AAAA,IACjB,YAAY,UAAU;AAAA,IACtB,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,UAAU;AAAA,IACjB,YAAY,UAAU;AAAA,IACtB,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,UAAU;AAAA,IACjB,YAAY,UAAU;AAAA,IACtB,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,UAAU;AAAA,IACjB,YAAY,UAAU;AAAA,IACtB,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,UAAU;AAAA,IACjB,YAAY,UAAU;AAAA,IACtB,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,UAAU;AAAA,IACjB,YAAY,UAAU;AAAA,IACtB,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,UAAU;AAAA,IACjB,YAAY,UAAU;AAAA,IACtB,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,UAAU;AAAA,IACjB,YAAY,UAAU;AAAA,IACtB,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,UAAU;AAAA,IACjB,YAAY,UAAU;AAAA,IACtB,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,UAAU;AAAA,IACjB,YAAY,UAAU;AAAA,IACtB,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,UAAU;AAAA,IACjB,YAAY,UAAU;AAAA,IACtB,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AACF;;;AC7HA,SAAS,sBAAsB;AAIxB,IAAMC,SAA0B;AAAA,EACrC;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,eAAe;AAAA,IACtB,YAAY,eAAe;AAAA,IAC3B,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,eAAe;AAAA,IACtB,YAAY,eAAe;AAAA,IAC3B,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AACF;;;ACzBA,SAAS,aAAa;AACtB,SAAS,eAAe;AACxB,SAAS,wBAAwB;AAIjC,IAAM,WAAW,IAAI,MAAM,QAAQ,aAAa,8CAA8C,IAAI,QAAQ,YAAY;AAE/G,IAAMA,SAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrC;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO;AAAA;AAAA,IACP,YAAY,iBAAiB;AAAA;AAAA,IAC7B,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO;AAAA;AAAA,IACP,YAAY,iBAAiB;AAAA;AAAA,IAC7B,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,iBAAiB;AAAA;AAAA,IACxB,YAAY,iBAAiB;AAAA;AAAA,IAC7B,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO,iBAAiB;AAAA;AAAA,IACxB,YAAY,iBAAiB;AAAA;AAAA,IAC7B,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,2BAA2B;AAAA,EAC7B;AACF;;;AH9CO,IAAM,wBAAwB,CAAC,YAAmE;AACvG,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AACA,SAAO,2BAA2B,SAAS,OAAO;AACpD;AAEO,IAAM,6BAA6B,CAACD,SAAQ,KAAKA,SAAQ,aAAaA,SAAQ,YAAY;AAI1F,IAAM,kBAAkB;AAAA,EAC7B,CAACA,SAAQ,GAAG,GAAG;AAAA,EACf,CAACA,SAAQ,WAAW,GAAGC;AAAA,EACvB,CAACD,SAAQ,YAAY,GAAGC;AAC1B;;;AIrBO,SAAS,mBAAmB,SAAoC;AAErE,MAAI,CAAC,sBAAsB,OAAO,GAAG;AACnC,WAAO,CAAC;AAAA,EACV;AACA,SAAO,gBAAgB,OAAO,KAAK,CAAC;AACtC;;;ALPO,IAAM,sBAAsB,IAAIN,SAAQ,GAAG;;;ADe3C,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AACF,GAAkD;AAChD,QAAM,oBAAoB,CAAC,MACzBG,WAAU,CAAC,EAAE,SAASD,KAAI,GAAG,4CAA4C;AAE3E,MAAI,IAAmB;AACvB,MAAI,IAAmB;AACvB,QAAM,WAAqB,CAAC;AAC5B,aAAW,CAAC,OAAO,CAAC,KAAK,eAAe,QAAQ,GAAG;AACjD,aAAS,KAAK,aAAa,CAAC,CAAC;AAC7B,QAAI,EAAE,SAAS,QAAQ,OAAO,OAAO,SAAS,OAAO,GAAG;AACtD,UAAI;AAEJ;AAAA,IACF;AACA,QAAI,EAAE,SAAS,QAAQ,OAAO,eAAe,OAAO,GAAG;AACrD,UAAI;AAEJ;AAAA,IACF;AAAA,EACF;AAEA,EAAAC;AAAA,IACE,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAAA,IAClC;AAAA,EACF;AAGA,MAAI,OAAO,WAAWD,OAAM;AAC1B,UAAM,IAAI,oBAAoB,SAAS,GAAG,EAAE,OAAO,EAAE,SAAS,aAAa,MAAM,CAAC,EAAE;AACpF,UAAMK,KAAI,KAAK,EAAE,WAAW,UAAU,GAAG,GAAG,EAAE,CAAC;AAC/C,UAAMC,MAAKD,KAAI,SAAS,CAAC;AACzB,UAAME,aAAY,YAAY,gBAAgBD,GAAE;AAChD,sBAAkBC,UAAS;AAC3B,WAAOA;AAAA,EACT;AAEA,QAAM,IAAI,KAAK,EAAE,WAAW,UAAU,GAAG,GAAG,GAAG,aAAa,MAAM,EAAE,CAAC;AACrE,QAAM,KAAK,SAAS,CAAC,IAAI;AACzB,QAAM,YAAY,IAAI,SAAS,EAAE,EAAE;AACnC,QAAM,YAAY,YAAY,gBAAgB,KAAK,SAAS;AAC5D,oBAAkB,SAAS;AAC3B,SAAO;AACT;AAEO,SAAS,wBAAwB,QAAoE;AAC1G,SAAO,cAAc,EAAE,GAAG,QAAQ,KAAK,IAAIT,SAAQ,CAAC,EAAE,CAAC;AACzD;AAEO,SAAS,aAAa,EAAE,QAAQ,GAAG,KAAK,GAAwB;AACrE,SAAO,cAAc;AAAA,IACnB,GAAG;AAAA,IACH,QAAQC,gBAAe,cAAc,OAAO,UAAU,CAAC,OAAO,QAAQ;AAAA,EACxE,CAAC;AACH;AAEO,SAAS,uBAAuB,QAA0C;AAC/E,SAAO,aAAa,EAAE,GAAG,QAAQ,KAAK,IAAID,SAAQ,CAAC,EAAE,CAAC;AACxD;AAEA,SAAS,kBAAkB,WAAoB;AAC7C,QAAM,eAAe,YAAY,gBAAgB;AACjD,QAAM,YAAY,CAChB,UACA,QACA,UAEA,SAAS,IAAI,CAAC,MAAM;AAClB,QAAI,EAAE,SAAS,OAAO,OAAO,QAAQ,GAAG;AACtC,aAAO,YAAY,EAAE,IAAI,MAAM,IAAI,EAAE,SAAS,MAAM;AAAA,IACtD;AACA,QAAI,EAAE,SAAS,OAAO,MAAM,QAAQ,GAAG;AACrC,aAAO,YAAY,EAAE,SAAS,KAAK,IAAI,EAAE,IAAI,KAAK;AAAA,IACpD;AACA,WAAO;AAAA,EACT,CAAC;AAEH,SAAO,SAAS,SACd,QACyF;AACzF,UAAM,EAAE,UAAU,WAAW,KAAK,OAAO,IAAI;AAC7C,UAAM,QAAQ,aAAa,MAAM;AACjC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE,UAAU,UAAU,UAAU,QAAQ,KAAK;AAAA,QAC3C;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,kBAAkB,kBAAkB,IAAI;AAE9C,IAAM,mBAAmB,kBAAkB,KAAK","sourcesContent":["import { CurrencyAmount, Currency, Percent } from '@pancakeswap/swap-sdk-core'\n\nimport { getLPOutput, GetLPOutputParams } from './getLPOutput'\n\nexport function getLPOutputWithoutFee(params: Omit<GetLPOutputParams, 'fee'>): CurrencyAmount<Currency> {\n return getLPOutput({ ...params, fee: new Percent(0) })\n}\n","import { BigintIsh, CurrencyAmount, Currency, ZERO, Percent } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\nimport { getD } from './amm'\nimport { getRawAmount } from './utils'\n\nexport interface GetLPOutputParams {\n amplifier: BigintIsh\n // Token balances of the stable pool\n balances: CurrencyAmount<Currency>[]\n // User input amounts\n amounts: CurrencyAmount<Currency>[]\n // Total supply of LP token\n totalSupply: CurrencyAmount<Currency>\n // Fee of adding liquidity\n fee: Percent\n}\n\nexport function getLPOutput({\n amplifier,\n balances,\n totalSupply,\n amounts,\n fee,\n}: GetLPOutputParams): CurrencyAmount<Currency> {\n const lpToken = totalSupply.currency\n const lpTotalSupply = totalSupply.quotient\n // No liquidity in pool\n if (lpTotalSupply === ZERO || !balances.length || balances.every((b) => b.quotient === ZERO)) {\n const d = getD({ amplifier, balances: amounts.map(getRawAmount) })\n return CurrencyAmount.fromRawAmount(lpToken, d)\n }\n\n const currentBalances: bigint[] = []\n const newBalances: bigint[] = []\n for (const [i, balance] of balances.entries()) {\n const amount = amounts[i] || CurrencyAmount.fromRawAmount(balance.currency, 0)\n invariant(\n amount.currency.wrapped.equals(balance.currency.wrapped),\n 'User input currency should be the same as pool balance currency.',\n )\n const balanceRaw = getRawAmount(balance)\n const amountRaw = getRawAmount(amount)\n currentBalances.push(balanceRaw)\n newBalances.push(balanceRaw + amountRaw)\n }\n\n const d0 = getD({ amplifier, balances: currentBalances })\n const d1 = getD({ amplifier, balances: newBalances })\n invariant(d1 >= d0, 'D1 should be greater than or equal than d0.')\n\n const isFirstSupply = lpTotalSupply <= ZERO\n if (isFirstSupply) {\n return CurrencyAmount.fromRawAmount(totalSupply.currency, d1)\n }\n\n const n = currentBalances.length\n const eachTokenFee = fee.multiply(n).divide(4 * (n - 1))\n\n let d2 = d1\n for (const [i, b] of currentBalances.entries()) {\n const idealBalance = (d1 * b) / d0\n let diff = ZERO\n if (idealBalance > newBalances[i]) {\n diff = idealBalance - newBalances[i]\n } else {\n diff = newBalances[i] - idealBalance\n }\n const feeAmount = eachTokenFee.multiply(diff).quotient\n // eslint-disable-next-line operator-assignment\n newBalances[i] = newBalances[i] - feeAmount\n }\n d2 = getD({ amplifier, balances: newBalances })\n\n const expectedMintLP = (lpTotalSupply * (d2 - d0)) / d0\n return CurrencyAmount.fromRawAmount(totalSupply.currency, expectedMintLP)\n}\n","import { BigintIsh, ZERO, ONE } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\ninterface Params {\n amplifier: BigintIsh\n balances: BigintIsh[]\n}\n\n/**\n * Calculate the constant D of Curve AMM formula\n * @see https://classic.curve.fi/files/stableswap-paper.pdf\n */\nexport function getD({ amplifier, balances }: Params): bigint {\n const numOfCoins = balances.length\n invariant(numOfCoins > 1, 'To get constant D, pool should have at least two coins.')\n\n const sum = balances.reduce<bigint>((s, cur) => s + BigInt(cur), ZERO)\n if (sum === ZERO) {\n return ZERO\n }\n\n const n = BigInt(numOfCoins)\n // Equality with the precision of 1\n const precision = ONE\n // The amplifier is actually An^n-1, so we only times n here\n const ann = BigInt(amplifier) * n\n let dPrev = ZERO\n let d = sum\n for (let i = 0; i < 255; i += 1) {\n let dp = d\n for (const b of balances) {\n dp = (dp * d) / (BigInt(b) * n + 1n)\n }\n dPrev = d\n d = ((ann * sum + dp * n) * d) / ((ann - ONE) * d + (n + ONE) * dp)\n\n if (d > dPrev && d - dPrev <= precision) {\n break\n }\n\n if (d <= dPrev && dPrev - d <= precision) {\n break\n }\n }\n\n return d\n}\n\ninterface GetYParams {\n amplifier: BigintIsh\n balances: BigintIsh[]\n // The index of the base token\n i: number\n // The index of the swap target token\n j: number\n // The amount of token i that user deposit\n x: BigintIsh\n}\n\n/**\n * Calculate the expected token amount y after user deposit\n * @see https://classic.curve.fi/files/stableswap-paper.pdf\n */\nexport function getY({ amplifier, balances, i, j, x }: GetYParams): bigint {\n const numOfCoins = balances.length\n invariant(numOfCoins > 1, 'To get y, pool should have at least two coins.')\n invariant(i !== j && i >= 0 && j >= 0 && i < numOfCoins && j < numOfCoins, `Invalid i: ${i} and j: ${j}`)\n\n const n = BigInt(numOfCoins)\n const d = getD({ amplifier, balances })\n let sum = ZERO\n let c = d\n // The amplifier is actually An^n-1, so we only times n here\n const ann = BigInt(amplifier) * n\n for (const [index, b] of balances.entries()) {\n if (index === j) {\n // eslint-disable-next-line no-continue\n continue\n }\n let balanceAfterDeposit = BigInt(b)\n if (index === i) {\n balanceAfterDeposit += BigInt(x)\n }\n\n invariant(balanceAfterDeposit > ZERO, 'Insufficient liquidity')\n\n sum += balanceAfterDeposit\n c = (c * d) / (balanceAfterDeposit * n)\n }\n c = (c * d) / (ann * n)\n const b = sum + d / ann\n\n // Equality with the precision of 1\n const precision = ONE\n let yPrev = ZERO\n let y = d\n for (let k = 0; k < 255; k += 1) {\n yPrev = y\n y = (y * y + c) / (2n * y + b - d)\n\n if (y > yPrev && y - yPrev <= precision) {\n break\n }\n\n if (y <= yPrev && yPrev - y <= precision) {\n break\n }\n }\n\n return y\n}\n","import { CurrencyAmount, Currency } from '@pancakeswap/swap-sdk-core'\n\nconst PRECISION = 10n ** 18n\n\nexport const getRawAmount = (amount: CurrencyAmount<Currency>) => {\n return (amount.quotient * PRECISION) / 10n ** BigInt(amount.currency.decimals)\n}\n\nexport const parseAmount = (currency: Currency, rawAmount: bigint) => {\n return CurrencyAmount.fromRawAmount(currency, (rawAmount * 10n ** BigInt(currency.decimals)) / PRECISION)\n}\n","import { BigintIsh, CurrencyAmount, Currency, Percent, ZERO } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\nimport { getY } from './amm'\nimport { getRawAmount, parseAmount } from './utils'\nimport { ONE_HUNDRED_PERCENT } from '../constants'\n\nexport interface GetSwapOutputParams {\n amplifier: BigintIsh\n // Token balances of the stable pool\n balances: CurrencyAmount<Currency>[]\n // User input amount\n amount: CurrencyAmount<Currency>\n // The currency user want to swap to\n outputCurrency: Currency\n // Fee of swapping\n fee: Percent\n}\n\nexport function getSwapOutput({\n amplifier,\n balances: balanceAmounts,\n outputCurrency,\n amount,\n fee,\n}: GetSwapOutputParams): CurrencyAmount<Currency> {\n const validateAmountOut = (a: CurrencyAmount<Currency>) =>\n invariant(!a.lessThan(ZERO), 'Insufficient liquidity to perform the swap')\n\n let i: number | null = null\n let j: number | null = null\n const balances: bigint[] = []\n for (const [index, b] of balanceAmounts.entries()) {\n balances.push(getRawAmount(b))\n if (b.currency.wrapped.equals(amount.currency.wrapped)) {\n i = index\n // eslint-disable-next-line no-continue\n continue\n }\n if (b.currency.wrapped.equals(outputCurrency.wrapped)) {\n j = index\n // eslint-disable-next-line no-continue\n continue\n }\n }\n\n invariant(\n i !== null && j !== null && i !== j,\n 'Input currency or output currency does not match currencies of token balances.',\n )\n\n // Exact output\n if (amount.quotient < ZERO) {\n const x = ONE_HUNDRED_PERCENT.subtract(fee).invert().multiply(getRawAmount(amount)).quotient\n const y = getY({ amplifier, balances, i, j, x })\n const dy = y - balances[j]\n const amountOut = parseAmount(outputCurrency, dy)\n validateAmountOut(amountOut)\n return amountOut\n }\n\n const y = getY({ amplifier, balances, i, j, x: getRawAmount(amount) })\n const dy = balances[j] - y\n const feeAmount = fee.multiply(dy).quotient\n const amountOut = parseAmount(outputCurrency, dy - feeAmount)\n validateAmountOut(amountOut)\n return amountOut\n}\n\nexport function getSwapOutputWithoutFee(params: Omit<GetSwapOutputParams, 'fee'>): CurrencyAmount<Currency> {\n return getSwapOutput({ ...params, fee: new Percent(0) })\n}\n\nexport function getSwapInput({ amount, ...rest }: GetSwapOutputParams) {\n return getSwapOutput({\n ...rest,\n amount: CurrencyAmount.fromRawAmount(amount.currency, -amount.quotient),\n })\n}\n\nexport function getSwapInputWithtouFee(params: Omit<GetSwapOutputParams, 'fee'>) {\n return getSwapInput({ ...params, fee: new Percent(0) })\n}\n\nfunction createQuoteGetter(isExactIn: boolean) {\n const getSwapQuote = isExactIn ? getSwapOutput : getSwapInput\n const applySwap = (\n balances: CurrencyAmount<Currency>[],\n amount: CurrencyAmount<Currency>,\n quote: CurrencyAmount<Currency>,\n ): CurrencyAmount<Currency>[] =>\n balances.map((b) => {\n if (b.currency.equals(amount.currency)) {\n return isExactIn ? b.add(amount) : b.subtract(amount)\n }\n if (b.currency.equals(quote.currency)) {\n return isExactIn ? b.subtract(quote) : b.add(quote)\n }\n return b\n })\n\n return function getQuote(\n params: GetSwapOutputParams,\n ): [CurrencyAmount<Currency>, Pick<GetSwapOutputParams, 'balances' | 'fee' | 'amplifier'>] {\n const { balances, amplifier, fee, amount } = params\n const quote = getSwapQuote(params)\n return [\n quote,\n {\n balances: applySwap(balances, amount, quote),\n amplifier,\n fee,\n },\n ]\n }\n}\n\nexport const getQuoteExactIn = createQuoteGetter(true)\n\nexport const getQuoteExactOut = createQuoteGetter(false)\n","import { Percent } from '@pancakeswap/swap-sdk-core'\n\nexport * from './pools'\n\nexport const ONE_HUNDRED_PERCENT = new Percent('1')\n","import { ChainId } from '@pancakeswap/chains'\n\nimport { StableSwapPool } from '../../types'\nimport { pools as bscPools } from './bsc'\nimport { pools as arbPools } from './arb'\nimport { pools as bscTestnetPools } from './bscTestnet'\n\nexport type StableSwapPoolMap<TChainId extends number> = {\n [chainId in TChainId]: StableSwapPool[]\n}\n\nexport const isStableSwapSupported = (chainId: number | undefined): chainId is StableSupportedChainId => {\n if (!chainId) {\n return false\n }\n return STABLE_SUPPORTED_CHAIN_IDS.includes(chainId)\n}\n\nexport const STABLE_SUPPORTED_CHAIN_IDS = [ChainId.BSC, ChainId.BSC_TESTNET, ChainId.ARBITRUM_ONE] as const\n\nexport type StableSupportedChainId = (typeof STABLE_SUPPORTED_CHAIN_IDS)[number]\n\nexport const STABLE_POOL_MAP = {\n [ChainId.BSC]: bscPools,\n [ChainId.BSC_TESTNET]: bscTestnetPools,\n [ChainId.ARBITRUM_ONE]: arbPools,\n} satisfies StableSwapPoolMap<StableSupportedChainId>\n","import { bscTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'lisUSD-BUSD LP',\n lpAddress: '0xB6040A9F294477dDAdf5543a24E5463B8F2423Ae',\n token: bscTokens.hay,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0x49079D07ef47449aF808A4f36c2a8dEC975594eC',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x36842F8fb99D55477C0Da638aF5ceb6bBf86aA98',\n token: bscTokens.usdt,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0x169F653A54ACD441aB34B73dA9946e2C451787EF',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDC-BUSD LP',\n lpAddress: '0x1A77C359D0019cD8F4d36b7CDf5a88043D801072',\n token: bscTokens.usdc,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0xc2F5B9a3d9138ab2B74d581fC11346219eBf43Fe',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-USDC LP',\n lpAddress: '0xee1bcc9F1692E81A281b3a302a4b67890BA4be76',\n token: bscTokens.usdt,\n quoteToken: bscTokens.usdc,\n stableSwapAddress: '0x3EFebC418efB585248A0D2140cfb87aFcc2C63DD',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'axlUSDC-USDT LP',\n lpAddress: '0x1c7e5a3A72b6D94DE5Ec20812E3e68713978a584',\n token: bscTokens.axlusdc,\n quoteToken: bscTokens.usdt,\n stableSwapAddress: '0x6D8fba276ec6F1EDa2344DA48565AdbCA7e4FFa5',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'WBNB-stkBNB LP',\n lpAddress: '0x9976f5c8BEfDee650226d5571d5F5551e8722b75',\n token: bscTokens.wbnb,\n quoteToken: bscTokens.stkbnb,\n stableSwapAddress: '0x0b03e3d6Ec0c5e5bBf993dED8D947C6fb6eEc18D',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'BNBx-BNB LP',\n lpAddress: '0x92357Ab9003CA881E08e32CDAE59B10B3161b05C',\n token: bscTokens.bnbx,\n quoteToken: bscTokens.wbnb,\n stableSwapAddress: '0x9c138bE1D76ee4C5162E0fe9D4eEA5542a23D1bD',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'lisUSD-USDT LP',\n lpAddress: '0xB2Aa63f363196caba3154D4187949283F085a488',\n token: bscTokens.hay,\n quoteToken: bscTokens.usdt,\n stableSwapAddress: '0xb1Da7D2C257c5700612BdE35C8d7187dc80d79f1',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0004,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'CAKE-sdCAKE LP',\n lpAddress: '0xB1D54d76E2cB9425Ec9c018538cc531440b55dbB',\n token: bscTokens.cake,\n quoteToken: bscTokens.sdcake,\n stableSwapAddress: '0xb8204D31379A9B317CD61C833406C972F58ecCbC',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.001,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'CAKE-mCAKE LP',\n lpAddress: '0xb9dC6396AcFFD24E0f69Dfd3231fDaeB31514D02',\n token: bscTokens.cake,\n quoteToken: bscTokens.mcake,\n stableSwapAddress: '0xc54d35a8Cfd9f6dAe50945Df27A91C9911A03ab1',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mPENDLE-PENDLE LP',\n lpAddress: '0x183F325b33d190597D80d1B46D865d0250fD9BF2',\n token: bscTokens.mpendle,\n quoteToken: bscTokens.pendle,\n stableSwapAddress: '0xD8CB82059da7215b1a9604E845d49D3e78d0f95A',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mDLP-DLP LP',\n lpAddress: '0xA2915ae3bc8C6C03f59496B6Dd26aa6a4335b788',\n token: bscTokens.mdlp,\n quoteToken: bscTokens.dlp,\n stableSwapAddress: '0x25d0eD3b1cE5aF0F3Ac7da4b39B46FC409bF67e2',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { arbitrumTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'PENDLE-mPENDLE LP',\n lpAddress: '0x1A2329546f11e4fE55b853D98Bba2c4678E3105A',\n token: arbitrumTokens.pendle,\n quoteToken: arbitrumTokens.mpendle,\n stableSwapAddress: '0x73ed25e04Aa673ddf7411441098fC5ae19976CE0',\n infoStableSwapAddress: '0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'DLP-mDLP LP',\n lpAddress: '0x0db5e247ab73FBaE16d9301f2977f974EC0AA336',\n token: arbitrumTokens.dlp,\n quoteToken: arbitrumTokens.mdlp,\n stableSwapAddress: '0xd0f0be815a76eFE677c92b07b39a5e972BAf22bD',\n infoStableSwapAddress: '0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { Token } from '@pancakeswap/swap-sdk-core'\nimport { ChainId } from '@pancakeswap/chains'\nimport { bscTestnetTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nconst mockUSDT = new Token(ChainId.BSC_TESTNET, '0x0fB5D7c73FA349A90392f873a4FA1eCf6a3d0a96', 18, 'USDT', 'MOCK Token')\n\nexport const pools: StableSwapPool[] = [\n // {\n // lpSymbol: 'USDC-BUSD LP',\n // lpAddress: '0xd1742b5eC6798cEB8C791e0ebbEf606A4946f67E',\n // token: bscTestnetTokens.usdc, // coins[0]\n // quoteToken: bscTestnetTokens.busd, // coins[1]\n // stableSwapAddress: '0x1288026D2c5a76A5bfb0730F615131A448f4Ad06',\n // infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n // },\n {\n lpSymbol: 'USDT-WBNB LP',\n lpAddress: '0x4c091Dc4418Bd3353A87488535528FD86954da2c',\n token: mockUSDT, // coins[0]\n quoteToken: bscTestnetTokens.wbnb, // coins[1]\n stableSwapAddress: '0xBcd585Ee8B8Ac8de6b0e45dA32Aa31703036b2a1',\n infoStableSwapAddress: '0x0A548d59D04096Bc01206D58C3D63c478e1e06dB',\n stableLpFee: 0.0004,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x746a7063101E2D3305D1556888ee08193f2B9a07',\n token: mockUSDT, // coins[0]\n quoteToken: bscTestnetTokens.busd, // coins[1]\n stableSwapAddress: '0xE25A1352477f3DB9B3008B31e9b7a07a18f8A9e6',\n infoStableSwapAddress: '0x0A548d59D04096Bc01206D58C3D63c478e1e06dB',\n stableLpFee: 0.0004,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'BUSD-USDC LP',\n lpAddress: '0x7CA885d338462790DD1B5416ebe6bec75ee045a1',\n token: bscTestnetTokens.mockBusd, // coins[0]\n quoteToken: bscTestnetTokens.usdc, // coins[1]\n stableSwapAddress: '0xd5E56CD4c8111643a94Ee084df31F44055a1EC9F',\n infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x9Fa2Ef2C3dF6F903F4b73047311e861C51a11B60',\n token: bscTestnetTokens.usdt, // coins[0]\n quoteToken: bscTestnetTokens.mockBusd, // coins[1]\n stableSwapAddress: '0xc418d68751Cbe0407C8fdd90Cde73cE95b892f39',\n infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { ChainId } from '@pancakeswap/chains'\n\nimport { isStableSwapSupported, STABLE_POOL_MAP, STABLE_SUPPORTED_CHAIN_IDS } from './pools'\nimport { StableSwapPool } from '../../types'\n\nexport function getStableSwapPools(chainId: ChainId): StableSwapPool[] {\n // Stable swap is only supported on BSC chain & BSC testnet\n if (!isStableSwapSupported(chainId)) {\n return []\n }\n return STABLE_POOL_MAP[chainId] || []\n}\n\nexport { isStableSwapSupported, STABLE_SUPPORTED_CHAIN_IDS }\n"]}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SerializedWrappedToken } from '@pancakeswap/token-lists';
|
|
2
|
+
type Address = `0x${string}`;
|
|
3
|
+
export interface BasePool {
|
|
4
|
+
lpSymbol: string;
|
|
5
|
+
lpAddress: Address;
|
|
6
|
+
token: SerializedWrappedToken;
|
|
7
|
+
quoteToken: SerializedWrappedToken;
|
|
8
|
+
}
|
|
9
|
+
export interface StableSwapPool extends BasePool {
|
|
10
|
+
stableSwapAddress: Address;
|
|
11
|
+
infoStableSwapAddress: Address;
|
|
12
|
+
stableLpFee: number;
|
|
13
|
+
stableLpFeeRateOfTotalFee: number;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEtE,KAAK,OAAO,GAAG,KAAK,MAAM,EAAE,CAAA;AAE5B,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,sBAAsB,CAAA;IAC7B,UAAU,EAAE,sBAAsB,CAAA;CACnC;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,iBAAiB,EAAE,OAAO,CAAA;IAC1B,qBAAqB,EAAE,OAAO,CAAA;IAC9B,WAAW,EAAE,MAAM,CAAA;IACnB,yBAAyB,EAAE,MAAM,CAAA;CAClC"}
|