@pancakeswap/stable-swap-sdk 1.0.15 → 1.1.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.
@@ -1 +1 @@
1
- {"version":3,"file":"arb.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/arb.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,eAAO,MAAM,KAAK,EAAE,cAAc,EAqBjC,CAAA"}
1
+ {"version":3,"file":"arb.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/arb.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,eAAO,MAAM,KAAK,EAAE,cAAc,EAuBjC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"bsc.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/bsc.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,eAAO,MAAM,KAAK,EAAE,cAAc,EAmIjC,CAAA"}
1
+ {"version":3,"file":"bsc.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/bsc.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,eAAO,MAAM,KAAK,EAAE,cAAc,EA2JjC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"bscTestnet.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/bscTestnet.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAI5C,eAAO,MAAM,KAAK,EAAE,cAAc,EAiDjC,CAAA"}
1
+ {"version":3,"file":"bscTestnet.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/bscTestnet.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAI5C,eAAO,MAAM,KAAK,EAAE,cAAc,EAqDjC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { StableSwapPool } from '../../types';
2
+ export declare const pools: StableSwapPool[];
3
+ //# sourceMappingURL=eth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eth.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/eth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,eAAO,MAAM,KAAK,EAAE,cAAc,EAYjC,CAAA"}
@@ -3,12 +3,13 @@ import { StableSwapPool } from '../../types';
3
3
  export type StableSwapPoolMap<TChainId extends number> = {
4
4
  [chainId in TChainId]: StableSwapPool[];
5
5
  };
6
- export declare const isStableSwapSupported: (chainId: number | undefined) => chainId is ChainId.BSC | ChainId.BSC_TESTNET | ChainId.ARBITRUM_ONE;
7
- export declare const STABLE_SUPPORTED_CHAIN_IDS: readonly [ChainId.BSC, ChainId.BSC_TESTNET, ChainId.ARBITRUM_ONE];
6
+ export declare const isStableSwapSupported: (chainId: number | undefined) => chainId is ChainId.ETHEREUM | ChainId.BSC | ChainId.BSC_TESTNET | ChainId.ARBITRUM_ONE;
7
+ export declare const STABLE_SUPPORTED_CHAIN_IDS: readonly [ChainId.BSC, ChainId.BSC_TESTNET, ChainId.ARBITRUM_ONE, ChainId.ETHEREUM];
8
8
  export type StableSupportedChainId = (typeof STABLE_SUPPORTED_CHAIN_IDS)[number];
9
9
  export declare const STABLE_POOL_MAP: {
10
10
  56: StableSwapPool[];
11
11
  97: StableSwapPool[];
12
12
  42161: StableSwapPool[];
13
+ 1: StableSwapPool[];
13
14
  };
14
15
  //# sourceMappingURL=pools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pools.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/pools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAK5C,MAAM,MAAM,iBAAiB,CAAC,QAAQ,SAAS,MAAM,IAAI;KACtD,OAAO,IAAI,QAAQ,GAAG,cAAc,EAAE;CACxC,CAAA;AAED,eAAO,MAAM,qBAAqB,YAAa,MAAM,GAAG,SAAS,wEAKhE,CAAA;AAED,eAAO,MAAM,0BAA0B,mEAAoE,CAAA;AAE3G,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAA;AAEhF,eAAO,MAAM,eAAe;;;;CAIyB,CAAA"}
1
+ {"version":3,"file":"pools.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/pools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAM5C,MAAM,MAAM,iBAAiB,CAAC,QAAQ,SAAS,MAAM,IAAI;KACtD,OAAO,IAAI,QAAQ,GAAG,cAAc,EAAE;CACxC,CAAA;AAED,eAAO,MAAM,qBAAqB,YAAa,MAAM,GAAG,SAAS,2FAKhE,CAAA;AAED,eAAO,MAAM,0BAA0B,qFAK7B,CAAA;AAEV,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAA;AAEhF,eAAO,MAAM,eAAe;;;;;CAKyB,CAAA"}
package/dist/index.cjs CHANGED
@@ -149,6 +149,7 @@ var pools = [
149
149
  quoteToken: tokens.bscTokens.busd,
150
150
  stableSwapAddress: "0x49079D07ef47449aF808A4f36c2a8dEC975594eC",
151
151
  infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
152
+ stableTotalFee: 4e-4,
152
153
  stableLpFee: 2e-4,
153
154
  stableLpFeeRateOfTotalFee: 0.5
154
155
  },
@@ -159,6 +160,7 @@ var pools = [
159
160
  quoteToken: tokens.bscTokens.busd,
160
161
  stableSwapAddress: "0x169F653A54ACD441aB34B73dA9946e2C451787EF",
161
162
  infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
163
+ stableTotalFee: 1e-4,
162
164
  stableLpFee: 5e-5,
163
165
  stableLpFeeRateOfTotalFee: 0.5
164
166
  },
@@ -169,6 +171,7 @@ var pools = [
169
171
  quoteToken: tokens.bscTokens.busd,
170
172
  stableSwapAddress: "0xc2F5B9a3d9138ab2B74d581fC11346219eBf43Fe",
171
173
  infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
174
+ stableTotalFee: 1e-4,
172
175
  stableLpFee: 5e-5,
173
176
  stableLpFeeRateOfTotalFee: 0.5
174
177
  },
@@ -179,6 +182,7 @@ var pools = [
179
182
  quoteToken: tokens.bscTokens.usdc,
180
183
  stableSwapAddress: "0x3EFebC418efB585248A0D2140cfb87aFcc2C63DD",
181
184
  infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
185
+ stableTotalFee: 1e-4,
182
186
  stableLpFee: 5e-5,
183
187
  stableLpFeeRateOfTotalFee: 0.5
184
188
  },
@@ -189,6 +193,7 @@ var pools = [
189
193
  quoteToken: tokens.bscTokens.usdt,
190
194
  stableSwapAddress: "0x6D8fba276ec6F1EDa2344DA48565AdbCA7e4FFa5",
191
195
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
196
+ stableTotalFee: 4e-4,
192
197
  stableLpFee: 2e-4,
193
198
  stableLpFeeRateOfTotalFee: 0.5
194
199
  },
@@ -199,6 +204,7 @@ var pools = [
199
204
  quoteToken: tokens.bscTokens.stkbnb,
200
205
  stableSwapAddress: "0x0b03e3d6Ec0c5e5bBf993dED8D947C6fb6eEc18D",
201
206
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
207
+ stableTotalFee: 4e-4,
202
208
  stableLpFee: 2e-4,
203
209
  stableLpFeeRateOfTotalFee: 0.5
204
210
  },
@@ -209,6 +215,7 @@ var pools = [
209
215
  quoteToken: tokens.bscTokens.wbnb,
210
216
  stableSwapAddress: "0x9c138bE1D76ee4C5162E0fe9D4eEA5542a23D1bD",
211
217
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
218
+ stableTotalFee: 4e-4,
212
219
  stableLpFee: 2e-4,
213
220
  stableLpFeeRateOfTotalFee: 0.5
214
221
  },
@@ -219,7 +226,8 @@ var pools = [
219
226
  quoteToken: tokens.bscTokens.usdt,
220
227
  stableSwapAddress: "0xb1Da7D2C257c5700612BdE35C8d7187dc80d79f1",
221
228
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
222
- stableLpFee: 4e-4,
229
+ stableTotalFee: 4e-4,
230
+ stableLpFee: 2e-4,
223
231
  stableLpFeeRateOfTotalFee: 0.5
224
232
  },
225
233
  {
@@ -229,7 +237,8 @@ var pools = [
229
237
  quoteToken: tokens.bscTokens.sdcake,
230
238
  stableSwapAddress: "0xb8204D31379A9B317CD61C833406C972F58ecCbC",
231
239
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
232
- stableLpFee: 1e-3,
240
+ stableTotalFee: 1e-3,
241
+ stableLpFee: 5e-4,
233
242
  stableLpFeeRateOfTotalFee: 0.5
234
243
  },
235
244
  {
@@ -239,7 +248,8 @@ var pools = [
239
248
  quoteToken: tokens.bscTokens.mcake,
240
249
  stableSwapAddress: "0xc54d35a8Cfd9f6dAe50945Df27A91C9911A03ab1",
241
250
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
242
- stableLpFee: 5e-3,
251
+ stableTotalFee: 5e-3,
252
+ stableLpFee: 25e-4,
243
253
  stableLpFeeRateOfTotalFee: 0.5
244
254
  },
245
255
  {
@@ -249,7 +259,8 @@ var pools = [
249
259
  quoteToken: tokens.bscTokens.pendle,
250
260
  stableSwapAddress: "0xD8CB82059da7215b1a9604E845d49D3e78d0f95A",
251
261
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
252
- stableLpFee: 25e-4,
262
+ stableTotalFee: 25e-4,
263
+ stableLpFee: 125e-5,
253
264
  stableLpFeeRateOfTotalFee: 0.5
254
265
  },
255
266
  {
@@ -259,7 +270,8 @@ var pools = [
259
270
  quoteToken: tokens.bscTokens.dlp,
260
271
  stableSwapAddress: "0x25d0eD3b1cE5aF0F3Ac7da4b39B46FC409bF67e2",
261
272
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
262
- stableLpFee: 25e-4,
273
+ stableTotalFee: 25e-4,
274
+ stableLpFee: 125e-5,
263
275
  stableLpFeeRateOfTotalFee: 0.5
264
276
  },
265
277
  {
@@ -269,6 +281,18 @@ var pools = [
269
281
  quoteToken: tokens.bscTokens.wbeth,
270
282
  stableSwapAddress: "0xfF5Ce4846A3708EA9befa6c3Ab145e63f65DC045",
271
283
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
284
+ stableTotalFee: 2e-4,
285
+ stableLpFee: 1e-4,
286
+ stableLpFeeRateOfTotalFee: 0.5
287
+ },
288
+ {
289
+ lpSymbol: "USDT-BITU LP",
290
+ lpAddress: "0x00020c0235677c9D66CE1E20A8FD4a2526d58CDb",
291
+ token: tokens.bscTokens.usdt,
292
+ quoteToken: tokens.bscTokens.bitu,
293
+ stableSwapAddress: "0x469F3B14FA289c960d272D4159eD005cFFC8D09D",
294
+ infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
295
+ stableTotalFee: 4e-4,
272
296
  stableLpFee: 2e-4,
273
297
  stableLpFeeRateOfTotalFee: 0.5
274
298
  }
@@ -281,7 +305,8 @@ var pools2 = [
281
305
  quoteToken: tokens.arbitrumTokens.mpendle,
282
306
  stableSwapAddress: "0x73ed25e04Aa673ddf7411441098fC5ae19976CE0",
283
307
  infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
284
- stableLpFee: 25e-4,
308
+ stableTotalFee: 25e-4,
309
+ stableLpFee: 125e-5,
285
310
  stableLpFeeRateOfTotalFee: 0.5
286
311
  },
287
312
  {
@@ -291,7 +316,8 @@ var pools2 = [
291
316
  quoteToken: tokens.arbitrumTokens.mdlp,
292
317
  stableSwapAddress: "0xd0f0be815a76eFE677c92b07b39a5e972BAf22bD",
293
318
  infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
294
- stableLpFee: 25e-4,
319
+ stableTotalFee: 25e-4,
320
+ stableLpFee: 125e-5,
295
321
  stableLpFeeRateOfTotalFee: 0.5
296
322
  }
297
323
  ];
@@ -314,7 +340,8 @@ var pools3 = [
314
340
  // coins[1]
315
341
  stableSwapAddress: "0xBcd585Ee8B8Ac8de6b0e45dA32Aa31703036b2a1",
316
342
  infoStableSwapAddress: "0x0A548d59D04096Bc01206D58C3D63c478e1e06dB",
317
- stableLpFee: 4e-4,
343
+ stableTotalFee: 4e-4,
344
+ stableLpFee: 2e-4,
318
345
  stableLpFeeRateOfTotalFee: 0.5
319
346
  },
320
347
  {
@@ -326,7 +353,8 @@ var pools3 = [
326
353
  // coins[1]
327
354
  stableSwapAddress: "0xE25A1352477f3DB9B3008B31e9b7a07a18f8A9e6",
328
355
  infoStableSwapAddress: "0x0A548d59D04096Bc01206D58C3D63c478e1e06dB",
329
- stableLpFee: 4e-4,
356
+ stableTotalFee: 4e-4,
357
+ stableLpFee: 2e-4,
330
358
  stableLpFeeRateOfTotalFee: 0.5
331
359
  },
332
360
  {
@@ -338,7 +366,8 @@ var pools3 = [
338
366
  // coins[1]
339
367
  stableSwapAddress: "0xd5E56CD4c8111643a94Ee084df31F44055a1EC9F",
340
368
  infoStableSwapAddress: "0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546",
341
- stableLpFee: 2e-4,
369
+ stableTotalFee: 15e-4,
370
+ stableLpFee: 75e-5,
342
371
  stableLpFeeRateOfTotalFee: 0.5
343
372
  },
344
373
  {
@@ -350,7 +379,21 @@ var pools3 = [
350
379
  // coins[1]
351
380
  stableSwapAddress: "0xc418d68751Cbe0407C8fdd90Cde73cE95b892f39",
352
381
  infoStableSwapAddress: "0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546",
353
- stableLpFee: 2e-4,
382
+ stableTotalFee: 15e-4,
383
+ stableLpFee: 75e-5,
384
+ stableLpFeeRateOfTotalFee: 0.5
385
+ }
386
+ ];
387
+ var pools4 = [
388
+ {
389
+ lpSymbol: "WBTC-mBTC LP",
390
+ lpAddress: "0xaB9dEBAED21270832cCdf54a7461A8E4B133B57A",
391
+ token: tokens.ethereumTokens.wbtc,
392
+ quoteToken: tokens.ethereumTokens.mBtc,
393
+ stableSwapAddress: "0x95A3832889B2c3455077991b834efA2d4fA3A945",
394
+ infoStableSwapAddress: "0xCcd9fea6bBF1910F4c188A5BBC13D98Ea4F5f9F9",
395
+ stableTotalFee: 2e-4,
396
+ stableLpFee: 1e-4,
354
397
  stableLpFeeRateOfTotalFee: 0.5
355
398
  }
356
399
  ];
@@ -362,11 +405,17 @@ var isStableSwapSupported = (chainId) => {
362
405
  }
363
406
  return STABLE_SUPPORTED_CHAIN_IDS.includes(chainId);
364
407
  };
365
- var STABLE_SUPPORTED_CHAIN_IDS = [chains.ChainId.BSC, chains.ChainId.BSC_TESTNET, chains.ChainId.ARBITRUM_ONE];
408
+ var STABLE_SUPPORTED_CHAIN_IDS = [
409
+ chains.ChainId.BSC,
410
+ chains.ChainId.BSC_TESTNET,
411
+ chains.ChainId.ARBITRUM_ONE,
412
+ chains.ChainId.ETHEREUM
413
+ ];
366
414
  var STABLE_POOL_MAP = {
367
415
  [chains.ChainId.BSC]: pools,
368
416
  [chains.ChainId.BSC_TESTNET]: pools3,
369
- [chains.ChainId.ARBITRUM_ONE]: pools2
417
+ [chains.ChainId.ARBITRUM_ONE]: pools2,
418
+ [chains.ChainId.ETHEREUM]: pools4
370
419
  };
371
420
 
372
421
  // src/constants/pools/index.ts
@@ -1 +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 lpSymbol: 'mwBETH-wBETH LP',\n lpAddress: '0x4cBEa76B4A1c42C356B4c52B0314A98313fFE9df',\n token: bscTokens.mwbeth,\n quoteToken: bscTokens.wbeth,\n stableSwapAddress: '0xfF5Ce4846A3708EA9befa6c3Ab145e63f65DC045',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\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"]}
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/eth.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'\nimport { pools as ethPools } from './eth'\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 = [\n ChainId.BSC,\n ChainId.BSC_TESTNET,\n ChainId.ARBITRUM_ONE,\n ChainId.ETHEREUM,\n] 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 [ChainId.ETHEREUM]: ethPools,\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 stableTotalFee: 0.0004,\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 stableTotalFee: 0.0001,\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 stableTotalFee: 0.0001,\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 stableTotalFee: 0.0001,\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 stableTotalFee: 0.0004,\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 stableTotalFee: 0.0004,\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 stableTotalFee: 0.0004,\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 stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\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 stableTotalFee: 0.001,\n stableLpFee: 0.0005,\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 stableTotalFee: 0.005,\n stableLpFee: 0.0025,\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 stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\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 stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mwBETH-wBETH LP',\n lpAddress: '0x4cBEa76B4A1c42C356B4c52B0314A98313fFE9df',\n token: bscTokens.mwbeth,\n quoteToken: bscTokens.wbeth,\n stableSwapAddress: '0xfF5Ce4846A3708EA9befa6c3Ab145e63f65DC045',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0002,\n stableLpFee: 0.0001,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BITU LP',\n lpAddress: '0x00020c0235677c9D66CE1E20A8FD4a2526d58CDb',\n token: bscTokens.usdt,\n quoteToken: bscTokens.bitu,\n stableSwapAddress: '0x469F3B14FA289c960d272D4159eD005cFFC8D09D',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\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 stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\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 stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { ChainId } from '@pancakeswap/chains'\nimport { Token } from '@pancakeswap/swap-sdk-core'\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 stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\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 stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\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 stableTotalFee: 0.0015,\n stableLpFee: 0.00075,\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 stableTotalFee: 0.0015,\n stableLpFee: 0.00075,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { ethereumTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'WBTC-mBTC LP',\n lpAddress: '0xaB9dEBAED21270832cCdf54a7461A8E4B133B57A',\n token: ethereumTokens.wbtc,\n quoteToken: ethereumTokens.mBtc,\n stableSwapAddress: '0x95A3832889B2c3455077991b834efA2d4fA3A945',\n infoStableSwapAddress: '0xCcd9fea6bBF1910F4c188A5BBC13D98Ea4F5f9F9',\n stableTotalFee: 0.0002,\n stableLpFee: 0.0001,\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.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Token, Percent, ZERO, ONE, CurrencyAmount } from '@pancakeswap/swap-sdk-core';
2
2
  import invariant from 'tiny-invariant';
3
3
  import { ChainId } from '@pancakeswap/chains';
4
- import { bscTokens, arbitrumTokens, bscTestnetTokens } from '@pancakeswap/tokens';
4
+ import { bscTokens, arbitrumTokens, bscTestnetTokens, ethereumTokens } from '@pancakeswap/tokens';
5
5
 
6
6
  // src/amm/getLPOutputWithoutFee.ts
7
7
  function getD({ amplifier, balances }) {
@@ -143,6 +143,7 @@ var pools = [
143
143
  quoteToken: bscTokens.busd,
144
144
  stableSwapAddress: "0x49079D07ef47449aF808A4f36c2a8dEC975594eC",
145
145
  infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
146
+ stableTotalFee: 4e-4,
146
147
  stableLpFee: 2e-4,
147
148
  stableLpFeeRateOfTotalFee: 0.5
148
149
  },
@@ -153,6 +154,7 @@ var pools = [
153
154
  quoteToken: bscTokens.busd,
154
155
  stableSwapAddress: "0x169F653A54ACD441aB34B73dA9946e2C451787EF",
155
156
  infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
157
+ stableTotalFee: 1e-4,
156
158
  stableLpFee: 5e-5,
157
159
  stableLpFeeRateOfTotalFee: 0.5
158
160
  },
@@ -163,6 +165,7 @@ var pools = [
163
165
  quoteToken: bscTokens.busd,
164
166
  stableSwapAddress: "0xc2F5B9a3d9138ab2B74d581fC11346219eBf43Fe",
165
167
  infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
168
+ stableTotalFee: 1e-4,
166
169
  stableLpFee: 5e-5,
167
170
  stableLpFeeRateOfTotalFee: 0.5
168
171
  },
@@ -173,6 +176,7 @@ var pools = [
173
176
  quoteToken: bscTokens.usdc,
174
177
  stableSwapAddress: "0x3EFebC418efB585248A0D2140cfb87aFcc2C63DD",
175
178
  infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
179
+ stableTotalFee: 1e-4,
176
180
  stableLpFee: 5e-5,
177
181
  stableLpFeeRateOfTotalFee: 0.5
178
182
  },
@@ -183,6 +187,7 @@ var pools = [
183
187
  quoteToken: bscTokens.usdt,
184
188
  stableSwapAddress: "0x6D8fba276ec6F1EDa2344DA48565AdbCA7e4FFa5",
185
189
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
190
+ stableTotalFee: 4e-4,
186
191
  stableLpFee: 2e-4,
187
192
  stableLpFeeRateOfTotalFee: 0.5
188
193
  },
@@ -193,6 +198,7 @@ var pools = [
193
198
  quoteToken: bscTokens.stkbnb,
194
199
  stableSwapAddress: "0x0b03e3d6Ec0c5e5bBf993dED8D947C6fb6eEc18D",
195
200
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
201
+ stableTotalFee: 4e-4,
196
202
  stableLpFee: 2e-4,
197
203
  stableLpFeeRateOfTotalFee: 0.5
198
204
  },
@@ -203,6 +209,7 @@ var pools = [
203
209
  quoteToken: bscTokens.wbnb,
204
210
  stableSwapAddress: "0x9c138bE1D76ee4C5162E0fe9D4eEA5542a23D1bD",
205
211
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
212
+ stableTotalFee: 4e-4,
206
213
  stableLpFee: 2e-4,
207
214
  stableLpFeeRateOfTotalFee: 0.5
208
215
  },
@@ -213,7 +220,8 @@ var pools = [
213
220
  quoteToken: bscTokens.usdt,
214
221
  stableSwapAddress: "0xb1Da7D2C257c5700612BdE35C8d7187dc80d79f1",
215
222
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
216
- stableLpFee: 4e-4,
223
+ stableTotalFee: 4e-4,
224
+ stableLpFee: 2e-4,
217
225
  stableLpFeeRateOfTotalFee: 0.5
218
226
  },
219
227
  {
@@ -223,7 +231,8 @@ var pools = [
223
231
  quoteToken: bscTokens.sdcake,
224
232
  stableSwapAddress: "0xb8204D31379A9B317CD61C833406C972F58ecCbC",
225
233
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
226
- stableLpFee: 1e-3,
234
+ stableTotalFee: 1e-3,
235
+ stableLpFee: 5e-4,
227
236
  stableLpFeeRateOfTotalFee: 0.5
228
237
  },
229
238
  {
@@ -233,7 +242,8 @@ var pools = [
233
242
  quoteToken: bscTokens.mcake,
234
243
  stableSwapAddress: "0xc54d35a8Cfd9f6dAe50945Df27A91C9911A03ab1",
235
244
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
236
- stableLpFee: 5e-3,
245
+ stableTotalFee: 5e-3,
246
+ stableLpFee: 25e-4,
237
247
  stableLpFeeRateOfTotalFee: 0.5
238
248
  },
239
249
  {
@@ -243,7 +253,8 @@ var pools = [
243
253
  quoteToken: bscTokens.pendle,
244
254
  stableSwapAddress: "0xD8CB82059da7215b1a9604E845d49D3e78d0f95A",
245
255
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
246
- stableLpFee: 25e-4,
256
+ stableTotalFee: 25e-4,
257
+ stableLpFee: 125e-5,
247
258
  stableLpFeeRateOfTotalFee: 0.5
248
259
  },
249
260
  {
@@ -253,7 +264,8 @@ var pools = [
253
264
  quoteToken: bscTokens.dlp,
254
265
  stableSwapAddress: "0x25d0eD3b1cE5aF0F3Ac7da4b39B46FC409bF67e2",
255
266
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
256
- stableLpFee: 25e-4,
267
+ stableTotalFee: 25e-4,
268
+ stableLpFee: 125e-5,
257
269
  stableLpFeeRateOfTotalFee: 0.5
258
270
  },
259
271
  {
@@ -263,6 +275,18 @@ var pools = [
263
275
  quoteToken: bscTokens.wbeth,
264
276
  stableSwapAddress: "0xfF5Ce4846A3708EA9befa6c3Ab145e63f65DC045",
265
277
  infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
278
+ stableTotalFee: 2e-4,
279
+ stableLpFee: 1e-4,
280
+ stableLpFeeRateOfTotalFee: 0.5
281
+ },
282
+ {
283
+ lpSymbol: "USDT-BITU LP",
284
+ lpAddress: "0x00020c0235677c9D66CE1E20A8FD4a2526d58CDb",
285
+ token: bscTokens.usdt,
286
+ quoteToken: bscTokens.bitu,
287
+ stableSwapAddress: "0x469F3B14FA289c960d272D4159eD005cFFC8D09D",
288
+ infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
289
+ stableTotalFee: 4e-4,
266
290
  stableLpFee: 2e-4,
267
291
  stableLpFeeRateOfTotalFee: 0.5
268
292
  }
@@ -275,7 +299,8 @@ var pools2 = [
275
299
  quoteToken: arbitrumTokens.mpendle,
276
300
  stableSwapAddress: "0x73ed25e04Aa673ddf7411441098fC5ae19976CE0",
277
301
  infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
278
- stableLpFee: 25e-4,
302
+ stableTotalFee: 25e-4,
303
+ stableLpFee: 125e-5,
279
304
  stableLpFeeRateOfTotalFee: 0.5
280
305
  },
281
306
  {
@@ -285,7 +310,8 @@ var pools2 = [
285
310
  quoteToken: arbitrumTokens.mdlp,
286
311
  stableSwapAddress: "0xd0f0be815a76eFE677c92b07b39a5e972BAf22bD",
287
312
  infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
288
- stableLpFee: 25e-4,
313
+ stableTotalFee: 25e-4,
314
+ stableLpFee: 125e-5,
289
315
  stableLpFeeRateOfTotalFee: 0.5
290
316
  }
291
317
  ];
@@ -308,7 +334,8 @@ var pools3 = [
308
334
  // coins[1]
309
335
  stableSwapAddress: "0xBcd585Ee8B8Ac8de6b0e45dA32Aa31703036b2a1",
310
336
  infoStableSwapAddress: "0x0A548d59D04096Bc01206D58C3D63c478e1e06dB",
311
- stableLpFee: 4e-4,
337
+ stableTotalFee: 4e-4,
338
+ stableLpFee: 2e-4,
312
339
  stableLpFeeRateOfTotalFee: 0.5
313
340
  },
314
341
  {
@@ -320,7 +347,8 @@ var pools3 = [
320
347
  // coins[1]
321
348
  stableSwapAddress: "0xE25A1352477f3DB9B3008B31e9b7a07a18f8A9e6",
322
349
  infoStableSwapAddress: "0x0A548d59D04096Bc01206D58C3D63c478e1e06dB",
323
- stableLpFee: 4e-4,
350
+ stableTotalFee: 4e-4,
351
+ stableLpFee: 2e-4,
324
352
  stableLpFeeRateOfTotalFee: 0.5
325
353
  },
326
354
  {
@@ -332,7 +360,8 @@ var pools3 = [
332
360
  // coins[1]
333
361
  stableSwapAddress: "0xd5E56CD4c8111643a94Ee084df31F44055a1EC9F",
334
362
  infoStableSwapAddress: "0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546",
335
- stableLpFee: 2e-4,
363
+ stableTotalFee: 15e-4,
364
+ stableLpFee: 75e-5,
336
365
  stableLpFeeRateOfTotalFee: 0.5
337
366
  },
338
367
  {
@@ -344,7 +373,21 @@ var pools3 = [
344
373
  // coins[1]
345
374
  stableSwapAddress: "0xc418d68751Cbe0407C8fdd90Cde73cE95b892f39",
346
375
  infoStableSwapAddress: "0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546",
347
- stableLpFee: 2e-4,
376
+ stableTotalFee: 15e-4,
377
+ stableLpFee: 75e-5,
378
+ stableLpFeeRateOfTotalFee: 0.5
379
+ }
380
+ ];
381
+ var pools4 = [
382
+ {
383
+ lpSymbol: "WBTC-mBTC LP",
384
+ lpAddress: "0xaB9dEBAED21270832cCdf54a7461A8E4B133B57A",
385
+ token: ethereumTokens.wbtc,
386
+ quoteToken: ethereumTokens.mBtc,
387
+ stableSwapAddress: "0x95A3832889B2c3455077991b834efA2d4fA3A945",
388
+ infoStableSwapAddress: "0xCcd9fea6bBF1910F4c188A5BBC13D98Ea4F5f9F9",
389
+ stableTotalFee: 2e-4,
390
+ stableLpFee: 1e-4,
348
391
  stableLpFeeRateOfTotalFee: 0.5
349
392
  }
350
393
  ];
@@ -356,11 +399,17 @@ var isStableSwapSupported = (chainId) => {
356
399
  }
357
400
  return STABLE_SUPPORTED_CHAIN_IDS.includes(chainId);
358
401
  };
359
- var STABLE_SUPPORTED_CHAIN_IDS = [ChainId.BSC, ChainId.BSC_TESTNET, ChainId.ARBITRUM_ONE];
402
+ var STABLE_SUPPORTED_CHAIN_IDS = [
403
+ ChainId.BSC,
404
+ ChainId.BSC_TESTNET,
405
+ ChainId.ARBITRUM_ONE,
406
+ ChainId.ETHEREUM
407
+ ];
360
408
  var STABLE_POOL_MAP = {
361
409
  [ChainId.BSC]: pools,
362
410
  [ChainId.BSC_TESTNET]: pools3,
363
- [ChainId.ARBITRUM_ONE]: pools2
411
+ [ChainId.ARBITRUM_ONE]: pools2,
412
+ [ChainId.ETHEREUM]: pools4
364
413
  };
365
414
 
366
415
  // src/constants/pools/index.ts
package/dist/index.js.map CHANGED
@@ -1 +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 lpSymbol: 'mwBETH-wBETH LP',\n lpAddress: '0x4cBEa76B4A1c42C356B4c52B0314A98313fFE9df',\n token: bscTokens.mwbeth,\n quoteToken: bscTokens.wbeth,\n stableSwapAddress: '0xfF5Ce4846A3708EA9befa6c3Ab145e63f65DC045',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\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"]}
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/eth.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'\nimport { pools as ethPools } from './eth'\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 = [\n ChainId.BSC,\n ChainId.BSC_TESTNET,\n ChainId.ARBITRUM_ONE,\n ChainId.ETHEREUM,\n] 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 [ChainId.ETHEREUM]: ethPools,\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 stableTotalFee: 0.0004,\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 stableTotalFee: 0.0001,\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 stableTotalFee: 0.0001,\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 stableTotalFee: 0.0001,\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 stableTotalFee: 0.0004,\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 stableTotalFee: 0.0004,\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 stableTotalFee: 0.0004,\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 stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\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 stableTotalFee: 0.001,\n stableLpFee: 0.0005,\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 stableTotalFee: 0.005,\n stableLpFee: 0.0025,\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 stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\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 stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mwBETH-wBETH LP',\n lpAddress: '0x4cBEa76B4A1c42C356B4c52B0314A98313fFE9df',\n token: bscTokens.mwbeth,\n quoteToken: bscTokens.wbeth,\n stableSwapAddress: '0xfF5Ce4846A3708EA9befa6c3Ab145e63f65DC045',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0002,\n stableLpFee: 0.0001,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BITU LP',\n lpAddress: '0x00020c0235677c9D66CE1E20A8FD4a2526d58CDb',\n token: bscTokens.usdt,\n quoteToken: bscTokens.bitu,\n stableSwapAddress: '0x469F3B14FA289c960d272D4159eD005cFFC8D09D',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\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 stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\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 stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { ChainId } from '@pancakeswap/chains'\nimport { Token } from '@pancakeswap/swap-sdk-core'\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 stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\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 stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\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 stableTotalFee: 0.0015,\n stableLpFee: 0.00075,\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 stableTotalFee: 0.0015,\n stableLpFee: 0.00075,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { ethereumTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'WBTC-mBTC LP',\n lpAddress: '0xaB9dEBAED21270832cCdf54a7461A8E4B133B57A',\n token: ethereumTokens.wbtc,\n quoteToken: ethereumTokens.mBtc,\n stableSwapAddress: '0x95A3832889B2c3455077991b834efA2d4fA3A945',\n infoStableSwapAddress: '0xCcd9fea6bBF1910F4c188A5BBC13D98Ea4F5f9F9',\n stableTotalFee: 0.0002,\n stableLpFee: 0.0001,\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 CHANGED
@@ -9,6 +9,7 @@ export interface BasePool {
9
9
  export interface StableSwapPool extends BasePool {
10
10
  stableSwapAddress: Address;
11
11
  infoStableSwapAddress: Address;
12
+ stableTotalFee: number;
12
13
  stableLpFee: number;
13
14
  stableLpFeeRateOfTotalFee: number;
14
15
  }
@@ -1 +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"}
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,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,yBAAyB,EAAE,MAAM,CAAA;CAClC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pancakeswap/stable-swap-sdk",
3
- "version": "1.0.15",
3
+ "version": "1.1.0",
4
4
  "description": "SDK for pancakeswap stable swap",
5
5
  "repository": {
6
6
  "type": "git",
@@ -19,10 +19,11 @@
19
19
  "tiny-invariant": "^1.3.0",
20
20
  "@pancakeswap/chains": "0.4.6",
21
21
  "@pancakeswap/swap-sdk-core": "1.2.0",
22
- "@pancakeswap/tokens": "0.6.23"
22
+ "@pancakeswap/tokens": "0.6.25"
23
23
  },
24
24
  "devDependencies": {
25
25
  "tsup": "^6.7.0",
26
+ "viem": "^2.20.0",
26
27
  "@pancakeswap/token-lists": "0.0.12",
27
28
  "@pancakeswap/tsconfig": "0.0.0",
28
29
  "@pancakeswap/utils": "6.0.9"