@pancakeswap/stable-swap-sdk 1.1.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ export declare const STABLE_SWAP_API = "https://configs.pancakeswap.com/api/data/cached/stableswaps";
2
+ //# sourceMappingURL=endpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint.d.ts","sourceRoot":"","sources":["../../src/config/endpoint.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,gEAAgE,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { ChainId } from '@pancakeswap/chains';
2
- import { isStableSwapSupported, STABLE_SUPPORTED_CHAIN_IDS } from './pools';
3
2
  import { StableSwapPool } from '../../types';
4
- export declare function getStableSwapPools(chainId: ChainId): StableSwapPool[];
3
+ import { isStableSwapSupported, STABLE_SUPPORTED_CHAIN_IDS } from './pools';
4
+ export declare const fetchStableSwapData: (chainId: ChainId) => Promise<StableSwapPool[]>;
5
+ export declare function getStableSwapPools(chainId: ChainId): Promise<StableSwapPool[]>;
5
6
  export { isStableSwapSupported, STABLE_SUPPORTED_CHAIN_IDS };
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C,OAAO,EAAE,qBAAqB,EAAmB,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAC5F,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,EAAE,CAMrE;AAED,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAK3E,eAAO,MAAM,mBAAmB,YAAmB,OAAO,KAAG,QAAQ,cAAc,EAAE,CAoDpF,CAAA;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAQpF;AAED,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,CAAA"}
@@ -6,10 +6,4 @@ export type StableSwapPoolMap<TChainId extends number> = {
6
6
  export declare const isStableSwapSupported: (chainId: number | undefined) => chainId is ChainId.ETHEREUM | ChainId.BSC | ChainId.BSC_TESTNET | ChainId.ARBITRUM_ONE;
7
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
- export declare const STABLE_POOL_MAP: {
10
- 56: StableSwapPool[];
11
- 97: StableSwapPool[];
12
- 42161: StableSwapPool[];
13
- 1: StableSwapPool[];
14
- };
15
9
  //# 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;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"}
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;AAE5C,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"}
package/dist/index.cjs CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  var swapSdkCore = require('@pancakeswap/swap-sdk-core');
4
4
  var invariant = require('tiny-invariant');
5
+ var sdk = require('@pancakeswap/sdk');
5
6
  var chains = require('@pancakeswap/chains');
6
- var tokens = require('@pancakeswap/tokens');
7
7
 
8
8
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
9
 
@@ -141,286 +141,9 @@ function getLPOutput({
141
141
  function getLPOutputWithoutFee(params) {
142
142
  return getLPOutput({ ...params, fee: new swapSdkCore.Percent(0) });
143
143
  }
144
- var pools = [
145
- {
146
- lpSymbol: "lisUSD-BUSD LP",
147
- lpAddress: "0xB6040A9F294477dDAdf5543a24E5463B8F2423Ae",
148
- token: tokens.bscTokens.hay,
149
- quoteToken: tokens.bscTokens.busd,
150
- stableSwapAddress: "0x49079D07ef47449aF808A4f36c2a8dEC975594eC",
151
- infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
152
- stableTotalFee: 4e-4,
153
- stableLpFee: 2e-4,
154
- stableLpFeeRateOfTotalFee: 0.5
155
- },
156
- {
157
- lpSymbol: "USDT-BUSD LP",
158
- lpAddress: "0x36842F8fb99D55477C0Da638aF5ceb6bBf86aA98",
159
- token: tokens.bscTokens.usdt,
160
- quoteToken: tokens.bscTokens.busd,
161
- stableSwapAddress: "0x169F653A54ACD441aB34B73dA9946e2C451787EF",
162
- infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
163
- stableTotalFee: 1e-4,
164
- stableLpFee: 5e-5,
165
- stableLpFeeRateOfTotalFee: 0.5
166
- },
167
- {
168
- lpSymbol: "USDC-BUSD LP",
169
- lpAddress: "0x1A77C359D0019cD8F4d36b7CDf5a88043D801072",
170
- token: tokens.bscTokens.usdc,
171
- quoteToken: tokens.bscTokens.busd,
172
- stableSwapAddress: "0xc2F5B9a3d9138ab2B74d581fC11346219eBf43Fe",
173
- infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
174
- stableTotalFee: 1e-4,
175
- stableLpFee: 5e-5,
176
- stableLpFeeRateOfTotalFee: 0.5
177
- },
178
- {
179
- lpSymbol: "USDT-USDC LP",
180
- lpAddress: "0xee1bcc9F1692E81A281b3a302a4b67890BA4be76",
181
- token: tokens.bscTokens.usdt,
182
- quoteToken: tokens.bscTokens.usdc,
183
- stableSwapAddress: "0x3EFebC418efB585248A0D2140cfb87aFcc2C63DD",
184
- infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
185
- stableTotalFee: 1e-4,
186
- stableLpFee: 5e-5,
187
- stableLpFeeRateOfTotalFee: 0.5
188
- },
189
- {
190
- lpSymbol: "axlUSDC-USDT LP",
191
- lpAddress: "0x1c7e5a3A72b6D94DE5Ec20812E3e68713978a584",
192
- token: tokens.bscTokens.axlusdc,
193
- quoteToken: tokens.bscTokens.usdt,
194
- stableSwapAddress: "0x6D8fba276ec6F1EDa2344DA48565AdbCA7e4FFa5",
195
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
196
- stableTotalFee: 4e-4,
197
- stableLpFee: 2e-4,
198
- stableLpFeeRateOfTotalFee: 0.5
199
- },
200
- {
201
- lpSymbol: "WBNB-stkBNB LP",
202
- lpAddress: "0x9976f5c8BEfDee650226d5571d5F5551e8722b75",
203
- token: tokens.bscTokens.wbnb,
204
- quoteToken: tokens.bscTokens.stkbnb,
205
- stableSwapAddress: "0x0b03e3d6Ec0c5e5bBf993dED8D947C6fb6eEc18D",
206
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
207
- stableTotalFee: 4e-4,
208
- stableLpFee: 2e-4,
209
- stableLpFeeRateOfTotalFee: 0.5
210
- },
211
- {
212
- lpSymbol: "BNBx-BNB LP",
213
- lpAddress: "0x92357Ab9003CA881E08e32CDAE59B10B3161b05C",
214
- token: tokens.bscTokens.bnbx,
215
- quoteToken: tokens.bscTokens.wbnb,
216
- stableSwapAddress: "0x9c138bE1D76ee4C5162E0fe9D4eEA5542a23D1bD",
217
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
218
- stableTotalFee: 4e-4,
219
- stableLpFee: 2e-4,
220
- stableLpFeeRateOfTotalFee: 0.5
221
- },
222
- {
223
- lpSymbol: "lisUSD-USDT LP",
224
- lpAddress: "0xB2Aa63f363196caba3154D4187949283F085a488",
225
- token: tokens.bscTokens.hay,
226
- quoteToken: tokens.bscTokens.usdt,
227
- stableSwapAddress: "0xb1Da7D2C257c5700612BdE35C8d7187dc80d79f1",
228
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
229
- stableTotalFee: 4e-4,
230
- stableLpFee: 2e-4,
231
- stableLpFeeRateOfTotalFee: 0.5
232
- },
233
- {
234
- lpSymbol: "CAKE-sdCAKE LP",
235
- lpAddress: "0xB1D54d76E2cB9425Ec9c018538cc531440b55dbB",
236
- token: tokens.bscTokens.cake,
237
- quoteToken: tokens.bscTokens.sdcake,
238
- stableSwapAddress: "0xb8204D31379A9B317CD61C833406C972F58ecCbC",
239
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
240
- stableTotalFee: 1e-3,
241
- stableLpFee: 5e-4,
242
- stableLpFeeRateOfTotalFee: 0.5
243
- },
244
- {
245
- lpSymbol: "CAKE-mCAKE LP",
246
- lpAddress: "0xb9dC6396AcFFD24E0f69Dfd3231fDaeB31514D02",
247
- token: tokens.bscTokens.cake,
248
- quoteToken: tokens.bscTokens.mcake,
249
- stableSwapAddress: "0xc54d35a8Cfd9f6dAe50945Df27A91C9911A03ab1",
250
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
251
- stableTotalFee: 5e-3,
252
- stableLpFee: 25e-4,
253
- stableLpFeeRateOfTotalFee: 0.5
254
- },
255
- {
256
- lpSymbol: "mPENDLE-PENDLE LP",
257
- lpAddress: "0x183F325b33d190597D80d1B46D865d0250fD9BF2",
258
- token: tokens.bscTokens.mpendle,
259
- quoteToken: tokens.bscTokens.pendle,
260
- stableSwapAddress: "0xD8CB82059da7215b1a9604E845d49D3e78d0f95A",
261
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
262
- stableTotalFee: 25e-4,
263
- stableLpFee: 125e-5,
264
- stableLpFeeRateOfTotalFee: 0.5
265
- },
266
- {
267
- lpSymbol: "mDLP-DLP LP",
268
- lpAddress: "0xA2915ae3bc8C6C03f59496B6Dd26aa6a4335b788",
269
- token: tokens.bscTokens.mdlp,
270
- quoteToken: tokens.bscTokens.dlp,
271
- stableSwapAddress: "0x25d0eD3b1cE5aF0F3Ac7da4b39B46FC409bF67e2",
272
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
273
- stableTotalFee: 25e-4,
274
- stableLpFee: 125e-5,
275
- stableLpFeeRateOfTotalFee: 0.5
276
- },
277
- {
278
- lpSymbol: "mwBETH-wBETH LP",
279
- lpAddress: "0x4cBEa76B4A1c42C356B4c52B0314A98313fFE9df",
280
- token: tokens.bscTokens.mwbeth,
281
- quoteToken: tokens.bscTokens.wbeth,
282
- stableSwapAddress: "0xfF5Ce4846A3708EA9befa6c3Ab145e63f65DC045",
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,
296
- stableLpFee: 2e-4,
297
- stableLpFeeRateOfTotalFee: 0.5
298
- },
299
- {
300
- lpSymbol: "mBTC-BTCB LP",
301
- lpAddress: "0xaA4DABbF68AC17eF6dABFd11a7035b913C5F2de3",
302
- token: tokens.bscTokens.mBtc,
303
- quoteToken: tokens.bscTokens.btcb,
304
- stableSwapAddress: "0xDb8CfACE4588E246642329a8D8Bd4a10A459c3f7",
305
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
306
- stableTotalFee: 2e-4,
307
- stableLpFee: 1e-4,
308
- stableLpFeeRateOfTotalFee: 0.5
309
- }
310
- ];
311
- var pools2 = [
312
- {
313
- lpSymbol: "PENDLE-mPENDLE LP",
314
- lpAddress: "0x1A2329546f11e4fE55b853D98Bba2c4678E3105A",
315
- token: tokens.arbitrumTokens.pendle,
316
- quoteToken: tokens.arbitrumTokens.mpendle,
317
- stableSwapAddress: "0x73ed25e04Aa673ddf7411441098fC5ae19976CE0",
318
- infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
319
- stableTotalFee: 25e-4,
320
- stableLpFee: 125e-5,
321
- stableLpFeeRateOfTotalFee: 0.5
322
- },
323
- {
324
- lpSymbol: "DLP-mDLP LP",
325
- lpAddress: "0x0db5e247ab73FBaE16d9301f2977f974EC0AA336",
326
- token: tokens.arbitrumTokens.dlp,
327
- quoteToken: tokens.arbitrumTokens.mdlp,
328
- stableSwapAddress: "0xd0f0be815a76eFE677c92b07b39a5e972BAf22bD",
329
- infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
330
- stableTotalFee: 25e-4,
331
- stableLpFee: 125e-5,
332
- stableLpFeeRateOfTotalFee: 0.5
333
- },
334
- {
335
- lpSymbol: "mBTC-WBTC LP",
336
- lpAddress: "0x893c6d8b83726df868C1426f71c46Ba479ba3cC8",
337
- token: tokens.arbitrumTokens.mBtc,
338
- quoteToken: tokens.arbitrumTokens.wbtc,
339
- stableSwapAddress: "0xE80bD6fE6CB209E5546153AF19F151a3e651FA57",
340
- infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
341
- stableTotalFee: 2e-4,
342
- stableLpFee: 1e-4,
343
- stableLpFeeRateOfTotalFee: 0.5
344
- }
345
- ];
346
- var mockUSDT = new swapSdkCore.Token(chains.ChainId.BSC_TESTNET, "0x0fB5D7c73FA349A90392f873a4FA1eCf6a3d0a96", 18, "USDT", "MOCK Token");
347
- var pools3 = [
348
- // {
349
- // lpSymbol: 'USDC-BUSD LP',
350
- // lpAddress: '0xd1742b5eC6798cEB8C791e0ebbEf606A4946f67E',
351
- // token: bscTestnetTokens.usdc, // coins[0]
352
- // quoteToken: bscTestnetTokens.busd, // coins[1]
353
- // stableSwapAddress: '0x1288026D2c5a76A5bfb0730F615131A448f4Ad06',
354
- // infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',
355
- // },
356
- {
357
- lpSymbol: "USDT-WBNB LP",
358
- lpAddress: "0x4c091Dc4418Bd3353A87488535528FD86954da2c",
359
- token: mockUSDT,
360
- // coins[0]
361
- quoteToken: tokens.bscTestnetTokens.wbnb,
362
- // coins[1]
363
- stableSwapAddress: "0xBcd585Ee8B8Ac8de6b0e45dA32Aa31703036b2a1",
364
- infoStableSwapAddress: "0x0A548d59D04096Bc01206D58C3D63c478e1e06dB",
365
- stableTotalFee: 4e-4,
366
- stableLpFee: 2e-4,
367
- stableLpFeeRateOfTotalFee: 0.5
368
- },
369
- {
370
- lpSymbol: "USDT-BUSD LP",
371
- lpAddress: "0x746a7063101E2D3305D1556888ee08193f2B9a07",
372
- token: mockUSDT,
373
- // coins[0]
374
- quoteToken: tokens.bscTestnetTokens.busd,
375
- // coins[1]
376
- stableSwapAddress: "0xE25A1352477f3DB9B3008B31e9b7a07a18f8A9e6",
377
- infoStableSwapAddress: "0x0A548d59D04096Bc01206D58C3D63c478e1e06dB",
378
- stableTotalFee: 4e-4,
379
- stableLpFee: 2e-4,
380
- stableLpFeeRateOfTotalFee: 0.5
381
- },
382
- {
383
- lpSymbol: "BUSD-USDC LP",
384
- lpAddress: "0x7CA885d338462790DD1B5416ebe6bec75ee045a1",
385
- token: tokens.bscTestnetTokens.mockBusd,
386
- // coins[0]
387
- quoteToken: tokens.bscTestnetTokens.usdc,
388
- // coins[1]
389
- stableSwapAddress: "0xd5E56CD4c8111643a94Ee084df31F44055a1EC9F",
390
- infoStableSwapAddress: "0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546",
391
- stableTotalFee: 15e-4,
392
- stableLpFee: 75e-5,
393
- stableLpFeeRateOfTotalFee: 0.5
394
- },
395
- {
396
- lpSymbol: "USDT-BUSD LP",
397
- lpAddress: "0x9Fa2Ef2C3dF6F903F4b73047311e861C51a11B60",
398
- token: tokens.bscTestnetTokens.usdt,
399
- // coins[0]
400
- quoteToken: tokens.bscTestnetTokens.mockBusd,
401
- // coins[1]
402
- stableSwapAddress: "0xc418d68751Cbe0407C8fdd90Cde73cE95b892f39",
403
- infoStableSwapAddress: "0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546",
404
- stableTotalFee: 15e-4,
405
- stableLpFee: 75e-5,
406
- stableLpFeeRateOfTotalFee: 0.5
407
- }
408
- ];
409
- var pools4 = [
410
- {
411
- lpSymbol: "WBTC-mBTC LP",
412
- lpAddress: "0xaB9dEBAED21270832cCdf54a7461A8E4B133B57A",
413
- token: tokens.ethereumTokens.wbtc,
414
- quoteToken: tokens.ethereumTokens.mBtc,
415
- stableSwapAddress: "0x95A3832889B2c3455077991b834efA2d4fA3A945",
416
- infoStableSwapAddress: "0xCcd9fea6bBF1910F4c188A5BBC13D98Ea4F5f9F9",
417
- stableTotalFee: 2e-4,
418
- stableLpFee: 1e-4,
419
- stableLpFeeRateOfTotalFee: 0.5
420
- }
421
- ];
422
144
 
423
- // src/constants/pools/pools.ts
145
+ // src/config/endpoint.ts
146
+ var STABLE_SWAP_API = "https://configs.pancakeswap.com/api/data/cached/stableswaps";
424
147
  var isStableSwapSupported = (chainId) => {
425
148
  if (!chainId) {
426
149
  return false;
@@ -433,19 +156,55 @@ var STABLE_SUPPORTED_CHAIN_IDS = [
433
156
  chains.ChainId.ARBITRUM_ONE,
434
157
  chains.ChainId.ETHEREUM
435
158
  ];
436
- var STABLE_POOL_MAP = {
437
- [chains.ChainId.BSC]: pools,
438
- [chains.ChainId.BSC_TESTNET]: pools3,
439
- [chains.ChainId.ARBITRUM_ONE]: pools2,
440
- [chains.ChainId.ETHEREUM]: pools4
441
- };
442
159
 
443
160
  // src/constants/pools/index.ts
444
- function getStableSwapPools(chainId) {
161
+ var stableSwapCache = {};
162
+ var inProgressFetches = {};
163
+ var fetchStableSwapData = async (chainId) => {
164
+ const cacheKey = `${chainId}-all`;
165
+ if (stableSwapCache[cacheKey]) {
166
+ return stableSwapCache[cacheKey];
167
+ }
168
+ if (inProgressFetches[cacheKey]) {
169
+ return inProgressFetches[cacheKey];
170
+ }
171
+ inProgressFetches[cacheKey] = fetch(`${STABLE_SWAP_API}?chainId=${chainId}`, {
172
+ signal: AbortSignal.timeout(3e3)
173
+ }).then((response) => response.json()).then((result) => {
174
+ const newData = result.map((p) => ({
175
+ ...p,
176
+ token: new sdk.ERC20Token(
177
+ p.token.chainId,
178
+ p.token.address,
179
+ p.token.decimals,
180
+ p.token.symbol,
181
+ p.token.name,
182
+ p.token.projectLink
183
+ ),
184
+ quoteToken: new sdk.ERC20Token(
185
+ p.quoteToken.chainId,
186
+ p.quoteToken.address,
187
+ p.quoteToken.decimals,
188
+ p.quoteToken.symbol,
189
+ p.quoteToken.name,
190
+ p.quoteToken.projectLink
191
+ )
192
+ }));
193
+ stableSwapCache[cacheKey] = newData;
194
+ return newData;
195
+ }).catch(() => {
196
+ return [];
197
+ }).finally(() => {
198
+ delete inProgressFetches[cacheKey];
199
+ });
200
+ return inProgressFetches[cacheKey];
201
+ };
202
+ async function getStableSwapPools(chainId) {
445
203
  if (!isStableSwapSupported(chainId)) {
446
204
  return [];
447
205
  }
448
- return STABLE_POOL_MAP[chainId] || [];
206
+ const stableSwapData = await fetchStableSwapData(chainId);
207
+ return stableSwapData;
449
208
  }
450
209
 
451
210
  // src/constants/index.ts
@@ -534,6 +293,7 @@ var getQuoteExactOut = createQuoteGetter(false);
534
293
 
535
294
  exports.ONE_HUNDRED_PERCENT = ONE_HUNDRED_PERCENT;
536
295
  exports.STABLE_SUPPORTED_CHAIN_IDS = STABLE_SUPPORTED_CHAIN_IDS;
296
+ exports.fetchStableSwapData = fetchStableSwapData;
537
297
  exports.getD = getD;
538
298
  exports.getLPOutput = getLPOutput;
539
299
  exports.getLPOutputWithoutFee = getLPOutputWithoutFee;
@@ -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/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 lpSymbol: 'mBTC-BTCB LP',\n lpAddress: '0xaA4DABbF68AC17eF6dABFd11a7035b913C5F2de3',\n token: bscTokens.mBtc,\n quoteToken: bscTokens.btcb,\n stableSwapAddress: '0xDb8CfACE4588E246642329a8D8Bd4a10A459c3f7',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0002,\n stableLpFee: 0.0001,\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 lpSymbol: 'mBTC-WBTC LP',\n lpAddress: '0x893c6d8b83726df868C1426f71c46Ba479ba3cC8',\n token: arbitrumTokens.mBtc,\n quoteToken: arbitrumTokens.wbtc,\n stableSwapAddress: '0xE80bD6fE6CB209E5546153AF19F151a3e651FA57',\n infoStableSwapAddress: '0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0',\n stableTotalFee: 0.0002,\n stableLpFee: 0.0001,\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"]}
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/index.ts","../src/config/endpoint.ts","../src/constants/pools/pools.ts"],"names":["Percent","CurrencyAmount","ZERO","invariant","b","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'\nimport { ERC20Token } from '@pancakeswap/sdk'\nimport { STABLE_SWAP_API } from '../../config/endpoint'\nimport { StableSwapPool } from '../../types'\nimport { isStableSwapSupported, STABLE_SUPPORTED_CHAIN_IDS } from './pools'\n\nconst stableSwapCache: Record<string, StableSwapPool[]> = {}\nconst inProgressFetches: Record<string, Promise<StableSwapPool[]> | undefined> = {}\n\nexport const fetchStableSwapData = async (chainId: ChainId): Promise<StableSwapPool[]> => {\n const cacheKey = `${chainId}-all`\n\n // Return cached data if it exists\n if (stableSwapCache[cacheKey]) {\n return stableSwapCache[cacheKey]\n }\n\n // Return in-progress fetch if available\n if (inProgressFetches[cacheKey]) {\n return inProgressFetches[cacheKey]!\n }\n\n // Start a new fetch, assign it to the in-progress tracker\n inProgressFetches[cacheKey] = fetch(`${STABLE_SWAP_API}?chainId=${chainId}`, {\n signal: AbortSignal.timeout(3000),\n })\n .then((response) => response.json())\n .then((result) => {\n const newData: StableSwapPool[] = result.map((p: any) => ({\n ...p,\n token: new ERC20Token(\n p.token.chainId,\n p.token.address,\n p.token.decimals,\n p.token.symbol,\n p.token.name,\n p.token.projectLink,\n ),\n quoteToken: new ERC20Token(\n p.quoteToken.chainId,\n p.quoteToken.address,\n p.quoteToken.decimals,\n p.quoteToken.symbol,\n p.quoteToken.name,\n p.quoteToken.projectLink,\n ),\n }))\n\n // Cache the result before returning it\n stableSwapCache[cacheKey] = newData\n return newData\n })\n .catch(() => {\n return []\n })\n .finally(() => {\n // Clean up in-progress fetch tracker\n delete inProgressFetches[cacheKey]\n })\n\n return inProgressFetches[cacheKey]!\n}\n\nexport async function getStableSwapPools(chainId: ChainId): Promise<StableSwapPool[]> {\n // Stable swap is only supported on BSC chain & BSC testnet\n if (!isStableSwapSupported(chainId)) {\n return []\n }\n\n const stableSwapData = await fetchStableSwapData(chainId)\n return stableSwapData\n}\n\nexport { isStableSwapSupported, STABLE_SUPPORTED_CHAIN_IDS }\n","export const STABLE_SWAP_API = 'https://configs.pancakeswap.com/api/data/cached/stableswaps'\n","import { ChainId } from '@pancakeswap/chains'\n\nimport { StableSwapPool } from '../../types'\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"]}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import { Token, Percent, ZERO, ONE, CurrencyAmount } from '@pancakeswap/swap-sdk-core';
1
+ import { Percent, ZERO, ONE, CurrencyAmount } from '@pancakeswap/swap-sdk-core';
2
2
  import invariant from 'tiny-invariant';
3
+ import { ERC20Token } from '@pancakeswap/sdk';
3
4
  import { ChainId } from '@pancakeswap/chains';
4
- import { bscTokens, arbitrumTokens, bscTestnetTokens, ethereumTokens } from '@pancakeswap/tokens';
5
5
 
6
6
  // src/amm/getLPOutputWithoutFee.ts
7
7
  function getD({ amplifier, balances }) {
@@ -135,286 +135,9 @@ function getLPOutput({
135
135
  function getLPOutputWithoutFee(params) {
136
136
  return getLPOutput({ ...params, fee: new Percent(0) });
137
137
  }
138
- var pools = [
139
- {
140
- lpSymbol: "lisUSD-BUSD LP",
141
- lpAddress: "0xB6040A9F294477dDAdf5543a24E5463B8F2423Ae",
142
- token: bscTokens.hay,
143
- quoteToken: bscTokens.busd,
144
- stableSwapAddress: "0x49079D07ef47449aF808A4f36c2a8dEC975594eC",
145
- infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
146
- stableTotalFee: 4e-4,
147
- stableLpFee: 2e-4,
148
- stableLpFeeRateOfTotalFee: 0.5
149
- },
150
- {
151
- lpSymbol: "USDT-BUSD LP",
152
- lpAddress: "0x36842F8fb99D55477C0Da638aF5ceb6bBf86aA98",
153
- token: bscTokens.usdt,
154
- quoteToken: bscTokens.busd,
155
- stableSwapAddress: "0x169F653A54ACD441aB34B73dA9946e2C451787EF",
156
- infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
157
- stableTotalFee: 1e-4,
158
- stableLpFee: 5e-5,
159
- stableLpFeeRateOfTotalFee: 0.5
160
- },
161
- {
162
- lpSymbol: "USDC-BUSD LP",
163
- lpAddress: "0x1A77C359D0019cD8F4d36b7CDf5a88043D801072",
164
- token: bscTokens.usdc,
165
- quoteToken: bscTokens.busd,
166
- stableSwapAddress: "0xc2F5B9a3d9138ab2B74d581fC11346219eBf43Fe",
167
- infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
168
- stableTotalFee: 1e-4,
169
- stableLpFee: 5e-5,
170
- stableLpFeeRateOfTotalFee: 0.5
171
- },
172
- {
173
- lpSymbol: "USDT-USDC LP",
174
- lpAddress: "0xee1bcc9F1692E81A281b3a302a4b67890BA4be76",
175
- token: bscTokens.usdt,
176
- quoteToken: bscTokens.usdc,
177
- stableSwapAddress: "0x3EFebC418efB585248A0D2140cfb87aFcc2C63DD",
178
- infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
179
- stableTotalFee: 1e-4,
180
- stableLpFee: 5e-5,
181
- stableLpFeeRateOfTotalFee: 0.5
182
- },
183
- {
184
- lpSymbol: "axlUSDC-USDT LP",
185
- lpAddress: "0x1c7e5a3A72b6D94DE5Ec20812E3e68713978a584",
186
- token: bscTokens.axlusdc,
187
- quoteToken: bscTokens.usdt,
188
- stableSwapAddress: "0x6D8fba276ec6F1EDa2344DA48565AdbCA7e4FFa5",
189
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
190
- stableTotalFee: 4e-4,
191
- stableLpFee: 2e-4,
192
- stableLpFeeRateOfTotalFee: 0.5
193
- },
194
- {
195
- lpSymbol: "WBNB-stkBNB LP",
196
- lpAddress: "0x9976f5c8BEfDee650226d5571d5F5551e8722b75",
197
- token: bscTokens.wbnb,
198
- quoteToken: bscTokens.stkbnb,
199
- stableSwapAddress: "0x0b03e3d6Ec0c5e5bBf993dED8D947C6fb6eEc18D",
200
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
201
- stableTotalFee: 4e-4,
202
- stableLpFee: 2e-4,
203
- stableLpFeeRateOfTotalFee: 0.5
204
- },
205
- {
206
- lpSymbol: "BNBx-BNB LP",
207
- lpAddress: "0x92357Ab9003CA881E08e32CDAE59B10B3161b05C",
208
- token: bscTokens.bnbx,
209
- quoteToken: bscTokens.wbnb,
210
- stableSwapAddress: "0x9c138bE1D76ee4C5162E0fe9D4eEA5542a23D1bD",
211
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
212
- stableTotalFee: 4e-4,
213
- stableLpFee: 2e-4,
214
- stableLpFeeRateOfTotalFee: 0.5
215
- },
216
- {
217
- lpSymbol: "lisUSD-USDT LP",
218
- lpAddress: "0xB2Aa63f363196caba3154D4187949283F085a488",
219
- token: bscTokens.hay,
220
- quoteToken: bscTokens.usdt,
221
- stableSwapAddress: "0xb1Da7D2C257c5700612BdE35C8d7187dc80d79f1",
222
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
223
- stableTotalFee: 4e-4,
224
- stableLpFee: 2e-4,
225
- stableLpFeeRateOfTotalFee: 0.5
226
- },
227
- {
228
- lpSymbol: "CAKE-sdCAKE LP",
229
- lpAddress: "0xB1D54d76E2cB9425Ec9c018538cc531440b55dbB",
230
- token: bscTokens.cake,
231
- quoteToken: bscTokens.sdcake,
232
- stableSwapAddress: "0xb8204D31379A9B317CD61C833406C972F58ecCbC",
233
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
234
- stableTotalFee: 1e-3,
235
- stableLpFee: 5e-4,
236
- stableLpFeeRateOfTotalFee: 0.5
237
- },
238
- {
239
- lpSymbol: "CAKE-mCAKE LP",
240
- lpAddress: "0xb9dC6396AcFFD24E0f69Dfd3231fDaeB31514D02",
241
- token: bscTokens.cake,
242
- quoteToken: bscTokens.mcake,
243
- stableSwapAddress: "0xc54d35a8Cfd9f6dAe50945Df27A91C9911A03ab1",
244
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
245
- stableTotalFee: 5e-3,
246
- stableLpFee: 25e-4,
247
- stableLpFeeRateOfTotalFee: 0.5
248
- },
249
- {
250
- lpSymbol: "mPENDLE-PENDLE LP",
251
- lpAddress: "0x183F325b33d190597D80d1B46D865d0250fD9BF2",
252
- token: bscTokens.mpendle,
253
- quoteToken: bscTokens.pendle,
254
- stableSwapAddress: "0xD8CB82059da7215b1a9604E845d49D3e78d0f95A",
255
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
256
- stableTotalFee: 25e-4,
257
- stableLpFee: 125e-5,
258
- stableLpFeeRateOfTotalFee: 0.5
259
- },
260
- {
261
- lpSymbol: "mDLP-DLP LP",
262
- lpAddress: "0xA2915ae3bc8C6C03f59496B6Dd26aa6a4335b788",
263
- token: bscTokens.mdlp,
264
- quoteToken: bscTokens.dlp,
265
- stableSwapAddress: "0x25d0eD3b1cE5aF0F3Ac7da4b39B46FC409bF67e2",
266
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
267
- stableTotalFee: 25e-4,
268
- stableLpFee: 125e-5,
269
- stableLpFeeRateOfTotalFee: 0.5
270
- },
271
- {
272
- lpSymbol: "mwBETH-wBETH LP",
273
- lpAddress: "0x4cBEa76B4A1c42C356B4c52B0314A98313fFE9df",
274
- token: bscTokens.mwbeth,
275
- quoteToken: bscTokens.wbeth,
276
- stableSwapAddress: "0xfF5Ce4846A3708EA9befa6c3Ab145e63f65DC045",
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,
290
- stableLpFee: 2e-4,
291
- stableLpFeeRateOfTotalFee: 0.5
292
- },
293
- {
294
- lpSymbol: "mBTC-BTCB LP",
295
- lpAddress: "0xaA4DABbF68AC17eF6dABFd11a7035b913C5F2de3",
296
- token: bscTokens.mBtc,
297
- quoteToken: bscTokens.btcb,
298
- stableSwapAddress: "0xDb8CfACE4588E246642329a8D8Bd4a10A459c3f7",
299
- infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
300
- stableTotalFee: 2e-4,
301
- stableLpFee: 1e-4,
302
- stableLpFeeRateOfTotalFee: 0.5
303
- }
304
- ];
305
- var pools2 = [
306
- {
307
- lpSymbol: "PENDLE-mPENDLE LP",
308
- lpAddress: "0x1A2329546f11e4fE55b853D98Bba2c4678E3105A",
309
- token: arbitrumTokens.pendle,
310
- quoteToken: arbitrumTokens.mpendle,
311
- stableSwapAddress: "0x73ed25e04Aa673ddf7411441098fC5ae19976CE0",
312
- infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
313
- stableTotalFee: 25e-4,
314
- stableLpFee: 125e-5,
315
- stableLpFeeRateOfTotalFee: 0.5
316
- },
317
- {
318
- lpSymbol: "DLP-mDLP LP",
319
- lpAddress: "0x0db5e247ab73FBaE16d9301f2977f974EC0AA336",
320
- token: arbitrumTokens.dlp,
321
- quoteToken: arbitrumTokens.mdlp,
322
- stableSwapAddress: "0xd0f0be815a76eFE677c92b07b39a5e972BAf22bD",
323
- infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
324
- stableTotalFee: 25e-4,
325
- stableLpFee: 125e-5,
326
- stableLpFeeRateOfTotalFee: 0.5
327
- },
328
- {
329
- lpSymbol: "mBTC-WBTC LP",
330
- lpAddress: "0x893c6d8b83726df868C1426f71c46Ba479ba3cC8",
331
- token: arbitrumTokens.mBtc,
332
- quoteToken: arbitrumTokens.wbtc,
333
- stableSwapAddress: "0xE80bD6fE6CB209E5546153AF19F151a3e651FA57",
334
- infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
335
- stableTotalFee: 2e-4,
336
- stableLpFee: 1e-4,
337
- stableLpFeeRateOfTotalFee: 0.5
338
- }
339
- ];
340
- var mockUSDT = new Token(ChainId.BSC_TESTNET, "0x0fB5D7c73FA349A90392f873a4FA1eCf6a3d0a96", 18, "USDT", "MOCK Token");
341
- var pools3 = [
342
- // {
343
- // lpSymbol: 'USDC-BUSD LP',
344
- // lpAddress: '0xd1742b5eC6798cEB8C791e0ebbEf606A4946f67E',
345
- // token: bscTestnetTokens.usdc, // coins[0]
346
- // quoteToken: bscTestnetTokens.busd, // coins[1]
347
- // stableSwapAddress: '0x1288026D2c5a76A5bfb0730F615131A448f4Ad06',
348
- // infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',
349
- // },
350
- {
351
- lpSymbol: "USDT-WBNB LP",
352
- lpAddress: "0x4c091Dc4418Bd3353A87488535528FD86954da2c",
353
- token: mockUSDT,
354
- // coins[0]
355
- quoteToken: bscTestnetTokens.wbnb,
356
- // coins[1]
357
- stableSwapAddress: "0xBcd585Ee8B8Ac8de6b0e45dA32Aa31703036b2a1",
358
- infoStableSwapAddress: "0x0A548d59D04096Bc01206D58C3D63c478e1e06dB",
359
- stableTotalFee: 4e-4,
360
- stableLpFee: 2e-4,
361
- stableLpFeeRateOfTotalFee: 0.5
362
- },
363
- {
364
- lpSymbol: "USDT-BUSD LP",
365
- lpAddress: "0x746a7063101E2D3305D1556888ee08193f2B9a07",
366
- token: mockUSDT,
367
- // coins[0]
368
- quoteToken: bscTestnetTokens.busd,
369
- // coins[1]
370
- stableSwapAddress: "0xE25A1352477f3DB9B3008B31e9b7a07a18f8A9e6",
371
- infoStableSwapAddress: "0x0A548d59D04096Bc01206D58C3D63c478e1e06dB",
372
- stableTotalFee: 4e-4,
373
- stableLpFee: 2e-4,
374
- stableLpFeeRateOfTotalFee: 0.5
375
- },
376
- {
377
- lpSymbol: "BUSD-USDC LP",
378
- lpAddress: "0x7CA885d338462790DD1B5416ebe6bec75ee045a1",
379
- token: bscTestnetTokens.mockBusd,
380
- // coins[0]
381
- quoteToken: bscTestnetTokens.usdc,
382
- // coins[1]
383
- stableSwapAddress: "0xd5E56CD4c8111643a94Ee084df31F44055a1EC9F",
384
- infoStableSwapAddress: "0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546",
385
- stableTotalFee: 15e-4,
386
- stableLpFee: 75e-5,
387
- stableLpFeeRateOfTotalFee: 0.5
388
- },
389
- {
390
- lpSymbol: "USDT-BUSD LP",
391
- lpAddress: "0x9Fa2Ef2C3dF6F903F4b73047311e861C51a11B60",
392
- token: bscTestnetTokens.usdt,
393
- // coins[0]
394
- quoteToken: bscTestnetTokens.mockBusd,
395
- // coins[1]
396
- stableSwapAddress: "0xc418d68751Cbe0407C8fdd90Cde73cE95b892f39",
397
- infoStableSwapAddress: "0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546",
398
- stableTotalFee: 15e-4,
399
- stableLpFee: 75e-5,
400
- stableLpFeeRateOfTotalFee: 0.5
401
- }
402
- ];
403
- var pools4 = [
404
- {
405
- lpSymbol: "WBTC-mBTC LP",
406
- lpAddress: "0xaB9dEBAED21270832cCdf54a7461A8E4B133B57A",
407
- token: ethereumTokens.wbtc,
408
- quoteToken: ethereumTokens.mBtc,
409
- stableSwapAddress: "0x95A3832889B2c3455077991b834efA2d4fA3A945",
410
- infoStableSwapAddress: "0xCcd9fea6bBF1910F4c188A5BBC13D98Ea4F5f9F9",
411
- stableTotalFee: 2e-4,
412
- stableLpFee: 1e-4,
413
- stableLpFeeRateOfTotalFee: 0.5
414
- }
415
- ];
416
138
 
417
- // src/constants/pools/pools.ts
139
+ // src/config/endpoint.ts
140
+ var STABLE_SWAP_API = "https://configs.pancakeswap.com/api/data/cached/stableswaps";
418
141
  var isStableSwapSupported = (chainId) => {
419
142
  if (!chainId) {
420
143
  return false;
@@ -427,19 +150,55 @@ var STABLE_SUPPORTED_CHAIN_IDS = [
427
150
  ChainId.ARBITRUM_ONE,
428
151
  ChainId.ETHEREUM
429
152
  ];
430
- var STABLE_POOL_MAP = {
431
- [ChainId.BSC]: pools,
432
- [ChainId.BSC_TESTNET]: pools3,
433
- [ChainId.ARBITRUM_ONE]: pools2,
434
- [ChainId.ETHEREUM]: pools4
435
- };
436
153
 
437
154
  // src/constants/pools/index.ts
438
- function getStableSwapPools(chainId) {
155
+ var stableSwapCache = {};
156
+ var inProgressFetches = {};
157
+ var fetchStableSwapData = async (chainId) => {
158
+ const cacheKey = `${chainId}-all`;
159
+ if (stableSwapCache[cacheKey]) {
160
+ return stableSwapCache[cacheKey];
161
+ }
162
+ if (inProgressFetches[cacheKey]) {
163
+ return inProgressFetches[cacheKey];
164
+ }
165
+ inProgressFetches[cacheKey] = fetch(`${STABLE_SWAP_API}?chainId=${chainId}`, {
166
+ signal: AbortSignal.timeout(3e3)
167
+ }).then((response) => response.json()).then((result) => {
168
+ const newData = result.map((p) => ({
169
+ ...p,
170
+ token: new ERC20Token(
171
+ p.token.chainId,
172
+ p.token.address,
173
+ p.token.decimals,
174
+ p.token.symbol,
175
+ p.token.name,
176
+ p.token.projectLink
177
+ ),
178
+ quoteToken: new ERC20Token(
179
+ p.quoteToken.chainId,
180
+ p.quoteToken.address,
181
+ p.quoteToken.decimals,
182
+ p.quoteToken.symbol,
183
+ p.quoteToken.name,
184
+ p.quoteToken.projectLink
185
+ )
186
+ }));
187
+ stableSwapCache[cacheKey] = newData;
188
+ return newData;
189
+ }).catch(() => {
190
+ return [];
191
+ }).finally(() => {
192
+ delete inProgressFetches[cacheKey];
193
+ });
194
+ return inProgressFetches[cacheKey];
195
+ };
196
+ async function getStableSwapPools(chainId) {
439
197
  if (!isStableSwapSupported(chainId)) {
440
198
  return [];
441
199
  }
442
- return STABLE_POOL_MAP[chainId] || [];
200
+ const stableSwapData = await fetchStableSwapData(chainId);
201
+ return stableSwapData;
443
202
  }
444
203
 
445
204
  // src/constants/index.ts
@@ -526,6 +285,6 @@ function createQuoteGetter(isExactIn) {
526
285
  var getQuoteExactIn = createQuoteGetter(true);
527
286
  var getQuoteExactOut = createQuoteGetter(false);
528
287
 
529
- export { ONE_HUNDRED_PERCENT, STABLE_SUPPORTED_CHAIN_IDS, getD, getLPOutput, getLPOutputWithoutFee, getQuoteExactIn, getQuoteExactOut, getStableSwapPools, getSwapInput, getSwapInputWithtouFee, getSwapOutput, getSwapOutputWithoutFee, isStableSwapSupported };
288
+ export { ONE_HUNDRED_PERCENT, STABLE_SUPPORTED_CHAIN_IDS, fetchStableSwapData, getD, getLPOutput, getLPOutputWithoutFee, getQuoteExactIn, getQuoteExactOut, getStableSwapPools, getSwapInput, getSwapInputWithtouFee, getSwapOutput, getSwapOutputWithoutFee, isStableSwapSupported };
530
289
  //# sourceMappingURL=out.js.map
531
290
  //# sourceMappingURL=index.js.map
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/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 lpSymbol: 'mBTC-BTCB LP',\n lpAddress: '0xaA4DABbF68AC17eF6dABFd11a7035b913C5F2de3',\n token: bscTokens.mBtc,\n quoteToken: bscTokens.btcb,\n stableSwapAddress: '0xDb8CfACE4588E246642329a8D8Bd4a10A459c3f7',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0002,\n stableLpFee: 0.0001,\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 lpSymbol: 'mBTC-WBTC LP',\n lpAddress: '0x893c6d8b83726df868C1426f71c46Ba479ba3cC8',\n token: arbitrumTokens.mBtc,\n quoteToken: arbitrumTokens.wbtc,\n stableSwapAddress: '0xE80bD6fE6CB209E5546153AF19F151a3e651FA57',\n infoStableSwapAddress: '0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0',\n stableTotalFee: 0.0002,\n stableLpFee: 0.0001,\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"]}
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/index.ts","../src/config/endpoint.ts","../src/constants/pools/pools.ts"],"names":["Percent","CurrencyAmount","ZERO","invariant","b","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'\nimport { ERC20Token } from '@pancakeswap/sdk'\nimport { STABLE_SWAP_API } from '../../config/endpoint'\nimport { StableSwapPool } from '../../types'\nimport { isStableSwapSupported, STABLE_SUPPORTED_CHAIN_IDS } from './pools'\n\nconst stableSwapCache: Record<string, StableSwapPool[]> = {}\nconst inProgressFetches: Record<string, Promise<StableSwapPool[]> | undefined> = {}\n\nexport const fetchStableSwapData = async (chainId: ChainId): Promise<StableSwapPool[]> => {\n const cacheKey = `${chainId}-all`\n\n // Return cached data if it exists\n if (stableSwapCache[cacheKey]) {\n return stableSwapCache[cacheKey]\n }\n\n // Return in-progress fetch if available\n if (inProgressFetches[cacheKey]) {\n return inProgressFetches[cacheKey]!\n }\n\n // Start a new fetch, assign it to the in-progress tracker\n inProgressFetches[cacheKey] = fetch(`${STABLE_SWAP_API}?chainId=${chainId}`, {\n signal: AbortSignal.timeout(3000),\n })\n .then((response) => response.json())\n .then((result) => {\n const newData: StableSwapPool[] = result.map((p: any) => ({\n ...p,\n token: new ERC20Token(\n p.token.chainId,\n p.token.address,\n p.token.decimals,\n p.token.symbol,\n p.token.name,\n p.token.projectLink,\n ),\n quoteToken: new ERC20Token(\n p.quoteToken.chainId,\n p.quoteToken.address,\n p.quoteToken.decimals,\n p.quoteToken.symbol,\n p.quoteToken.name,\n p.quoteToken.projectLink,\n ),\n }))\n\n // Cache the result before returning it\n stableSwapCache[cacheKey] = newData\n return newData\n })\n .catch(() => {\n return []\n })\n .finally(() => {\n // Clean up in-progress fetch tracker\n delete inProgressFetches[cacheKey]\n })\n\n return inProgressFetches[cacheKey]!\n}\n\nexport async function getStableSwapPools(chainId: ChainId): Promise<StableSwapPool[]> {\n // Stable swap is only supported on BSC chain & BSC testnet\n if (!isStableSwapSupported(chainId)) {\n return []\n }\n\n const stableSwapData = await fetchStableSwapData(chainId)\n return stableSwapData\n}\n\nexport { isStableSwapSupported, STABLE_SUPPORTED_CHAIN_IDS }\n","export const STABLE_SWAP_API = 'https://configs.pancakeswap.com/api/data/cached/stableswaps'\n","import { ChainId } from '@pancakeswap/chains'\n\nimport { StableSwapPool } from '../../types'\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pancakeswap/stable-swap-sdk",
3
- "version": "1.1.3",
3
+ "version": "2.0.0",
4
4
  "description": "SDK for pancakeswap stable swap",
5
5
  "repository": {
6
6
  "type": "git",
@@ -18,15 +18,16 @@
18
18
  "dependencies": {
19
19
  "tiny-invariant": "^1.3.0",
20
20
  "@pancakeswap/chains": "0.4.6",
21
- "@pancakeswap/swap-sdk-core": "1.2.0",
22
- "@pancakeswap/tokens": "0.6.27"
21
+ "@pancakeswap/swap-sdk-core": "1.3.0",
22
+ "@pancakeswap/tokens": "0.6.29"
23
23
  },
24
24
  "devDependencies": {
25
25
  "tsup": "^6.7.0",
26
- "viem": "^2.21.9",
26
+ "viem": "^2.21.22",
27
+ "@pancakeswap/token-lists": "0.0.14",
27
28
  "@pancakeswap/tsconfig": "0.0.0",
28
- "@pancakeswap/token-lists": "0.0.13",
29
- "@pancakeswap/utils": "6.0.9"
29
+ "@pancakeswap/utils": "6.0.9",
30
+ "@pancakeswap/sdk": "5.8.10"
30
31
  },
31
32
  "exports": {
32
33
  "./package.json": "./package.json",
@@ -1,3 +0,0 @@
1
- import { StableSwapPool } from '../../types';
2
- export declare const pools: StableSwapPool[];
3
- //# sourceMappingURL=arb.d.ts.map
@@ -1 +0,0 @@
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,EAkCjC,CAAA"}
@@ -1,3 +0,0 @@
1
- import { StableSwapPool } from '../../types';
2
- export declare const pools: StableSwapPool[];
3
- //# sourceMappingURL=bsc.d.ts.map
@@ -1 +0,0 @@
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,EAsKjC,CAAA"}
@@ -1,3 +0,0 @@
1
- import { StableSwapPool } from '../../types';
2
- export declare const pools: StableSwapPool[];
3
- //# sourceMappingURL=bscTestnet.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,3 +0,0 @@
1
- import { StableSwapPool } from '../../types';
2
- export declare const pools: StableSwapPool[];
3
- //# sourceMappingURL=eth.d.ts.map
@@ -1 +0,0 @@
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"}