@pancakeswap/stable-swap-sdk 1.0.15 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants/pools/arb.d.ts.map +1 -1
- package/dist/constants/pools/bsc.d.ts.map +1 -1
- package/dist/constants/pools/bscTestnet.d.ts.map +1 -1
- package/dist/constants/pools/eth.d.ts +3 -0
- package/dist/constants/pools/eth.d.ts.map +1 -0
- package/dist/constants/pools/pools.d.ts +3 -2
- package/dist/constants/pools/pools.d.ts.map +1 -1
- package/dist/index.cjs +62 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +63 -14
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arb.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/arb.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,eAAO,MAAM,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"arb.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/arb.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,eAAO,MAAM,KAAK,EAAE,cAAc,EAuBjC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bsc.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/bsc.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,eAAO,MAAM,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"bsc.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/bsc.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,eAAO,MAAM,KAAK,EAAE,cAAc,EA2JjC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bscTestnet.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/bscTestnet.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAI5C,eAAO,MAAM,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"bscTestnet.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/bscTestnet.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAI5C,eAAO,MAAM,KAAK,EAAE,cAAc,EAqDjC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eth.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/eth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,eAAO,MAAM,KAAK,EAAE,cAAc,EAYjC,CAAA"}
|
|
@@ -3,12 +3,13 @@ import { StableSwapPool } from '../../types';
|
|
|
3
3
|
export type StableSwapPoolMap<TChainId extends number> = {
|
|
4
4
|
[chainId in TChainId]: StableSwapPool[];
|
|
5
5
|
};
|
|
6
|
-
export declare const isStableSwapSupported: (chainId: number | undefined) => chainId is ChainId.BSC | ChainId.BSC_TESTNET | ChainId.ARBITRUM_ONE;
|
|
7
|
-
export declare const STABLE_SUPPORTED_CHAIN_IDS: readonly [ChainId.BSC, ChainId.BSC_TESTNET, ChainId.ARBITRUM_ONE];
|
|
6
|
+
export declare const isStableSwapSupported: (chainId: number | undefined) => chainId is ChainId.ETHEREUM | ChainId.BSC | ChainId.BSC_TESTNET | ChainId.ARBITRUM_ONE;
|
|
7
|
+
export declare const STABLE_SUPPORTED_CHAIN_IDS: readonly [ChainId.BSC, ChainId.BSC_TESTNET, ChainId.ARBITRUM_ONE, ChainId.ETHEREUM];
|
|
8
8
|
export type StableSupportedChainId = (typeof STABLE_SUPPORTED_CHAIN_IDS)[number];
|
|
9
9
|
export declare const STABLE_POOL_MAP: {
|
|
10
10
|
56: StableSwapPool[];
|
|
11
11
|
97: StableSwapPool[];
|
|
12
12
|
42161: StableSwapPool[];
|
|
13
|
+
1: StableSwapPool[];
|
|
13
14
|
};
|
|
14
15
|
//# sourceMappingURL=pools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pools.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/pools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"pools.d.ts","sourceRoot":"","sources":["../../../src/constants/pools/pools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAM5C,MAAM,MAAM,iBAAiB,CAAC,QAAQ,SAAS,MAAM,IAAI;KACtD,OAAO,IAAI,QAAQ,GAAG,cAAc,EAAE;CACxC,CAAA;AAED,eAAO,MAAM,qBAAqB,YAAa,MAAM,GAAG,SAAS,2FAKhE,CAAA;AAED,eAAO,MAAM,0BAA0B,qFAK7B,CAAA;AAEV,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAA;AAEhF,eAAO,MAAM,eAAe;;;;;CAKyB,CAAA"}
|
package/dist/index.cjs
CHANGED
|
@@ -149,6 +149,7 @@ var pools = [
|
|
|
149
149
|
quoteToken: tokens.bscTokens.busd,
|
|
150
150
|
stableSwapAddress: "0x49079D07ef47449aF808A4f36c2a8dEC975594eC",
|
|
151
151
|
infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
|
|
152
|
+
stableTotalFee: 4e-4,
|
|
152
153
|
stableLpFee: 2e-4,
|
|
153
154
|
stableLpFeeRateOfTotalFee: 0.5
|
|
154
155
|
},
|
|
@@ -159,6 +160,7 @@ var pools = [
|
|
|
159
160
|
quoteToken: tokens.bscTokens.busd,
|
|
160
161
|
stableSwapAddress: "0x169F653A54ACD441aB34B73dA9946e2C451787EF",
|
|
161
162
|
infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
|
|
163
|
+
stableTotalFee: 1e-4,
|
|
162
164
|
stableLpFee: 5e-5,
|
|
163
165
|
stableLpFeeRateOfTotalFee: 0.5
|
|
164
166
|
},
|
|
@@ -169,6 +171,7 @@ var pools = [
|
|
|
169
171
|
quoteToken: tokens.bscTokens.busd,
|
|
170
172
|
stableSwapAddress: "0xc2F5B9a3d9138ab2B74d581fC11346219eBf43Fe",
|
|
171
173
|
infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
|
|
174
|
+
stableTotalFee: 1e-4,
|
|
172
175
|
stableLpFee: 5e-5,
|
|
173
176
|
stableLpFeeRateOfTotalFee: 0.5
|
|
174
177
|
},
|
|
@@ -179,6 +182,7 @@ var pools = [
|
|
|
179
182
|
quoteToken: tokens.bscTokens.usdc,
|
|
180
183
|
stableSwapAddress: "0x3EFebC418efB585248A0D2140cfb87aFcc2C63DD",
|
|
181
184
|
infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
|
|
185
|
+
stableTotalFee: 1e-4,
|
|
182
186
|
stableLpFee: 5e-5,
|
|
183
187
|
stableLpFeeRateOfTotalFee: 0.5
|
|
184
188
|
},
|
|
@@ -189,6 +193,7 @@ var pools = [
|
|
|
189
193
|
quoteToken: tokens.bscTokens.usdt,
|
|
190
194
|
stableSwapAddress: "0x6D8fba276ec6F1EDa2344DA48565AdbCA7e4FFa5",
|
|
191
195
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
196
|
+
stableTotalFee: 4e-4,
|
|
192
197
|
stableLpFee: 2e-4,
|
|
193
198
|
stableLpFeeRateOfTotalFee: 0.5
|
|
194
199
|
},
|
|
@@ -199,6 +204,7 @@ var pools = [
|
|
|
199
204
|
quoteToken: tokens.bscTokens.stkbnb,
|
|
200
205
|
stableSwapAddress: "0x0b03e3d6Ec0c5e5bBf993dED8D947C6fb6eEc18D",
|
|
201
206
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
207
|
+
stableTotalFee: 4e-4,
|
|
202
208
|
stableLpFee: 2e-4,
|
|
203
209
|
stableLpFeeRateOfTotalFee: 0.5
|
|
204
210
|
},
|
|
@@ -209,6 +215,7 @@ var pools = [
|
|
|
209
215
|
quoteToken: tokens.bscTokens.wbnb,
|
|
210
216
|
stableSwapAddress: "0x9c138bE1D76ee4C5162E0fe9D4eEA5542a23D1bD",
|
|
211
217
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
218
|
+
stableTotalFee: 4e-4,
|
|
212
219
|
stableLpFee: 2e-4,
|
|
213
220
|
stableLpFeeRateOfTotalFee: 0.5
|
|
214
221
|
},
|
|
@@ -219,7 +226,8 @@ var pools = [
|
|
|
219
226
|
quoteToken: tokens.bscTokens.usdt,
|
|
220
227
|
stableSwapAddress: "0xb1Da7D2C257c5700612BdE35C8d7187dc80d79f1",
|
|
221
228
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
222
|
-
|
|
229
|
+
stableTotalFee: 4e-4,
|
|
230
|
+
stableLpFee: 2e-4,
|
|
223
231
|
stableLpFeeRateOfTotalFee: 0.5
|
|
224
232
|
},
|
|
225
233
|
{
|
|
@@ -229,7 +237,8 @@ var pools = [
|
|
|
229
237
|
quoteToken: tokens.bscTokens.sdcake,
|
|
230
238
|
stableSwapAddress: "0xb8204D31379A9B317CD61C833406C972F58ecCbC",
|
|
231
239
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
232
|
-
|
|
240
|
+
stableTotalFee: 1e-3,
|
|
241
|
+
stableLpFee: 5e-4,
|
|
233
242
|
stableLpFeeRateOfTotalFee: 0.5
|
|
234
243
|
},
|
|
235
244
|
{
|
|
@@ -239,7 +248,8 @@ var pools = [
|
|
|
239
248
|
quoteToken: tokens.bscTokens.mcake,
|
|
240
249
|
stableSwapAddress: "0xc54d35a8Cfd9f6dAe50945Df27A91C9911A03ab1",
|
|
241
250
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
242
|
-
|
|
251
|
+
stableTotalFee: 5e-3,
|
|
252
|
+
stableLpFee: 25e-4,
|
|
243
253
|
stableLpFeeRateOfTotalFee: 0.5
|
|
244
254
|
},
|
|
245
255
|
{
|
|
@@ -249,7 +259,8 @@ var pools = [
|
|
|
249
259
|
quoteToken: tokens.bscTokens.pendle,
|
|
250
260
|
stableSwapAddress: "0xD8CB82059da7215b1a9604E845d49D3e78d0f95A",
|
|
251
261
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
252
|
-
|
|
262
|
+
stableTotalFee: 25e-4,
|
|
263
|
+
stableLpFee: 125e-5,
|
|
253
264
|
stableLpFeeRateOfTotalFee: 0.5
|
|
254
265
|
},
|
|
255
266
|
{
|
|
@@ -259,7 +270,8 @@ var pools = [
|
|
|
259
270
|
quoteToken: tokens.bscTokens.dlp,
|
|
260
271
|
stableSwapAddress: "0x25d0eD3b1cE5aF0F3Ac7da4b39B46FC409bF67e2",
|
|
261
272
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
262
|
-
|
|
273
|
+
stableTotalFee: 25e-4,
|
|
274
|
+
stableLpFee: 125e-5,
|
|
263
275
|
stableLpFeeRateOfTotalFee: 0.5
|
|
264
276
|
},
|
|
265
277
|
{
|
|
@@ -269,6 +281,18 @@ var pools = [
|
|
|
269
281
|
quoteToken: tokens.bscTokens.wbeth,
|
|
270
282
|
stableSwapAddress: "0xfF5Ce4846A3708EA9befa6c3Ab145e63f65DC045",
|
|
271
283
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
284
|
+
stableTotalFee: 2e-4,
|
|
285
|
+
stableLpFee: 1e-4,
|
|
286
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
lpSymbol: "USDT-BITU LP",
|
|
290
|
+
lpAddress: "0x00020c0235677c9D66CE1E20A8FD4a2526d58CDb",
|
|
291
|
+
token: tokens.bscTokens.usdt,
|
|
292
|
+
quoteToken: tokens.bscTokens.bitu,
|
|
293
|
+
stableSwapAddress: "0x469F3B14FA289c960d272D4159eD005cFFC8D09D",
|
|
294
|
+
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
295
|
+
stableTotalFee: 4e-4,
|
|
272
296
|
stableLpFee: 2e-4,
|
|
273
297
|
stableLpFeeRateOfTotalFee: 0.5
|
|
274
298
|
}
|
|
@@ -281,7 +305,8 @@ var pools2 = [
|
|
|
281
305
|
quoteToken: tokens.arbitrumTokens.mpendle,
|
|
282
306
|
stableSwapAddress: "0x73ed25e04Aa673ddf7411441098fC5ae19976CE0",
|
|
283
307
|
infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
|
|
284
|
-
|
|
308
|
+
stableTotalFee: 25e-4,
|
|
309
|
+
stableLpFee: 125e-5,
|
|
285
310
|
stableLpFeeRateOfTotalFee: 0.5
|
|
286
311
|
},
|
|
287
312
|
{
|
|
@@ -291,7 +316,8 @@ var pools2 = [
|
|
|
291
316
|
quoteToken: tokens.arbitrumTokens.mdlp,
|
|
292
317
|
stableSwapAddress: "0xd0f0be815a76eFE677c92b07b39a5e972BAf22bD",
|
|
293
318
|
infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
|
|
294
|
-
|
|
319
|
+
stableTotalFee: 25e-4,
|
|
320
|
+
stableLpFee: 125e-5,
|
|
295
321
|
stableLpFeeRateOfTotalFee: 0.5
|
|
296
322
|
}
|
|
297
323
|
];
|
|
@@ -314,7 +340,8 @@ var pools3 = [
|
|
|
314
340
|
// coins[1]
|
|
315
341
|
stableSwapAddress: "0xBcd585Ee8B8Ac8de6b0e45dA32Aa31703036b2a1",
|
|
316
342
|
infoStableSwapAddress: "0x0A548d59D04096Bc01206D58C3D63c478e1e06dB",
|
|
317
|
-
|
|
343
|
+
stableTotalFee: 4e-4,
|
|
344
|
+
stableLpFee: 2e-4,
|
|
318
345
|
stableLpFeeRateOfTotalFee: 0.5
|
|
319
346
|
},
|
|
320
347
|
{
|
|
@@ -326,7 +353,8 @@ var pools3 = [
|
|
|
326
353
|
// coins[1]
|
|
327
354
|
stableSwapAddress: "0xE25A1352477f3DB9B3008B31e9b7a07a18f8A9e6",
|
|
328
355
|
infoStableSwapAddress: "0x0A548d59D04096Bc01206D58C3D63c478e1e06dB",
|
|
329
|
-
|
|
356
|
+
stableTotalFee: 4e-4,
|
|
357
|
+
stableLpFee: 2e-4,
|
|
330
358
|
stableLpFeeRateOfTotalFee: 0.5
|
|
331
359
|
},
|
|
332
360
|
{
|
|
@@ -338,7 +366,8 @@ var pools3 = [
|
|
|
338
366
|
// coins[1]
|
|
339
367
|
stableSwapAddress: "0xd5E56CD4c8111643a94Ee084df31F44055a1EC9F",
|
|
340
368
|
infoStableSwapAddress: "0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546",
|
|
341
|
-
|
|
369
|
+
stableTotalFee: 15e-4,
|
|
370
|
+
stableLpFee: 75e-5,
|
|
342
371
|
stableLpFeeRateOfTotalFee: 0.5
|
|
343
372
|
},
|
|
344
373
|
{
|
|
@@ -350,7 +379,21 @@ var pools3 = [
|
|
|
350
379
|
// coins[1]
|
|
351
380
|
stableSwapAddress: "0xc418d68751Cbe0407C8fdd90Cde73cE95b892f39",
|
|
352
381
|
infoStableSwapAddress: "0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546",
|
|
353
|
-
|
|
382
|
+
stableTotalFee: 15e-4,
|
|
383
|
+
stableLpFee: 75e-5,
|
|
384
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
385
|
+
}
|
|
386
|
+
];
|
|
387
|
+
var pools4 = [
|
|
388
|
+
{
|
|
389
|
+
lpSymbol: "WBTC-mBTC LP",
|
|
390
|
+
lpAddress: "0xaB9dEBAED21270832cCdf54a7461A8E4B133B57A",
|
|
391
|
+
token: tokens.ethereumTokens.wbtc,
|
|
392
|
+
quoteToken: tokens.ethereumTokens.mBtc,
|
|
393
|
+
stableSwapAddress: "0x95A3832889B2c3455077991b834efA2d4fA3A945",
|
|
394
|
+
infoStableSwapAddress: "0xCcd9fea6bBF1910F4c188A5BBC13D98Ea4F5f9F9",
|
|
395
|
+
stableTotalFee: 2e-4,
|
|
396
|
+
stableLpFee: 1e-4,
|
|
354
397
|
stableLpFeeRateOfTotalFee: 0.5
|
|
355
398
|
}
|
|
356
399
|
];
|
|
@@ -362,11 +405,17 @@ var isStableSwapSupported = (chainId) => {
|
|
|
362
405
|
}
|
|
363
406
|
return STABLE_SUPPORTED_CHAIN_IDS.includes(chainId);
|
|
364
407
|
};
|
|
365
|
-
var STABLE_SUPPORTED_CHAIN_IDS = [
|
|
408
|
+
var STABLE_SUPPORTED_CHAIN_IDS = [
|
|
409
|
+
chains.ChainId.BSC,
|
|
410
|
+
chains.ChainId.BSC_TESTNET,
|
|
411
|
+
chains.ChainId.ARBITRUM_ONE,
|
|
412
|
+
chains.ChainId.ETHEREUM
|
|
413
|
+
];
|
|
366
414
|
var STABLE_POOL_MAP = {
|
|
367
415
|
[chains.ChainId.BSC]: pools,
|
|
368
416
|
[chains.ChainId.BSC_TESTNET]: pools3,
|
|
369
|
-
[chains.ChainId.ARBITRUM_ONE]: pools2
|
|
417
|
+
[chains.ChainId.ARBITRUM_ONE]: pools2,
|
|
418
|
+
[chains.ChainId.ETHEREUM]: pools4
|
|
370
419
|
};
|
|
371
420
|
|
|
372
421
|
// src/constants/pools/index.ts
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/amm/getLPOutputWithoutFee.ts","../src/amm/getLPOutput.ts","../src/amm/amm.ts","../src/amm/utils.ts","../src/amm/getSwapOutput.ts","../src/constants/index.ts","../src/constants/pools/pools.ts","../src/constants/pools/bsc.ts","../src/constants/pools/arb.ts","../src/constants/pools/bscTestnet.ts","../src/constants/pools/index.ts"],"names":["Percent","CurrencyAmount","ZERO","invariant","b","ChainId","pools","y","dy","amountOut"],"mappings":"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","sourcesContent":["import { CurrencyAmount, Currency, Percent } from '@pancakeswap/swap-sdk-core'\n\nimport { getLPOutput, GetLPOutputParams } from './getLPOutput'\n\nexport function getLPOutputWithoutFee(params: Omit<GetLPOutputParams, 'fee'>): CurrencyAmount<Currency> {\n return getLPOutput({ ...params, fee: new Percent(0) })\n}\n","import { BigintIsh, CurrencyAmount, Currency, ZERO, Percent } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\nimport { getD } from './amm'\nimport { getRawAmount } from './utils'\n\nexport interface GetLPOutputParams {\n amplifier: BigintIsh\n // Token balances of the stable pool\n balances: CurrencyAmount<Currency>[]\n // User input amounts\n amounts: CurrencyAmount<Currency>[]\n // Total supply of LP token\n totalSupply: CurrencyAmount<Currency>\n // Fee of adding liquidity\n fee: Percent\n}\n\nexport function getLPOutput({\n amplifier,\n balances,\n totalSupply,\n amounts,\n fee,\n}: GetLPOutputParams): CurrencyAmount<Currency> {\n const lpToken = totalSupply.currency\n const lpTotalSupply = totalSupply.quotient\n // No liquidity in pool\n if (lpTotalSupply === ZERO || !balances.length || balances.every((b) => b.quotient === ZERO)) {\n const d = getD({ amplifier, balances: amounts.map(getRawAmount) })\n return CurrencyAmount.fromRawAmount(lpToken, d)\n }\n\n const currentBalances: bigint[] = []\n const newBalances: bigint[] = []\n for (const [i, balance] of balances.entries()) {\n const amount = amounts[i] || CurrencyAmount.fromRawAmount(balance.currency, 0)\n invariant(\n amount.currency.wrapped.equals(balance.currency.wrapped),\n 'User input currency should be the same as pool balance currency.',\n )\n const balanceRaw = getRawAmount(balance)\n const amountRaw = getRawAmount(amount)\n currentBalances.push(balanceRaw)\n newBalances.push(balanceRaw + amountRaw)\n }\n\n const d0 = getD({ amplifier, balances: currentBalances })\n const d1 = getD({ amplifier, balances: newBalances })\n invariant(d1 >= d0, 'D1 should be greater than or equal than d0.')\n\n const isFirstSupply = lpTotalSupply <= ZERO\n if (isFirstSupply) {\n return CurrencyAmount.fromRawAmount(totalSupply.currency, d1)\n }\n\n const n = currentBalances.length\n const eachTokenFee = fee.multiply(n).divide(4 * (n - 1))\n\n let d2 = d1\n for (const [i, b] of currentBalances.entries()) {\n const idealBalance = (d1 * b) / d0\n let diff = ZERO\n if (idealBalance > newBalances[i]) {\n diff = idealBalance - newBalances[i]\n } else {\n diff = newBalances[i] - idealBalance\n }\n const feeAmount = eachTokenFee.multiply(diff).quotient\n // eslint-disable-next-line operator-assignment\n newBalances[i] = newBalances[i] - feeAmount\n }\n d2 = getD({ amplifier, balances: newBalances })\n\n const expectedMintLP = (lpTotalSupply * (d2 - d0)) / d0\n return CurrencyAmount.fromRawAmount(totalSupply.currency, expectedMintLP)\n}\n","import { BigintIsh, ZERO, ONE } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\ninterface Params {\n amplifier: BigintIsh\n balances: BigintIsh[]\n}\n\n/**\n * Calculate the constant D of Curve AMM formula\n * @see https://classic.curve.fi/files/stableswap-paper.pdf\n */\nexport function getD({ amplifier, balances }: Params): bigint {\n const numOfCoins = balances.length\n invariant(numOfCoins > 1, 'To get constant D, pool should have at least two coins.')\n\n const sum = balances.reduce<bigint>((s, cur) => s + BigInt(cur), ZERO)\n if (sum === ZERO) {\n return ZERO\n }\n\n const n = BigInt(numOfCoins)\n // Equality with the precision of 1\n const precision = ONE\n // The amplifier is actually An^n-1, so we only times n here\n const ann = BigInt(amplifier) * n\n let dPrev = ZERO\n let d = sum\n for (let i = 0; i < 255; i += 1) {\n let dp = d\n for (const b of balances) {\n dp = (dp * d) / (BigInt(b) * n + 1n)\n }\n dPrev = d\n d = ((ann * sum + dp * n) * d) / ((ann - ONE) * d + (n + ONE) * dp)\n\n if (d > dPrev && d - dPrev <= precision) {\n break\n }\n\n if (d <= dPrev && dPrev - d <= precision) {\n break\n }\n }\n\n return d\n}\n\ninterface GetYParams {\n amplifier: BigintIsh\n balances: BigintIsh[]\n // The index of the base token\n i: number\n // The index of the swap target token\n j: number\n // The amount of token i that user deposit\n x: BigintIsh\n}\n\n/**\n * Calculate the expected token amount y after user deposit\n * @see https://classic.curve.fi/files/stableswap-paper.pdf\n */\nexport function getY({ amplifier, balances, i, j, x }: GetYParams): bigint {\n const numOfCoins = balances.length\n invariant(numOfCoins > 1, 'To get y, pool should have at least two coins.')\n invariant(i !== j && i >= 0 && j >= 0 && i < numOfCoins && j < numOfCoins, `Invalid i: ${i} and j: ${j}`)\n\n const n = BigInt(numOfCoins)\n const d = getD({ amplifier, balances })\n let sum = ZERO\n let c = d\n // The amplifier is actually An^n-1, so we only times n here\n const ann = BigInt(amplifier) * n\n for (const [index, b] of balances.entries()) {\n if (index === j) {\n // eslint-disable-next-line no-continue\n continue\n }\n let balanceAfterDeposit = BigInt(b)\n if (index === i) {\n balanceAfterDeposit += BigInt(x)\n }\n\n invariant(balanceAfterDeposit > ZERO, 'Insufficient liquidity')\n\n sum += balanceAfterDeposit\n c = (c * d) / (balanceAfterDeposit * n)\n }\n c = (c * d) / (ann * n)\n const b = sum + d / ann\n\n // Equality with the precision of 1\n const precision = ONE\n let yPrev = ZERO\n let y = d\n for (let k = 0; k < 255; k += 1) {\n yPrev = y\n y = (y * y + c) / (2n * y + b - d)\n\n if (y > yPrev && y - yPrev <= precision) {\n break\n }\n\n if (y <= yPrev && yPrev - y <= precision) {\n break\n }\n }\n\n return y\n}\n","import { CurrencyAmount, Currency } from '@pancakeswap/swap-sdk-core'\n\nconst PRECISION = 10n ** 18n\n\nexport const getRawAmount = (amount: CurrencyAmount<Currency>) => {\n return (amount.quotient * PRECISION) / 10n ** BigInt(amount.currency.decimals)\n}\n\nexport const parseAmount = (currency: Currency, rawAmount: bigint) => {\n return CurrencyAmount.fromRawAmount(currency, (rawAmount * 10n ** BigInt(currency.decimals)) / PRECISION)\n}\n","import { BigintIsh, CurrencyAmount, Currency, Percent, ZERO } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\nimport { getY } from './amm'\nimport { getRawAmount, parseAmount } from './utils'\nimport { ONE_HUNDRED_PERCENT } from '../constants'\n\nexport interface GetSwapOutputParams {\n amplifier: BigintIsh\n // Token balances of the stable pool\n balances: CurrencyAmount<Currency>[]\n // User input amount\n amount: CurrencyAmount<Currency>\n // The currency user want to swap to\n outputCurrency: Currency\n // Fee of swapping\n fee: Percent\n}\n\nexport function getSwapOutput({\n amplifier,\n balances: balanceAmounts,\n outputCurrency,\n amount,\n fee,\n}: GetSwapOutputParams): CurrencyAmount<Currency> {\n const validateAmountOut = (a: CurrencyAmount<Currency>) =>\n invariant(!a.lessThan(ZERO), 'Insufficient liquidity to perform the swap')\n\n let i: number | null = null\n let j: number | null = null\n const balances: bigint[] = []\n for (const [index, b] of balanceAmounts.entries()) {\n balances.push(getRawAmount(b))\n if (b.currency.wrapped.equals(amount.currency.wrapped)) {\n i = index\n // eslint-disable-next-line no-continue\n continue\n }\n if (b.currency.wrapped.equals(outputCurrency.wrapped)) {\n j = index\n // eslint-disable-next-line no-continue\n continue\n }\n }\n\n invariant(\n i !== null && j !== null && i !== j,\n 'Input currency or output currency does not match currencies of token balances.',\n )\n\n // Exact output\n if (amount.quotient < ZERO) {\n const x = ONE_HUNDRED_PERCENT.subtract(fee).invert().multiply(getRawAmount(amount)).quotient\n const y = getY({ amplifier, balances, i, j, x })\n const dy = y - balances[j]\n const amountOut = parseAmount(outputCurrency, dy)\n validateAmountOut(amountOut)\n return amountOut\n }\n\n const y = getY({ amplifier, balances, i, j, x: getRawAmount(amount) })\n const dy = balances[j] - y\n const feeAmount = fee.multiply(dy).quotient\n const amountOut = parseAmount(outputCurrency, dy - feeAmount)\n validateAmountOut(amountOut)\n return amountOut\n}\n\nexport function getSwapOutputWithoutFee(params: Omit<GetSwapOutputParams, 'fee'>): CurrencyAmount<Currency> {\n return getSwapOutput({ ...params, fee: new Percent(0) })\n}\n\nexport function getSwapInput({ amount, ...rest }: GetSwapOutputParams) {\n return getSwapOutput({\n ...rest,\n amount: CurrencyAmount.fromRawAmount(amount.currency, -amount.quotient),\n })\n}\n\nexport function getSwapInputWithtouFee(params: Omit<GetSwapOutputParams, 'fee'>) {\n return getSwapInput({ ...params, fee: new Percent(0) })\n}\n\nfunction createQuoteGetter(isExactIn: boolean) {\n const getSwapQuote = isExactIn ? getSwapOutput : getSwapInput\n const applySwap = (\n balances: CurrencyAmount<Currency>[],\n amount: CurrencyAmount<Currency>,\n quote: CurrencyAmount<Currency>,\n ): CurrencyAmount<Currency>[] =>\n balances.map((b) => {\n if (b.currency.equals(amount.currency)) {\n return isExactIn ? b.add(amount) : b.subtract(amount)\n }\n if (b.currency.equals(quote.currency)) {\n return isExactIn ? b.subtract(quote) : b.add(quote)\n }\n return b\n })\n\n return function getQuote(\n params: GetSwapOutputParams,\n ): [CurrencyAmount<Currency>, Pick<GetSwapOutputParams, 'balances' | 'fee' | 'amplifier'>] {\n const { balances, amplifier, fee, amount } = params\n const quote = getSwapQuote(params)\n return [\n quote,\n {\n balances: applySwap(balances, amount, quote),\n amplifier,\n fee,\n },\n ]\n }\n}\n\nexport const getQuoteExactIn = createQuoteGetter(true)\n\nexport const getQuoteExactOut = createQuoteGetter(false)\n","import { Percent } from '@pancakeswap/swap-sdk-core'\n\nexport * from './pools'\n\nexport const ONE_HUNDRED_PERCENT = new Percent('1')\n","import { ChainId } from '@pancakeswap/chains'\n\nimport { StableSwapPool } from '../../types'\nimport { pools as bscPools } from './bsc'\nimport { pools as arbPools } from './arb'\nimport { pools as bscTestnetPools } from './bscTestnet'\n\nexport type StableSwapPoolMap<TChainId extends number> = {\n [chainId in TChainId]: StableSwapPool[]\n}\n\nexport const isStableSwapSupported = (chainId: number | undefined): chainId is StableSupportedChainId => {\n if (!chainId) {\n return false\n }\n return STABLE_SUPPORTED_CHAIN_IDS.includes(chainId)\n}\n\nexport const STABLE_SUPPORTED_CHAIN_IDS = [ChainId.BSC, ChainId.BSC_TESTNET, ChainId.ARBITRUM_ONE] as const\n\nexport type StableSupportedChainId = (typeof STABLE_SUPPORTED_CHAIN_IDS)[number]\n\nexport const STABLE_POOL_MAP = {\n [ChainId.BSC]: bscPools,\n [ChainId.BSC_TESTNET]: bscTestnetPools,\n [ChainId.ARBITRUM_ONE]: arbPools,\n} satisfies StableSwapPoolMap<StableSupportedChainId>\n","import { bscTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'lisUSD-BUSD LP',\n lpAddress: '0xB6040A9F294477dDAdf5543a24E5463B8F2423Ae',\n token: bscTokens.hay,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0x49079D07ef47449aF808A4f36c2a8dEC975594eC',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x36842F8fb99D55477C0Da638aF5ceb6bBf86aA98',\n token: bscTokens.usdt,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0x169F653A54ACD441aB34B73dA9946e2C451787EF',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDC-BUSD LP',\n lpAddress: '0x1A77C359D0019cD8F4d36b7CDf5a88043D801072',\n token: bscTokens.usdc,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0xc2F5B9a3d9138ab2B74d581fC11346219eBf43Fe',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-USDC LP',\n lpAddress: '0xee1bcc9F1692E81A281b3a302a4b67890BA4be76',\n token: bscTokens.usdt,\n quoteToken: bscTokens.usdc,\n stableSwapAddress: '0x3EFebC418efB585248A0D2140cfb87aFcc2C63DD',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'axlUSDC-USDT LP',\n lpAddress: '0x1c7e5a3A72b6D94DE5Ec20812E3e68713978a584',\n token: bscTokens.axlusdc,\n quoteToken: bscTokens.usdt,\n stableSwapAddress: '0x6D8fba276ec6F1EDa2344DA48565AdbCA7e4FFa5',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'WBNB-stkBNB LP',\n lpAddress: '0x9976f5c8BEfDee650226d5571d5F5551e8722b75',\n token: bscTokens.wbnb,\n quoteToken: bscTokens.stkbnb,\n stableSwapAddress: '0x0b03e3d6Ec0c5e5bBf993dED8D947C6fb6eEc18D',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'BNBx-BNB LP',\n lpAddress: '0x92357Ab9003CA881E08e32CDAE59B10B3161b05C',\n token: bscTokens.bnbx,\n quoteToken: bscTokens.wbnb,\n stableSwapAddress: '0x9c138bE1D76ee4C5162E0fe9D4eEA5542a23D1bD',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'lisUSD-USDT LP',\n lpAddress: '0xB2Aa63f363196caba3154D4187949283F085a488',\n token: bscTokens.hay,\n quoteToken: bscTokens.usdt,\n stableSwapAddress: '0xb1Da7D2C257c5700612BdE35C8d7187dc80d79f1',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0004,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'CAKE-sdCAKE LP',\n lpAddress: '0xB1D54d76E2cB9425Ec9c018538cc531440b55dbB',\n token: bscTokens.cake,\n quoteToken: bscTokens.sdcake,\n stableSwapAddress: '0xb8204D31379A9B317CD61C833406C972F58ecCbC',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.001,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'CAKE-mCAKE LP',\n lpAddress: '0xb9dC6396AcFFD24E0f69Dfd3231fDaeB31514D02',\n token: bscTokens.cake,\n quoteToken: bscTokens.mcake,\n stableSwapAddress: '0xc54d35a8Cfd9f6dAe50945Df27A91C9911A03ab1',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mPENDLE-PENDLE LP',\n lpAddress: '0x183F325b33d190597D80d1B46D865d0250fD9BF2',\n token: bscTokens.mpendle,\n quoteToken: bscTokens.pendle,\n stableSwapAddress: '0xD8CB82059da7215b1a9604E845d49D3e78d0f95A',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mDLP-DLP LP',\n lpAddress: '0xA2915ae3bc8C6C03f59496B6Dd26aa6a4335b788',\n token: bscTokens.mdlp,\n quoteToken: bscTokens.dlp,\n stableSwapAddress: '0x25d0eD3b1cE5aF0F3Ac7da4b39B46FC409bF67e2',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mwBETH-wBETH LP',\n lpAddress: '0x4cBEa76B4A1c42C356B4c52B0314A98313fFE9df',\n token: bscTokens.mwbeth,\n quoteToken: bscTokens.wbeth,\n stableSwapAddress: '0xfF5Ce4846A3708EA9befa6c3Ab145e63f65DC045',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { arbitrumTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'PENDLE-mPENDLE LP',\n lpAddress: '0x1A2329546f11e4fE55b853D98Bba2c4678E3105A',\n token: arbitrumTokens.pendle,\n quoteToken: arbitrumTokens.mpendle,\n stableSwapAddress: '0x73ed25e04Aa673ddf7411441098fC5ae19976CE0',\n infoStableSwapAddress: '0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'DLP-mDLP LP',\n lpAddress: '0x0db5e247ab73FBaE16d9301f2977f974EC0AA336',\n token: arbitrumTokens.dlp,\n quoteToken: arbitrumTokens.mdlp,\n stableSwapAddress: '0xd0f0be815a76eFE677c92b07b39a5e972BAf22bD',\n infoStableSwapAddress: '0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { Token } from '@pancakeswap/swap-sdk-core'\nimport { ChainId } from '@pancakeswap/chains'\nimport { bscTestnetTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nconst mockUSDT = new Token(ChainId.BSC_TESTNET, '0x0fB5D7c73FA349A90392f873a4FA1eCf6a3d0a96', 18, 'USDT', 'MOCK Token')\n\nexport const pools: StableSwapPool[] = [\n // {\n // lpSymbol: 'USDC-BUSD LP',\n // lpAddress: '0xd1742b5eC6798cEB8C791e0ebbEf606A4946f67E',\n // token: bscTestnetTokens.usdc, // coins[0]\n // quoteToken: bscTestnetTokens.busd, // coins[1]\n // stableSwapAddress: '0x1288026D2c5a76A5bfb0730F615131A448f4Ad06',\n // infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n // },\n {\n lpSymbol: 'USDT-WBNB LP',\n lpAddress: '0x4c091Dc4418Bd3353A87488535528FD86954da2c',\n token: mockUSDT, // coins[0]\n quoteToken: bscTestnetTokens.wbnb, // coins[1]\n stableSwapAddress: '0xBcd585Ee8B8Ac8de6b0e45dA32Aa31703036b2a1',\n infoStableSwapAddress: '0x0A548d59D04096Bc01206D58C3D63c478e1e06dB',\n stableLpFee: 0.0004,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x746a7063101E2D3305D1556888ee08193f2B9a07',\n token: mockUSDT, // coins[0]\n quoteToken: bscTestnetTokens.busd, // coins[1]\n stableSwapAddress: '0xE25A1352477f3DB9B3008B31e9b7a07a18f8A9e6',\n infoStableSwapAddress: '0x0A548d59D04096Bc01206D58C3D63c478e1e06dB',\n stableLpFee: 0.0004,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'BUSD-USDC LP',\n lpAddress: '0x7CA885d338462790DD1B5416ebe6bec75ee045a1',\n token: bscTestnetTokens.mockBusd, // coins[0]\n quoteToken: bscTestnetTokens.usdc, // coins[1]\n stableSwapAddress: '0xd5E56CD4c8111643a94Ee084df31F44055a1EC9F',\n infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x9Fa2Ef2C3dF6F903F4b73047311e861C51a11B60',\n token: bscTestnetTokens.usdt, // coins[0]\n quoteToken: bscTestnetTokens.mockBusd, // coins[1]\n stableSwapAddress: '0xc418d68751Cbe0407C8fdd90Cde73cE95b892f39',\n infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { ChainId } from '@pancakeswap/chains'\n\nimport { isStableSwapSupported, STABLE_POOL_MAP, STABLE_SUPPORTED_CHAIN_IDS } from './pools'\nimport { StableSwapPool } from '../../types'\n\nexport function getStableSwapPools(chainId: ChainId): StableSwapPool[] {\n // Stable swap is only supported on BSC chain & BSC testnet\n if (!isStableSwapSupported(chainId)) {\n return []\n }\n return STABLE_POOL_MAP[chainId] || []\n}\n\nexport { isStableSwapSupported, STABLE_SUPPORTED_CHAIN_IDS }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/amm/getLPOutputWithoutFee.ts","../src/amm/getLPOutput.ts","../src/amm/amm.ts","../src/amm/utils.ts","../src/amm/getSwapOutput.ts","../src/constants/index.ts","../src/constants/pools/pools.ts","../src/constants/pools/bsc.ts","../src/constants/pools/arb.ts","../src/constants/pools/bscTestnet.ts","../src/constants/pools/eth.ts","../src/constants/pools/index.ts"],"names":["Percent","CurrencyAmount","ZERO","invariant","b","ChainId","pools","y","dy","amountOut"],"mappings":"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","sourcesContent":["import { CurrencyAmount, Currency, Percent } from '@pancakeswap/swap-sdk-core'\n\nimport { getLPOutput, GetLPOutputParams } from './getLPOutput'\n\nexport function getLPOutputWithoutFee(params: Omit<GetLPOutputParams, 'fee'>): CurrencyAmount<Currency> {\n return getLPOutput({ ...params, fee: new Percent(0) })\n}\n","import { BigintIsh, CurrencyAmount, Currency, ZERO, Percent } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\nimport { getD } from './amm'\nimport { getRawAmount } from './utils'\n\nexport interface GetLPOutputParams {\n amplifier: BigintIsh\n // Token balances of the stable pool\n balances: CurrencyAmount<Currency>[]\n // User input amounts\n amounts: CurrencyAmount<Currency>[]\n // Total supply of LP token\n totalSupply: CurrencyAmount<Currency>\n // Fee of adding liquidity\n fee: Percent\n}\n\nexport function getLPOutput({\n amplifier,\n balances,\n totalSupply,\n amounts,\n fee,\n}: GetLPOutputParams): CurrencyAmount<Currency> {\n const lpToken = totalSupply.currency\n const lpTotalSupply = totalSupply.quotient\n // No liquidity in pool\n if (lpTotalSupply === ZERO || !balances.length || balances.every((b) => b.quotient === ZERO)) {\n const d = getD({ amplifier, balances: amounts.map(getRawAmount) })\n return CurrencyAmount.fromRawAmount(lpToken, d)\n }\n\n const currentBalances: bigint[] = []\n const newBalances: bigint[] = []\n for (const [i, balance] of balances.entries()) {\n const amount = amounts[i] || CurrencyAmount.fromRawAmount(balance.currency, 0)\n invariant(\n amount.currency.wrapped.equals(balance.currency.wrapped),\n 'User input currency should be the same as pool balance currency.',\n )\n const balanceRaw = getRawAmount(balance)\n const amountRaw = getRawAmount(amount)\n currentBalances.push(balanceRaw)\n newBalances.push(balanceRaw + amountRaw)\n }\n\n const d0 = getD({ amplifier, balances: currentBalances })\n const d1 = getD({ amplifier, balances: newBalances })\n invariant(d1 >= d0, 'D1 should be greater than or equal than d0.')\n\n const isFirstSupply = lpTotalSupply <= ZERO\n if (isFirstSupply) {\n return CurrencyAmount.fromRawAmount(totalSupply.currency, d1)\n }\n\n const n = currentBalances.length\n const eachTokenFee = fee.multiply(n).divide(4 * (n - 1))\n\n let d2 = d1\n for (const [i, b] of currentBalances.entries()) {\n const idealBalance = (d1 * b) / d0\n let diff = ZERO\n if (idealBalance > newBalances[i]) {\n diff = idealBalance - newBalances[i]\n } else {\n diff = newBalances[i] - idealBalance\n }\n const feeAmount = eachTokenFee.multiply(diff).quotient\n // eslint-disable-next-line operator-assignment\n newBalances[i] = newBalances[i] - feeAmount\n }\n d2 = getD({ amplifier, balances: newBalances })\n\n const expectedMintLP = (lpTotalSupply * (d2 - d0)) / d0\n return CurrencyAmount.fromRawAmount(totalSupply.currency, expectedMintLP)\n}\n","import { BigintIsh, ZERO, ONE } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\ninterface Params {\n amplifier: BigintIsh\n balances: BigintIsh[]\n}\n\n/**\n * Calculate the constant D of Curve AMM formula\n * @see https://classic.curve.fi/files/stableswap-paper.pdf\n */\nexport function getD({ amplifier, balances }: Params): bigint {\n const numOfCoins = balances.length\n invariant(numOfCoins > 1, 'To get constant D, pool should have at least two coins.')\n\n const sum = balances.reduce<bigint>((s, cur) => s + BigInt(cur), ZERO)\n if (sum === ZERO) {\n return ZERO\n }\n\n const n = BigInt(numOfCoins)\n // Equality with the precision of 1\n const precision = ONE\n // The amplifier is actually An^n-1, so we only times n here\n const ann = BigInt(amplifier) * n\n let dPrev = ZERO\n let d = sum\n for (let i = 0; i < 255; i += 1) {\n let dp = d\n for (const b of balances) {\n dp = (dp * d) / (BigInt(b) * n + 1n)\n }\n dPrev = d\n d = ((ann * sum + dp * n) * d) / ((ann - ONE) * d + (n + ONE) * dp)\n\n if (d > dPrev && d - dPrev <= precision) {\n break\n }\n\n if (d <= dPrev && dPrev - d <= precision) {\n break\n }\n }\n\n return d\n}\n\ninterface GetYParams {\n amplifier: BigintIsh\n balances: BigintIsh[]\n // The index of the base token\n i: number\n // The index of the swap target token\n j: number\n // The amount of token i that user deposit\n x: BigintIsh\n}\n\n/**\n * Calculate the expected token amount y after user deposit\n * @see https://classic.curve.fi/files/stableswap-paper.pdf\n */\nexport function getY({ amplifier, balances, i, j, x }: GetYParams): bigint {\n const numOfCoins = balances.length\n invariant(numOfCoins > 1, 'To get y, pool should have at least two coins.')\n invariant(i !== j && i >= 0 && j >= 0 && i < numOfCoins && j < numOfCoins, `Invalid i: ${i} and j: ${j}`)\n\n const n = BigInt(numOfCoins)\n const d = getD({ amplifier, balances })\n let sum = ZERO\n let c = d\n // The amplifier is actually An^n-1, so we only times n here\n const ann = BigInt(amplifier) * n\n for (const [index, b] of balances.entries()) {\n if (index === j) {\n // eslint-disable-next-line no-continue\n continue\n }\n let balanceAfterDeposit = BigInt(b)\n if (index === i) {\n balanceAfterDeposit += BigInt(x)\n }\n\n invariant(balanceAfterDeposit > ZERO, 'Insufficient liquidity')\n\n sum += balanceAfterDeposit\n c = (c * d) / (balanceAfterDeposit * n)\n }\n c = (c * d) / (ann * n)\n const b = sum + d / ann\n\n // Equality with the precision of 1\n const precision = ONE\n let yPrev = ZERO\n let y = d\n for (let k = 0; k < 255; k += 1) {\n yPrev = y\n y = (y * y + c) / (2n * y + b - d)\n\n if (y > yPrev && y - yPrev <= precision) {\n break\n }\n\n if (y <= yPrev && yPrev - y <= precision) {\n break\n }\n }\n\n return y\n}\n","import { CurrencyAmount, Currency } from '@pancakeswap/swap-sdk-core'\n\nconst PRECISION = 10n ** 18n\n\nexport const getRawAmount = (amount: CurrencyAmount<Currency>) => {\n return (amount.quotient * PRECISION) / 10n ** BigInt(amount.currency.decimals)\n}\n\nexport const parseAmount = (currency: Currency, rawAmount: bigint) => {\n return CurrencyAmount.fromRawAmount(currency, (rawAmount * 10n ** BigInt(currency.decimals)) / PRECISION)\n}\n","import { BigintIsh, CurrencyAmount, Currency, Percent, ZERO } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\nimport { getY } from './amm'\nimport { getRawAmount, parseAmount } from './utils'\nimport { ONE_HUNDRED_PERCENT } from '../constants'\n\nexport interface GetSwapOutputParams {\n amplifier: BigintIsh\n // Token balances of the stable pool\n balances: CurrencyAmount<Currency>[]\n // User input amount\n amount: CurrencyAmount<Currency>\n // The currency user want to swap to\n outputCurrency: Currency\n // Fee of swapping\n fee: Percent\n}\n\nexport function getSwapOutput({\n amplifier,\n balances: balanceAmounts,\n outputCurrency,\n amount,\n fee,\n}: GetSwapOutputParams): CurrencyAmount<Currency> {\n const validateAmountOut = (a: CurrencyAmount<Currency>) =>\n invariant(!a.lessThan(ZERO), 'Insufficient liquidity to perform the swap')\n\n let i: number | null = null\n let j: number | null = null\n const balances: bigint[] = []\n for (const [index, b] of balanceAmounts.entries()) {\n balances.push(getRawAmount(b))\n if (b.currency.wrapped.equals(amount.currency.wrapped)) {\n i = index\n // eslint-disable-next-line no-continue\n continue\n }\n if (b.currency.wrapped.equals(outputCurrency.wrapped)) {\n j = index\n // eslint-disable-next-line no-continue\n continue\n }\n }\n\n invariant(\n i !== null && j !== null && i !== j,\n 'Input currency or output currency does not match currencies of token balances.',\n )\n\n // Exact output\n if (amount.quotient < ZERO) {\n const x = ONE_HUNDRED_PERCENT.subtract(fee).invert().multiply(getRawAmount(amount)).quotient\n const y = getY({ amplifier, balances, i, j, x })\n const dy = y - balances[j]\n const amountOut = parseAmount(outputCurrency, dy)\n validateAmountOut(amountOut)\n return amountOut\n }\n\n const y = getY({ amplifier, balances, i, j, x: getRawAmount(amount) })\n const dy = balances[j] - y\n const feeAmount = fee.multiply(dy).quotient\n const amountOut = parseAmount(outputCurrency, dy - feeAmount)\n validateAmountOut(amountOut)\n return amountOut\n}\n\nexport function getSwapOutputWithoutFee(params: Omit<GetSwapOutputParams, 'fee'>): CurrencyAmount<Currency> {\n return getSwapOutput({ ...params, fee: new Percent(0) })\n}\n\nexport function getSwapInput({ amount, ...rest }: GetSwapOutputParams) {\n return getSwapOutput({\n ...rest,\n amount: CurrencyAmount.fromRawAmount(amount.currency, -amount.quotient),\n })\n}\n\nexport function getSwapInputWithtouFee(params: Omit<GetSwapOutputParams, 'fee'>) {\n return getSwapInput({ ...params, fee: new Percent(0) })\n}\n\nfunction createQuoteGetter(isExactIn: boolean) {\n const getSwapQuote = isExactIn ? getSwapOutput : getSwapInput\n const applySwap = (\n balances: CurrencyAmount<Currency>[],\n amount: CurrencyAmount<Currency>,\n quote: CurrencyAmount<Currency>,\n ): CurrencyAmount<Currency>[] =>\n balances.map((b) => {\n if (b.currency.equals(amount.currency)) {\n return isExactIn ? b.add(amount) : b.subtract(amount)\n }\n if (b.currency.equals(quote.currency)) {\n return isExactIn ? b.subtract(quote) : b.add(quote)\n }\n return b\n })\n\n return function getQuote(\n params: GetSwapOutputParams,\n ): [CurrencyAmount<Currency>, Pick<GetSwapOutputParams, 'balances' | 'fee' | 'amplifier'>] {\n const { balances, amplifier, fee, amount } = params\n const quote = getSwapQuote(params)\n return [\n quote,\n {\n balances: applySwap(balances, amount, quote),\n amplifier,\n fee,\n },\n ]\n }\n}\n\nexport const getQuoteExactIn = createQuoteGetter(true)\n\nexport const getQuoteExactOut = createQuoteGetter(false)\n","import { Percent } from '@pancakeswap/swap-sdk-core'\n\nexport * from './pools'\n\nexport const ONE_HUNDRED_PERCENT = new Percent('1')\n","import { ChainId } from '@pancakeswap/chains'\n\nimport { StableSwapPool } from '../../types'\nimport { pools as bscPools } from './bsc'\nimport { pools as arbPools } from './arb'\nimport { pools as bscTestnetPools } from './bscTestnet'\nimport { pools as ethPools } from './eth'\n\nexport type StableSwapPoolMap<TChainId extends number> = {\n [chainId in TChainId]: StableSwapPool[]\n}\n\nexport const isStableSwapSupported = (chainId: number | undefined): chainId is StableSupportedChainId => {\n if (!chainId) {\n return false\n }\n return STABLE_SUPPORTED_CHAIN_IDS.includes(chainId)\n}\n\nexport const STABLE_SUPPORTED_CHAIN_IDS = [\n ChainId.BSC,\n ChainId.BSC_TESTNET,\n ChainId.ARBITRUM_ONE,\n ChainId.ETHEREUM,\n] as const\n\nexport type StableSupportedChainId = (typeof STABLE_SUPPORTED_CHAIN_IDS)[number]\n\nexport const STABLE_POOL_MAP = {\n [ChainId.BSC]: bscPools,\n [ChainId.BSC_TESTNET]: bscTestnetPools,\n [ChainId.ARBITRUM_ONE]: arbPools,\n [ChainId.ETHEREUM]: ethPools,\n} satisfies StableSwapPoolMap<StableSupportedChainId>\n","import { bscTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'lisUSD-BUSD LP',\n lpAddress: '0xB6040A9F294477dDAdf5543a24E5463B8F2423Ae',\n token: bscTokens.hay,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0x49079D07ef47449aF808A4f36c2a8dEC975594eC',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x36842F8fb99D55477C0Da638aF5ceb6bBf86aA98',\n token: bscTokens.usdt,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0x169F653A54ACD441aB34B73dA9946e2C451787EF',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableTotalFee: 0.0001,\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDC-BUSD LP',\n lpAddress: '0x1A77C359D0019cD8F4d36b7CDf5a88043D801072',\n token: bscTokens.usdc,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0xc2F5B9a3d9138ab2B74d581fC11346219eBf43Fe',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableTotalFee: 0.0001,\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-USDC LP',\n lpAddress: '0xee1bcc9F1692E81A281b3a302a4b67890BA4be76',\n token: bscTokens.usdt,\n quoteToken: bscTokens.usdc,\n stableSwapAddress: '0x3EFebC418efB585248A0D2140cfb87aFcc2C63DD',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableTotalFee: 0.0001,\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'axlUSDC-USDT LP',\n lpAddress: '0x1c7e5a3A72b6D94DE5Ec20812E3e68713978a584',\n token: bscTokens.axlusdc,\n quoteToken: bscTokens.usdt,\n stableSwapAddress: '0x6D8fba276ec6F1EDa2344DA48565AdbCA7e4FFa5',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'WBNB-stkBNB LP',\n lpAddress: '0x9976f5c8BEfDee650226d5571d5F5551e8722b75',\n token: bscTokens.wbnb,\n quoteToken: bscTokens.stkbnb,\n stableSwapAddress: '0x0b03e3d6Ec0c5e5bBf993dED8D947C6fb6eEc18D',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'BNBx-BNB LP',\n lpAddress: '0x92357Ab9003CA881E08e32CDAE59B10B3161b05C',\n token: bscTokens.bnbx,\n quoteToken: bscTokens.wbnb,\n stableSwapAddress: '0x9c138bE1D76ee4C5162E0fe9D4eEA5542a23D1bD',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'lisUSD-USDT LP',\n lpAddress: '0xB2Aa63f363196caba3154D4187949283F085a488',\n token: bscTokens.hay,\n quoteToken: bscTokens.usdt,\n stableSwapAddress: '0xb1Da7D2C257c5700612BdE35C8d7187dc80d79f1',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'CAKE-sdCAKE LP',\n lpAddress: '0xB1D54d76E2cB9425Ec9c018538cc531440b55dbB',\n token: bscTokens.cake,\n quoteToken: bscTokens.sdcake,\n stableSwapAddress: '0xb8204D31379A9B317CD61C833406C972F58ecCbC',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.001,\n stableLpFee: 0.0005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'CAKE-mCAKE LP',\n lpAddress: '0xb9dC6396AcFFD24E0f69Dfd3231fDaeB31514D02',\n token: bscTokens.cake,\n quoteToken: bscTokens.mcake,\n stableSwapAddress: '0xc54d35a8Cfd9f6dAe50945Df27A91C9911A03ab1',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.005,\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mPENDLE-PENDLE LP',\n lpAddress: '0x183F325b33d190597D80d1B46D865d0250fD9BF2',\n token: bscTokens.mpendle,\n quoteToken: bscTokens.pendle,\n stableSwapAddress: '0xD8CB82059da7215b1a9604E845d49D3e78d0f95A',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mDLP-DLP LP',\n lpAddress: '0xA2915ae3bc8C6C03f59496B6Dd26aa6a4335b788',\n token: bscTokens.mdlp,\n quoteToken: bscTokens.dlp,\n stableSwapAddress: '0x25d0eD3b1cE5aF0F3Ac7da4b39B46FC409bF67e2',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mwBETH-wBETH LP',\n lpAddress: '0x4cBEa76B4A1c42C356B4c52B0314A98313fFE9df',\n token: bscTokens.mwbeth,\n quoteToken: bscTokens.wbeth,\n stableSwapAddress: '0xfF5Ce4846A3708EA9befa6c3Ab145e63f65DC045',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0002,\n stableLpFee: 0.0001,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BITU LP',\n lpAddress: '0x00020c0235677c9D66CE1E20A8FD4a2526d58CDb',\n token: bscTokens.usdt,\n quoteToken: bscTokens.bitu,\n stableSwapAddress: '0x469F3B14FA289c960d272D4159eD005cFFC8D09D',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { arbitrumTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'PENDLE-mPENDLE LP',\n lpAddress: '0x1A2329546f11e4fE55b853D98Bba2c4678E3105A',\n token: arbitrumTokens.pendle,\n quoteToken: arbitrumTokens.mpendle,\n stableSwapAddress: '0x73ed25e04Aa673ddf7411441098fC5ae19976CE0',\n infoStableSwapAddress: '0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0',\n stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'DLP-mDLP LP',\n lpAddress: '0x0db5e247ab73FBaE16d9301f2977f974EC0AA336',\n token: arbitrumTokens.dlp,\n quoteToken: arbitrumTokens.mdlp,\n stableSwapAddress: '0xd0f0be815a76eFE677c92b07b39a5e972BAf22bD',\n infoStableSwapAddress: '0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0',\n stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { ChainId } from '@pancakeswap/chains'\nimport { Token } from '@pancakeswap/swap-sdk-core'\nimport { bscTestnetTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nconst mockUSDT = new Token(ChainId.BSC_TESTNET, '0x0fB5D7c73FA349A90392f873a4FA1eCf6a3d0a96', 18, 'USDT', 'MOCK Token')\n\nexport const pools: StableSwapPool[] = [\n // {\n // lpSymbol: 'USDC-BUSD LP',\n // lpAddress: '0xd1742b5eC6798cEB8C791e0ebbEf606A4946f67E',\n // token: bscTestnetTokens.usdc, // coins[0]\n // quoteToken: bscTestnetTokens.busd, // coins[1]\n // stableSwapAddress: '0x1288026D2c5a76A5bfb0730F615131A448f4Ad06',\n // infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n // },\n {\n lpSymbol: 'USDT-WBNB LP',\n lpAddress: '0x4c091Dc4418Bd3353A87488535528FD86954da2c',\n token: mockUSDT, // coins[0]\n quoteToken: bscTestnetTokens.wbnb, // coins[1]\n stableSwapAddress: '0xBcd585Ee8B8Ac8de6b0e45dA32Aa31703036b2a1',\n infoStableSwapAddress: '0x0A548d59D04096Bc01206D58C3D63c478e1e06dB',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x746a7063101E2D3305D1556888ee08193f2B9a07',\n token: mockUSDT, // coins[0]\n quoteToken: bscTestnetTokens.busd, // coins[1]\n stableSwapAddress: '0xE25A1352477f3DB9B3008B31e9b7a07a18f8A9e6',\n infoStableSwapAddress: '0x0A548d59D04096Bc01206D58C3D63c478e1e06dB',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'BUSD-USDC LP',\n lpAddress: '0x7CA885d338462790DD1B5416ebe6bec75ee045a1',\n token: bscTestnetTokens.mockBusd, // coins[0]\n quoteToken: bscTestnetTokens.usdc, // coins[1]\n stableSwapAddress: '0xd5E56CD4c8111643a94Ee084df31F44055a1EC9F',\n infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n stableTotalFee: 0.0015,\n stableLpFee: 0.00075,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x9Fa2Ef2C3dF6F903F4b73047311e861C51a11B60',\n token: bscTestnetTokens.usdt, // coins[0]\n quoteToken: bscTestnetTokens.mockBusd, // coins[1]\n stableSwapAddress: '0xc418d68751Cbe0407C8fdd90Cde73cE95b892f39',\n infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n stableTotalFee: 0.0015,\n stableLpFee: 0.00075,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { ethereumTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'WBTC-mBTC LP',\n lpAddress: '0xaB9dEBAED21270832cCdf54a7461A8E4B133B57A',\n token: ethereumTokens.wbtc,\n quoteToken: ethereumTokens.mBtc,\n stableSwapAddress: '0x95A3832889B2c3455077991b834efA2d4fA3A945',\n infoStableSwapAddress: '0xCcd9fea6bBF1910F4c188A5BBC13D98Ea4F5f9F9',\n stableTotalFee: 0.0002,\n stableLpFee: 0.0001,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { ChainId } from '@pancakeswap/chains'\n\nimport { isStableSwapSupported, STABLE_POOL_MAP, STABLE_SUPPORTED_CHAIN_IDS } from './pools'\nimport { StableSwapPool } from '../../types'\n\nexport function getStableSwapPools(chainId: ChainId): StableSwapPool[] {\n // Stable swap is only supported on BSC chain & BSC testnet\n if (!isStableSwapSupported(chainId)) {\n return []\n }\n return STABLE_POOL_MAP[chainId] || []\n}\n\nexport { isStableSwapSupported, STABLE_SUPPORTED_CHAIN_IDS }\n"]}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Token, Percent, ZERO, ONE, CurrencyAmount } from '@pancakeswap/swap-sdk-core';
|
|
2
2
|
import invariant from 'tiny-invariant';
|
|
3
3
|
import { ChainId } from '@pancakeswap/chains';
|
|
4
|
-
import { bscTokens, arbitrumTokens, bscTestnetTokens } from '@pancakeswap/tokens';
|
|
4
|
+
import { bscTokens, arbitrumTokens, bscTestnetTokens, ethereumTokens } from '@pancakeswap/tokens';
|
|
5
5
|
|
|
6
6
|
// src/amm/getLPOutputWithoutFee.ts
|
|
7
7
|
function getD({ amplifier, balances }) {
|
|
@@ -143,6 +143,7 @@ var pools = [
|
|
|
143
143
|
quoteToken: bscTokens.busd,
|
|
144
144
|
stableSwapAddress: "0x49079D07ef47449aF808A4f36c2a8dEC975594eC",
|
|
145
145
|
infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
|
|
146
|
+
stableTotalFee: 4e-4,
|
|
146
147
|
stableLpFee: 2e-4,
|
|
147
148
|
stableLpFeeRateOfTotalFee: 0.5
|
|
148
149
|
},
|
|
@@ -153,6 +154,7 @@ var pools = [
|
|
|
153
154
|
quoteToken: bscTokens.busd,
|
|
154
155
|
stableSwapAddress: "0x169F653A54ACD441aB34B73dA9946e2C451787EF",
|
|
155
156
|
infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
|
|
157
|
+
stableTotalFee: 1e-4,
|
|
156
158
|
stableLpFee: 5e-5,
|
|
157
159
|
stableLpFeeRateOfTotalFee: 0.5
|
|
158
160
|
},
|
|
@@ -163,6 +165,7 @@ var pools = [
|
|
|
163
165
|
quoteToken: bscTokens.busd,
|
|
164
166
|
stableSwapAddress: "0xc2F5B9a3d9138ab2B74d581fC11346219eBf43Fe",
|
|
165
167
|
infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
|
|
168
|
+
stableTotalFee: 1e-4,
|
|
166
169
|
stableLpFee: 5e-5,
|
|
167
170
|
stableLpFeeRateOfTotalFee: 0.5
|
|
168
171
|
},
|
|
@@ -173,6 +176,7 @@ var pools = [
|
|
|
173
176
|
quoteToken: bscTokens.usdc,
|
|
174
177
|
stableSwapAddress: "0x3EFebC418efB585248A0D2140cfb87aFcc2C63DD",
|
|
175
178
|
infoStableSwapAddress: "0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6",
|
|
179
|
+
stableTotalFee: 1e-4,
|
|
176
180
|
stableLpFee: 5e-5,
|
|
177
181
|
stableLpFeeRateOfTotalFee: 0.5
|
|
178
182
|
},
|
|
@@ -183,6 +187,7 @@ var pools = [
|
|
|
183
187
|
quoteToken: bscTokens.usdt,
|
|
184
188
|
stableSwapAddress: "0x6D8fba276ec6F1EDa2344DA48565AdbCA7e4FFa5",
|
|
185
189
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
190
|
+
stableTotalFee: 4e-4,
|
|
186
191
|
stableLpFee: 2e-4,
|
|
187
192
|
stableLpFeeRateOfTotalFee: 0.5
|
|
188
193
|
},
|
|
@@ -193,6 +198,7 @@ var pools = [
|
|
|
193
198
|
quoteToken: bscTokens.stkbnb,
|
|
194
199
|
stableSwapAddress: "0x0b03e3d6Ec0c5e5bBf993dED8D947C6fb6eEc18D",
|
|
195
200
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
201
|
+
stableTotalFee: 4e-4,
|
|
196
202
|
stableLpFee: 2e-4,
|
|
197
203
|
stableLpFeeRateOfTotalFee: 0.5
|
|
198
204
|
},
|
|
@@ -203,6 +209,7 @@ var pools = [
|
|
|
203
209
|
quoteToken: bscTokens.wbnb,
|
|
204
210
|
stableSwapAddress: "0x9c138bE1D76ee4C5162E0fe9D4eEA5542a23D1bD",
|
|
205
211
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
212
|
+
stableTotalFee: 4e-4,
|
|
206
213
|
stableLpFee: 2e-4,
|
|
207
214
|
stableLpFeeRateOfTotalFee: 0.5
|
|
208
215
|
},
|
|
@@ -213,7 +220,8 @@ var pools = [
|
|
|
213
220
|
quoteToken: bscTokens.usdt,
|
|
214
221
|
stableSwapAddress: "0xb1Da7D2C257c5700612BdE35C8d7187dc80d79f1",
|
|
215
222
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
216
|
-
|
|
223
|
+
stableTotalFee: 4e-4,
|
|
224
|
+
stableLpFee: 2e-4,
|
|
217
225
|
stableLpFeeRateOfTotalFee: 0.5
|
|
218
226
|
},
|
|
219
227
|
{
|
|
@@ -223,7 +231,8 @@ var pools = [
|
|
|
223
231
|
quoteToken: bscTokens.sdcake,
|
|
224
232
|
stableSwapAddress: "0xb8204D31379A9B317CD61C833406C972F58ecCbC",
|
|
225
233
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
226
|
-
|
|
234
|
+
stableTotalFee: 1e-3,
|
|
235
|
+
stableLpFee: 5e-4,
|
|
227
236
|
stableLpFeeRateOfTotalFee: 0.5
|
|
228
237
|
},
|
|
229
238
|
{
|
|
@@ -233,7 +242,8 @@ var pools = [
|
|
|
233
242
|
quoteToken: bscTokens.mcake,
|
|
234
243
|
stableSwapAddress: "0xc54d35a8Cfd9f6dAe50945Df27A91C9911A03ab1",
|
|
235
244
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
236
|
-
|
|
245
|
+
stableTotalFee: 5e-3,
|
|
246
|
+
stableLpFee: 25e-4,
|
|
237
247
|
stableLpFeeRateOfTotalFee: 0.5
|
|
238
248
|
},
|
|
239
249
|
{
|
|
@@ -243,7 +253,8 @@ var pools = [
|
|
|
243
253
|
quoteToken: bscTokens.pendle,
|
|
244
254
|
stableSwapAddress: "0xD8CB82059da7215b1a9604E845d49D3e78d0f95A",
|
|
245
255
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
246
|
-
|
|
256
|
+
stableTotalFee: 25e-4,
|
|
257
|
+
stableLpFee: 125e-5,
|
|
247
258
|
stableLpFeeRateOfTotalFee: 0.5
|
|
248
259
|
},
|
|
249
260
|
{
|
|
@@ -253,7 +264,8 @@ var pools = [
|
|
|
253
264
|
quoteToken: bscTokens.dlp,
|
|
254
265
|
stableSwapAddress: "0x25d0eD3b1cE5aF0F3Ac7da4b39B46FC409bF67e2",
|
|
255
266
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
256
|
-
|
|
267
|
+
stableTotalFee: 25e-4,
|
|
268
|
+
stableLpFee: 125e-5,
|
|
257
269
|
stableLpFeeRateOfTotalFee: 0.5
|
|
258
270
|
},
|
|
259
271
|
{
|
|
@@ -263,6 +275,18 @@ var pools = [
|
|
|
263
275
|
quoteToken: bscTokens.wbeth,
|
|
264
276
|
stableSwapAddress: "0xfF5Ce4846A3708EA9befa6c3Ab145e63f65DC045",
|
|
265
277
|
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
278
|
+
stableTotalFee: 2e-4,
|
|
279
|
+
stableLpFee: 1e-4,
|
|
280
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
lpSymbol: "USDT-BITU LP",
|
|
284
|
+
lpAddress: "0x00020c0235677c9D66CE1E20A8FD4a2526d58CDb",
|
|
285
|
+
token: bscTokens.usdt,
|
|
286
|
+
quoteToken: bscTokens.bitu,
|
|
287
|
+
stableSwapAddress: "0x469F3B14FA289c960d272D4159eD005cFFC8D09D",
|
|
288
|
+
infoStableSwapAddress: "0x150c8AbEB487137acCC541925408e73b92F39A50",
|
|
289
|
+
stableTotalFee: 4e-4,
|
|
266
290
|
stableLpFee: 2e-4,
|
|
267
291
|
stableLpFeeRateOfTotalFee: 0.5
|
|
268
292
|
}
|
|
@@ -275,7 +299,8 @@ var pools2 = [
|
|
|
275
299
|
quoteToken: arbitrumTokens.mpendle,
|
|
276
300
|
stableSwapAddress: "0x73ed25e04Aa673ddf7411441098fC5ae19976CE0",
|
|
277
301
|
infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
|
|
278
|
-
|
|
302
|
+
stableTotalFee: 25e-4,
|
|
303
|
+
stableLpFee: 125e-5,
|
|
279
304
|
stableLpFeeRateOfTotalFee: 0.5
|
|
280
305
|
},
|
|
281
306
|
{
|
|
@@ -285,7 +310,8 @@ var pools2 = [
|
|
|
285
310
|
quoteToken: arbitrumTokens.mdlp,
|
|
286
311
|
stableSwapAddress: "0xd0f0be815a76eFE677c92b07b39a5e972BAf22bD",
|
|
287
312
|
infoStableSwapAddress: "0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0",
|
|
288
|
-
|
|
313
|
+
stableTotalFee: 25e-4,
|
|
314
|
+
stableLpFee: 125e-5,
|
|
289
315
|
stableLpFeeRateOfTotalFee: 0.5
|
|
290
316
|
}
|
|
291
317
|
];
|
|
@@ -308,7 +334,8 @@ var pools3 = [
|
|
|
308
334
|
// coins[1]
|
|
309
335
|
stableSwapAddress: "0xBcd585Ee8B8Ac8de6b0e45dA32Aa31703036b2a1",
|
|
310
336
|
infoStableSwapAddress: "0x0A548d59D04096Bc01206D58C3D63c478e1e06dB",
|
|
311
|
-
|
|
337
|
+
stableTotalFee: 4e-4,
|
|
338
|
+
stableLpFee: 2e-4,
|
|
312
339
|
stableLpFeeRateOfTotalFee: 0.5
|
|
313
340
|
},
|
|
314
341
|
{
|
|
@@ -320,7 +347,8 @@ var pools3 = [
|
|
|
320
347
|
// coins[1]
|
|
321
348
|
stableSwapAddress: "0xE25A1352477f3DB9B3008B31e9b7a07a18f8A9e6",
|
|
322
349
|
infoStableSwapAddress: "0x0A548d59D04096Bc01206D58C3D63c478e1e06dB",
|
|
323
|
-
|
|
350
|
+
stableTotalFee: 4e-4,
|
|
351
|
+
stableLpFee: 2e-4,
|
|
324
352
|
stableLpFeeRateOfTotalFee: 0.5
|
|
325
353
|
},
|
|
326
354
|
{
|
|
@@ -332,7 +360,8 @@ var pools3 = [
|
|
|
332
360
|
// coins[1]
|
|
333
361
|
stableSwapAddress: "0xd5E56CD4c8111643a94Ee084df31F44055a1EC9F",
|
|
334
362
|
infoStableSwapAddress: "0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546",
|
|
335
|
-
|
|
363
|
+
stableTotalFee: 15e-4,
|
|
364
|
+
stableLpFee: 75e-5,
|
|
336
365
|
stableLpFeeRateOfTotalFee: 0.5
|
|
337
366
|
},
|
|
338
367
|
{
|
|
@@ -344,7 +373,21 @@ var pools3 = [
|
|
|
344
373
|
// coins[1]
|
|
345
374
|
stableSwapAddress: "0xc418d68751Cbe0407C8fdd90Cde73cE95b892f39",
|
|
346
375
|
infoStableSwapAddress: "0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546",
|
|
347
|
-
|
|
376
|
+
stableTotalFee: 15e-4,
|
|
377
|
+
stableLpFee: 75e-5,
|
|
378
|
+
stableLpFeeRateOfTotalFee: 0.5
|
|
379
|
+
}
|
|
380
|
+
];
|
|
381
|
+
var pools4 = [
|
|
382
|
+
{
|
|
383
|
+
lpSymbol: "WBTC-mBTC LP",
|
|
384
|
+
lpAddress: "0xaB9dEBAED21270832cCdf54a7461A8E4B133B57A",
|
|
385
|
+
token: ethereumTokens.wbtc,
|
|
386
|
+
quoteToken: ethereumTokens.mBtc,
|
|
387
|
+
stableSwapAddress: "0x95A3832889B2c3455077991b834efA2d4fA3A945",
|
|
388
|
+
infoStableSwapAddress: "0xCcd9fea6bBF1910F4c188A5BBC13D98Ea4F5f9F9",
|
|
389
|
+
stableTotalFee: 2e-4,
|
|
390
|
+
stableLpFee: 1e-4,
|
|
348
391
|
stableLpFeeRateOfTotalFee: 0.5
|
|
349
392
|
}
|
|
350
393
|
];
|
|
@@ -356,11 +399,17 @@ var isStableSwapSupported = (chainId) => {
|
|
|
356
399
|
}
|
|
357
400
|
return STABLE_SUPPORTED_CHAIN_IDS.includes(chainId);
|
|
358
401
|
};
|
|
359
|
-
var STABLE_SUPPORTED_CHAIN_IDS = [
|
|
402
|
+
var STABLE_SUPPORTED_CHAIN_IDS = [
|
|
403
|
+
ChainId.BSC,
|
|
404
|
+
ChainId.BSC_TESTNET,
|
|
405
|
+
ChainId.ARBITRUM_ONE,
|
|
406
|
+
ChainId.ETHEREUM
|
|
407
|
+
];
|
|
360
408
|
var STABLE_POOL_MAP = {
|
|
361
409
|
[ChainId.BSC]: pools,
|
|
362
410
|
[ChainId.BSC_TESTNET]: pools3,
|
|
363
|
-
[ChainId.ARBITRUM_ONE]: pools2
|
|
411
|
+
[ChainId.ARBITRUM_ONE]: pools2,
|
|
412
|
+
[ChainId.ETHEREUM]: pools4
|
|
364
413
|
};
|
|
365
414
|
|
|
366
415
|
// src/constants/pools/index.ts
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/amm/getLPOutputWithoutFee.ts","../src/amm/getLPOutput.ts","../src/amm/amm.ts","../src/amm/utils.ts","../src/amm/getSwapOutput.ts","../src/constants/index.ts","../src/constants/pools/pools.ts","../src/constants/pools/bsc.ts","../src/constants/pools/arb.ts","../src/constants/pools/bscTestnet.ts","../src/constants/pools/index.ts"],"names":["Percent","CurrencyAmount","ZERO","invariant","b","ChainId","pools","y","dy","amountOut"],"mappings":"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","sourcesContent":["import { CurrencyAmount, Currency, Percent } from '@pancakeswap/swap-sdk-core'\n\nimport { getLPOutput, GetLPOutputParams } from './getLPOutput'\n\nexport function getLPOutputWithoutFee(params: Omit<GetLPOutputParams, 'fee'>): CurrencyAmount<Currency> {\n return getLPOutput({ ...params, fee: new Percent(0) })\n}\n","import { BigintIsh, CurrencyAmount, Currency, ZERO, Percent } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\nimport { getD } from './amm'\nimport { getRawAmount } from './utils'\n\nexport interface GetLPOutputParams {\n amplifier: BigintIsh\n // Token balances of the stable pool\n balances: CurrencyAmount<Currency>[]\n // User input amounts\n amounts: CurrencyAmount<Currency>[]\n // Total supply of LP token\n totalSupply: CurrencyAmount<Currency>\n // Fee of adding liquidity\n fee: Percent\n}\n\nexport function getLPOutput({\n amplifier,\n balances,\n totalSupply,\n amounts,\n fee,\n}: GetLPOutputParams): CurrencyAmount<Currency> {\n const lpToken = totalSupply.currency\n const lpTotalSupply = totalSupply.quotient\n // No liquidity in pool\n if (lpTotalSupply === ZERO || !balances.length || balances.every((b) => b.quotient === ZERO)) {\n const d = getD({ amplifier, balances: amounts.map(getRawAmount) })\n return CurrencyAmount.fromRawAmount(lpToken, d)\n }\n\n const currentBalances: bigint[] = []\n const newBalances: bigint[] = []\n for (const [i, balance] of balances.entries()) {\n const amount = amounts[i] || CurrencyAmount.fromRawAmount(balance.currency, 0)\n invariant(\n amount.currency.wrapped.equals(balance.currency.wrapped),\n 'User input currency should be the same as pool balance currency.',\n )\n const balanceRaw = getRawAmount(balance)\n const amountRaw = getRawAmount(amount)\n currentBalances.push(balanceRaw)\n newBalances.push(balanceRaw + amountRaw)\n }\n\n const d0 = getD({ amplifier, balances: currentBalances })\n const d1 = getD({ amplifier, balances: newBalances })\n invariant(d1 >= d0, 'D1 should be greater than or equal than d0.')\n\n const isFirstSupply = lpTotalSupply <= ZERO\n if (isFirstSupply) {\n return CurrencyAmount.fromRawAmount(totalSupply.currency, d1)\n }\n\n const n = currentBalances.length\n const eachTokenFee = fee.multiply(n).divide(4 * (n - 1))\n\n let d2 = d1\n for (const [i, b] of currentBalances.entries()) {\n const idealBalance = (d1 * b) / d0\n let diff = ZERO\n if (idealBalance > newBalances[i]) {\n diff = idealBalance - newBalances[i]\n } else {\n diff = newBalances[i] - idealBalance\n }\n const feeAmount = eachTokenFee.multiply(diff).quotient\n // eslint-disable-next-line operator-assignment\n newBalances[i] = newBalances[i] - feeAmount\n }\n d2 = getD({ amplifier, balances: newBalances })\n\n const expectedMintLP = (lpTotalSupply * (d2 - d0)) / d0\n return CurrencyAmount.fromRawAmount(totalSupply.currency, expectedMintLP)\n}\n","import { BigintIsh, ZERO, ONE } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\ninterface Params {\n amplifier: BigintIsh\n balances: BigintIsh[]\n}\n\n/**\n * Calculate the constant D of Curve AMM formula\n * @see https://classic.curve.fi/files/stableswap-paper.pdf\n */\nexport function getD({ amplifier, balances }: Params): bigint {\n const numOfCoins = balances.length\n invariant(numOfCoins > 1, 'To get constant D, pool should have at least two coins.')\n\n const sum = balances.reduce<bigint>((s, cur) => s + BigInt(cur), ZERO)\n if (sum === ZERO) {\n return ZERO\n }\n\n const n = BigInt(numOfCoins)\n // Equality with the precision of 1\n const precision = ONE\n // The amplifier is actually An^n-1, so we only times n here\n const ann = BigInt(amplifier) * n\n let dPrev = ZERO\n let d = sum\n for (let i = 0; i < 255; i += 1) {\n let dp = d\n for (const b of balances) {\n dp = (dp * d) / (BigInt(b) * n + 1n)\n }\n dPrev = d\n d = ((ann * sum + dp * n) * d) / ((ann - ONE) * d + (n + ONE) * dp)\n\n if (d > dPrev && d - dPrev <= precision) {\n break\n }\n\n if (d <= dPrev && dPrev - d <= precision) {\n break\n }\n }\n\n return d\n}\n\ninterface GetYParams {\n amplifier: BigintIsh\n balances: BigintIsh[]\n // The index of the base token\n i: number\n // The index of the swap target token\n j: number\n // The amount of token i that user deposit\n x: BigintIsh\n}\n\n/**\n * Calculate the expected token amount y after user deposit\n * @see https://classic.curve.fi/files/stableswap-paper.pdf\n */\nexport function getY({ amplifier, balances, i, j, x }: GetYParams): bigint {\n const numOfCoins = balances.length\n invariant(numOfCoins > 1, 'To get y, pool should have at least two coins.')\n invariant(i !== j && i >= 0 && j >= 0 && i < numOfCoins && j < numOfCoins, `Invalid i: ${i} and j: ${j}`)\n\n const n = BigInt(numOfCoins)\n const d = getD({ amplifier, balances })\n let sum = ZERO\n let c = d\n // The amplifier is actually An^n-1, so we only times n here\n const ann = BigInt(amplifier) * n\n for (const [index, b] of balances.entries()) {\n if (index === j) {\n // eslint-disable-next-line no-continue\n continue\n }\n let balanceAfterDeposit = BigInt(b)\n if (index === i) {\n balanceAfterDeposit += BigInt(x)\n }\n\n invariant(balanceAfterDeposit > ZERO, 'Insufficient liquidity')\n\n sum += balanceAfterDeposit\n c = (c * d) / (balanceAfterDeposit * n)\n }\n c = (c * d) / (ann * n)\n const b = sum + d / ann\n\n // Equality with the precision of 1\n const precision = ONE\n let yPrev = ZERO\n let y = d\n for (let k = 0; k < 255; k += 1) {\n yPrev = y\n y = (y * y + c) / (2n * y + b - d)\n\n if (y > yPrev && y - yPrev <= precision) {\n break\n }\n\n if (y <= yPrev && yPrev - y <= precision) {\n break\n }\n }\n\n return y\n}\n","import { CurrencyAmount, Currency } from '@pancakeswap/swap-sdk-core'\n\nconst PRECISION = 10n ** 18n\n\nexport const getRawAmount = (amount: CurrencyAmount<Currency>) => {\n return (amount.quotient * PRECISION) / 10n ** BigInt(amount.currency.decimals)\n}\n\nexport const parseAmount = (currency: Currency, rawAmount: bigint) => {\n return CurrencyAmount.fromRawAmount(currency, (rawAmount * 10n ** BigInt(currency.decimals)) / PRECISION)\n}\n","import { BigintIsh, CurrencyAmount, Currency, Percent, ZERO } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\nimport { getY } from './amm'\nimport { getRawAmount, parseAmount } from './utils'\nimport { ONE_HUNDRED_PERCENT } from '../constants'\n\nexport interface GetSwapOutputParams {\n amplifier: BigintIsh\n // Token balances of the stable pool\n balances: CurrencyAmount<Currency>[]\n // User input amount\n amount: CurrencyAmount<Currency>\n // The currency user want to swap to\n outputCurrency: Currency\n // Fee of swapping\n fee: Percent\n}\n\nexport function getSwapOutput({\n amplifier,\n balances: balanceAmounts,\n outputCurrency,\n amount,\n fee,\n}: GetSwapOutputParams): CurrencyAmount<Currency> {\n const validateAmountOut = (a: CurrencyAmount<Currency>) =>\n invariant(!a.lessThan(ZERO), 'Insufficient liquidity to perform the swap')\n\n let i: number | null = null\n let j: number | null = null\n const balances: bigint[] = []\n for (const [index, b] of balanceAmounts.entries()) {\n balances.push(getRawAmount(b))\n if (b.currency.wrapped.equals(amount.currency.wrapped)) {\n i = index\n // eslint-disable-next-line no-continue\n continue\n }\n if (b.currency.wrapped.equals(outputCurrency.wrapped)) {\n j = index\n // eslint-disable-next-line no-continue\n continue\n }\n }\n\n invariant(\n i !== null && j !== null && i !== j,\n 'Input currency or output currency does not match currencies of token balances.',\n )\n\n // Exact output\n if (amount.quotient < ZERO) {\n const x = ONE_HUNDRED_PERCENT.subtract(fee).invert().multiply(getRawAmount(amount)).quotient\n const y = getY({ amplifier, balances, i, j, x })\n const dy = y - balances[j]\n const amountOut = parseAmount(outputCurrency, dy)\n validateAmountOut(amountOut)\n return amountOut\n }\n\n const y = getY({ amplifier, balances, i, j, x: getRawAmount(amount) })\n const dy = balances[j] - y\n const feeAmount = fee.multiply(dy).quotient\n const amountOut = parseAmount(outputCurrency, dy - feeAmount)\n validateAmountOut(amountOut)\n return amountOut\n}\n\nexport function getSwapOutputWithoutFee(params: Omit<GetSwapOutputParams, 'fee'>): CurrencyAmount<Currency> {\n return getSwapOutput({ ...params, fee: new Percent(0) })\n}\n\nexport function getSwapInput({ amount, ...rest }: GetSwapOutputParams) {\n return getSwapOutput({\n ...rest,\n amount: CurrencyAmount.fromRawAmount(amount.currency, -amount.quotient),\n })\n}\n\nexport function getSwapInputWithtouFee(params: Omit<GetSwapOutputParams, 'fee'>) {\n return getSwapInput({ ...params, fee: new Percent(0) })\n}\n\nfunction createQuoteGetter(isExactIn: boolean) {\n const getSwapQuote = isExactIn ? getSwapOutput : getSwapInput\n const applySwap = (\n balances: CurrencyAmount<Currency>[],\n amount: CurrencyAmount<Currency>,\n quote: CurrencyAmount<Currency>,\n ): CurrencyAmount<Currency>[] =>\n balances.map((b) => {\n if (b.currency.equals(amount.currency)) {\n return isExactIn ? b.add(amount) : b.subtract(amount)\n }\n if (b.currency.equals(quote.currency)) {\n return isExactIn ? b.subtract(quote) : b.add(quote)\n }\n return b\n })\n\n return function getQuote(\n params: GetSwapOutputParams,\n ): [CurrencyAmount<Currency>, Pick<GetSwapOutputParams, 'balances' | 'fee' | 'amplifier'>] {\n const { balances, amplifier, fee, amount } = params\n const quote = getSwapQuote(params)\n return [\n quote,\n {\n balances: applySwap(balances, amount, quote),\n amplifier,\n fee,\n },\n ]\n }\n}\n\nexport const getQuoteExactIn = createQuoteGetter(true)\n\nexport const getQuoteExactOut = createQuoteGetter(false)\n","import { Percent } from '@pancakeswap/swap-sdk-core'\n\nexport * from './pools'\n\nexport const ONE_HUNDRED_PERCENT = new Percent('1')\n","import { ChainId } from '@pancakeswap/chains'\n\nimport { StableSwapPool } from '../../types'\nimport { pools as bscPools } from './bsc'\nimport { pools as arbPools } from './arb'\nimport { pools as bscTestnetPools } from './bscTestnet'\n\nexport type StableSwapPoolMap<TChainId extends number> = {\n [chainId in TChainId]: StableSwapPool[]\n}\n\nexport const isStableSwapSupported = (chainId: number | undefined): chainId is StableSupportedChainId => {\n if (!chainId) {\n return false\n }\n return STABLE_SUPPORTED_CHAIN_IDS.includes(chainId)\n}\n\nexport const STABLE_SUPPORTED_CHAIN_IDS = [ChainId.BSC, ChainId.BSC_TESTNET, ChainId.ARBITRUM_ONE] as const\n\nexport type StableSupportedChainId = (typeof STABLE_SUPPORTED_CHAIN_IDS)[number]\n\nexport const STABLE_POOL_MAP = {\n [ChainId.BSC]: bscPools,\n [ChainId.BSC_TESTNET]: bscTestnetPools,\n [ChainId.ARBITRUM_ONE]: arbPools,\n} satisfies StableSwapPoolMap<StableSupportedChainId>\n","import { bscTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'lisUSD-BUSD LP',\n lpAddress: '0xB6040A9F294477dDAdf5543a24E5463B8F2423Ae',\n token: bscTokens.hay,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0x49079D07ef47449aF808A4f36c2a8dEC975594eC',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x36842F8fb99D55477C0Da638aF5ceb6bBf86aA98',\n token: bscTokens.usdt,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0x169F653A54ACD441aB34B73dA9946e2C451787EF',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDC-BUSD LP',\n lpAddress: '0x1A77C359D0019cD8F4d36b7CDf5a88043D801072',\n token: bscTokens.usdc,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0xc2F5B9a3d9138ab2B74d581fC11346219eBf43Fe',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-USDC LP',\n lpAddress: '0xee1bcc9F1692E81A281b3a302a4b67890BA4be76',\n token: bscTokens.usdt,\n quoteToken: bscTokens.usdc,\n stableSwapAddress: '0x3EFebC418efB585248A0D2140cfb87aFcc2C63DD',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'axlUSDC-USDT LP',\n lpAddress: '0x1c7e5a3A72b6D94DE5Ec20812E3e68713978a584',\n token: bscTokens.axlusdc,\n quoteToken: bscTokens.usdt,\n stableSwapAddress: '0x6D8fba276ec6F1EDa2344DA48565AdbCA7e4FFa5',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'WBNB-stkBNB LP',\n lpAddress: '0x9976f5c8BEfDee650226d5571d5F5551e8722b75',\n token: bscTokens.wbnb,\n quoteToken: bscTokens.stkbnb,\n stableSwapAddress: '0x0b03e3d6Ec0c5e5bBf993dED8D947C6fb6eEc18D',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'BNBx-BNB LP',\n lpAddress: '0x92357Ab9003CA881E08e32CDAE59B10B3161b05C',\n token: bscTokens.bnbx,\n quoteToken: bscTokens.wbnb,\n stableSwapAddress: '0x9c138bE1D76ee4C5162E0fe9D4eEA5542a23D1bD',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'lisUSD-USDT LP',\n lpAddress: '0xB2Aa63f363196caba3154D4187949283F085a488',\n token: bscTokens.hay,\n quoteToken: bscTokens.usdt,\n stableSwapAddress: '0xb1Da7D2C257c5700612BdE35C8d7187dc80d79f1',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0004,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'CAKE-sdCAKE LP',\n lpAddress: '0xB1D54d76E2cB9425Ec9c018538cc531440b55dbB',\n token: bscTokens.cake,\n quoteToken: bscTokens.sdcake,\n stableSwapAddress: '0xb8204D31379A9B317CD61C833406C972F58ecCbC',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.001,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'CAKE-mCAKE LP',\n lpAddress: '0xb9dC6396AcFFD24E0f69Dfd3231fDaeB31514D02',\n token: bscTokens.cake,\n quoteToken: bscTokens.mcake,\n stableSwapAddress: '0xc54d35a8Cfd9f6dAe50945Df27A91C9911A03ab1',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mPENDLE-PENDLE LP',\n lpAddress: '0x183F325b33d190597D80d1B46D865d0250fD9BF2',\n token: bscTokens.mpendle,\n quoteToken: bscTokens.pendle,\n stableSwapAddress: '0xD8CB82059da7215b1a9604E845d49D3e78d0f95A',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mDLP-DLP LP',\n lpAddress: '0xA2915ae3bc8C6C03f59496B6Dd26aa6a4335b788',\n token: bscTokens.mdlp,\n quoteToken: bscTokens.dlp,\n stableSwapAddress: '0x25d0eD3b1cE5aF0F3Ac7da4b39B46FC409bF67e2',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mwBETH-wBETH LP',\n lpAddress: '0x4cBEa76B4A1c42C356B4c52B0314A98313fFE9df',\n token: bscTokens.mwbeth,\n quoteToken: bscTokens.wbeth,\n stableSwapAddress: '0xfF5Ce4846A3708EA9befa6c3Ab145e63f65DC045',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { arbitrumTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'PENDLE-mPENDLE LP',\n lpAddress: '0x1A2329546f11e4fE55b853D98Bba2c4678E3105A',\n token: arbitrumTokens.pendle,\n quoteToken: arbitrumTokens.mpendle,\n stableSwapAddress: '0x73ed25e04Aa673ddf7411441098fC5ae19976CE0',\n infoStableSwapAddress: '0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'DLP-mDLP LP',\n lpAddress: '0x0db5e247ab73FBaE16d9301f2977f974EC0AA336',\n token: arbitrumTokens.dlp,\n quoteToken: arbitrumTokens.mdlp,\n stableSwapAddress: '0xd0f0be815a76eFE677c92b07b39a5e972BAf22bD',\n infoStableSwapAddress: '0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0',\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { Token } from '@pancakeswap/swap-sdk-core'\nimport { ChainId } from '@pancakeswap/chains'\nimport { bscTestnetTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nconst mockUSDT = new Token(ChainId.BSC_TESTNET, '0x0fB5D7c73FA349A90392f873a4FA1eCf6a3d0a96', 18, 'USDT', 'MOCK Token')\n\nexport const pools: StableSwapPool[] = [\n // {\n // lpSymbol: 'USDC-BUSD LP',\n // lpAddress: '0xd1742b5eC6798cEB8C791e0ebbEf606A4946f67E',\n // token: bscTestnetTokens.usdc, // coins[0]\n // quoteToken: bscTestnetTokens.busd, // coins[1]\n // stableSwapAddress: '0x1288026D2c5a76A5bfb0730F615131A448f4Ad06',\n // infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n // },\n {\n lpSymbol: 'USDT-WBNB LP',\n lpAddress: '0x4c091Dc4418Bd3353A87488535528FD86954da2c',\n token: mockUSDT, // coins[0]\n quoteToken: bscTestnetTokens.wbnb, // coins[1]\n stableSwapAddress: '0xBcd585Ee8B8Ac8de6b0e45dA32Aa31703036b2a1',\n infoStableSwapAddress: '0x0A548d59D04096Bc01206D58C3D63c478e1e06dB',\n stableLpFee: 0.0004,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x746a7063101E2D3305D1556888ee08193f2B9a07',\n token: mockUSDT, // coins[0]\n quoteToken: bscTestnetTokens.busd, // coins[1]\n stableSwapAddress: '0xE25A1352477f3DB9B3008B31e9b7a07a18f8A9e6',\n infoStableSwapAddress: '0x0A548d59D04096Bc01206D58C3D63c478e1e06dB',\n stableLpFee: 0.0004,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'BUSD-USDC LP',\n lpAddress: '0x7CA885d338462790DD1B5416ebe6bec75ee045a1',\n token: bscTestnetTokens.mockBusd, // coins[0]\n quoteToken: bscTestnetTokens.usdc, // coins[1]\n stableSwapAddress: '0xd5E56CD4c8111643a94Ee084df31F44055a1EC9F',\n infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x9Fa2Ef2C3dF6F903F4b73047311e861C51a11B60',\n token: bscTestnetTokens.usdt, // coins[0]\n quoteToken: bscTestnetTokens.mockBusd, // coins[1]\n stableSwapAddress: '0xc418d68751Cbe0407C8fdd90Cde73cE95b892f39',\n infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { ChainId } from '@pancakeswap/chains'\n\nimport { isStableSwapSupported, STABLE_POOL_MAP, STABLE_SUPPORTED_CHAIN_IDS } from './pools'\nimport { StableSwapPool } from '../../types'\n\nexport function getStableSwapPools(chainId: ChainId): StableSwapPool[] {\n // Stable swap is only supported on BSC chain & BSC testnet\n if (!isStableSwapSupported(chainId)) {\n return []\n }\n return STABLE_POOL_MAP[chainId] || []\n}\n\nexport { isStableSwapSupported, STABLE_SUPPORTED_CHAIN_IDS }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/amm/getLPOutputWithoutFee.ts","../src/amm/getLPOutput.ts","../src/amm/amm.ts","../src/amm/utils.ts","../src/amm/getSwapOutput.ts","../src/constants/index.ts","../src/constants/pools/pools.ts","../src/constants/pools/bsc.ts","../src/constants/pools/arb.ts","../src/constants/pools/bscTestnet.ts","../src/constants/pools/eth.ts","../src/constants/pools/index.ts"],"names":["Percent","CurrencyAmount","ZERO","invariant","b","ChainId","pools","y","dy","amountOut"],"mappings":"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","sourcesContent":["import { CurrencyAmount, Currency, Percent } from '@pancakeswap/swap-sdk-core'\n\nimport { getLPOutput, GetLPOutputParams } from './getLPOutput'\n\nexport function getLPOutputWithoutFee(params: Omit<GetLPOutputParams, 'fee'>): CurrencyAmount<Currency> {\n return getLPOutput({ ...params, fee: new Percent(0) })\n}\n","import { BigintIsh, CurrencyAmount, Currency, ZERO, Percent } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\nimport { getD } from './amm'\nimport { getRawAmount } from './utils'\n\nexport interface GetLPOutputParams {\n amplifier: BigintIsh\n // Token balances of the stable pool\n balances: CurrencyAmount<Currency>[]\n // User input amounts\n amounts: CurrencyAmount<Currency>[]\n // Total supply of LP token\n totalSupply: CurrencyAmount<Currency>\n // Fee of adding liquidity\n fee: Percent\n}\n\nexport function getLPOutput({\n amplifier,\n balances,\n totalSupply,\n amounts,\n fee,\n}: GetLPOutputParams): CurrencyAmount<Currency> {\n const lpToken = totalSupply.currency\n const lpTotalSupply = totalSupply.quotient\n // No liquidity in pool\n if (lpTotalSupply === ZERO || !balances.length || balances.every((b) => b.quotient === ZERO)) {\n const d = getD({ amplifier, balances: amounts.map(getRawAmount) })\n return CurrencyAmount.fromRawAmount(lpToken, d)\n }\n\n const currentBalances: bigint[] = []\n const newBalances: bigint[] = []\n for (const [i, balance] of balances.entries()) {\n const amount = amounts[i] || CurrencyAmount.fromRawAmount(balance.currency, 0)\n invariant(\n amount.currency.wrapped.equals(balance.currency.wrapped),\n 'User input currency should be the same as pool balance currency.',\n )\n const balanceRaw = getRawAmount(balance)\n const amountRaw = getRawAmount(amount)\n currentBalances.push(balanceRaw)\n newBalances.push(balanceRaw + amountRaw)\n }\n\n const d0 = getD({ amplifier, balances: currentBalances })\n const d1 = getD({ amplifier, balances: newBalances })\n invariant(d1 >= d0, 'D1 should be greater than or equal than d0.')\n\n const isFirstSupply = lpTotalSupply <= ZERO\n if (isFirstSupply) {\n return CurrencyAmount.fromRawAmount(totalSupply.currency, d1)\n }\n\n const n = currentBalances.length\n const eachTokenFee = fee.multiply(n).divide(4 * (n - 1))\n\n let d2 = d1\n for (const [i, b] of currentBalances.entries()) {\n const idealBalance = (d1 * b) / d0\n let diff = ZERO\n if (idealBalance > newBalances[i]) {\n diff = idealBalance - newBalances[i]\n } else {\n diff = newBalances[i] - idealBalance\n }\n const feeAmount = eachTokenFee.multiply(diff).quotient\n // eslint-disable-next-line operator-assignment\n newBalances[i] = newBalances[i] - feeAmount\n }\n d2 = getD({ amplifier, balances: newBalances })\n\n const expectedMintLP = (lpTotalSupply * (d2 - d0)) / d0\n return CurrencyAmount.fromRawAmount(totalSupply.currency, expectedMintLP)\n}\n","import { BigintIsh, ZERO, ONE } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\ninterface Params {\n amplifier: BigintIsh\n balances: BigintIsh[]\n}\n\n/**\n * Calculate the constant D of Curve AMM formula\n * @see https://classic.curve.fi/files/stableswap-paper.pdf\n */\nexport function getD({ amplifier, balances }: Params): bigint {\n const numOfCoins = balances.length\n invariant(numOfCoins > 1, 'To get constant D, pool should have at least two coins.')\n\n const sum = balances.reduce<bigint>((s, cur) => s + BigInt(cur), ZERO)\n if (sum === ZERO) {\n return ZERO\n }\n\n const n = BigInt(numOfCoins)\n // Equality with the precision of 1\n const precision = ONE\n // The amplifier is actually An^n-1, so we only times n here\n const ann = BigInt(amplifier) * n\n let dPrev = ZERO\n let d = sum\n for (let i = 0; i < 255; i += 1) {\n let dp = d\n for (const b of balances) {\n dp = (dp * d) / (BigInt(b) * n + 1n)\n }\n dPrev = d\n d = ((ann * sum + dp * n) * d) / ((ann - ONE) * d + (n + ONE) * dp)\n\n if (d > dPrev && d - dPrev <= precision) {\n break\n }\n\n if (d <= dPrev && dPrev - d <= precision) {\n break\n }\n }\n\n return d\n}\n\ninterface GetYParams {\n amplifier: BigintIsh\n balances: BigintIsh[]\n // The index of the base token\n i: number\n // The index of the swap target token\n j: number\n // The amount of token i that user deposit\n x: BigintIsh\n}\n\n/**\n * Calculate the expected token amount y after user deposit\n * @see https://classic.curve.fi/files/stableswap-paper.pdf\n */\nexport function getY({ amplifier, balances, i, j, x }: GetYParams): bigint {\n const numOfCoins = balances.length\n invariant(numOfCoins > 1, 'To get y, pool should have at least two coins.')\n invariant(i !== j && i >= 0 && j >= 0 && i < numOfCoins && j < numOfCoins, `Invalid i: ${i} and j: ${j}`)\n\n const n = BigInt(numOfCoins)\n const d = getD({ amplifier, balances })\n let sum = ZERO\n let c = d\n // The amplifier is actually An^n-1, so we only times n here\n const ann = BigInt(amplifier) * n\n for (const [index, b] of balances.entries()) {\n if (index === j) {\n // eslint-disable-next-line no-continue\n continue\n }\n let balanceAfterDeposit = BigInt(b)\n if (index === i) {\n balanceAfterDeposit += BigInt(x)\n }\n\n invariant(balanceAfterDeposit > ZERO, 'Insufficient liquidity')\n\n sum += balanceAfterDeposit\n c = (c * d) / (balanceAfterDeposit * n)\n }\n c = (c * d) / (ann * n)\n const b = sum + d / ann\n\n // Equality with the precision of 1\n const precision = ONE\n let yPrev = ZERO\n let y = d\n for (let k = 0; k < 255; k += 1) {\n yPrev = y\n y = (y * y + c) / (2n * y + b - d)\n\n if (y > yPrev && y - yPrev <= precision) {\n break\n }\n\n if (y <= yPrev && yPrev - y <= precision) {\n break\n }\n }\n\n return y\n}\n","import { CurrencyAmount, Currency } from '@pancakeswap/swap-sdk-core'\n\nconst PRECISION = 10n ** 18n\n\nexport const getRawAmount = (amount: CurrencyAmount<Currency>) => {\n return (amount.quotient * PRECISION) / 10n ** BigInt(amount.currency.decimals)\n}\n\nexport const parseAmount = (currency: Currency, rawAmount: bigint) => {\n return CurrencyAmount.fromRawAmount(currency, (rawAmount * 10n ** BigInt(currency.decimals)) / PRECISION)\n}\n","import { BigintIsh, CurrencyAmount, Currency, Percent, ZERO } from '@pancakeswap/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\nimport { getY } from './amm'\nimport { getRawAmount, parseAmount } from './utils'\nimport { ONE_HUNDRED_PERCENT } from '../constants'\n\nexport interface GetSwapOutputParams {\n amplifier: BigintIsh\n // Token balances of the stable pool\n balances: CurrencyAmount<Currency>[]\n // User input amount\n amount: CurrencyAmount<Currency>\n // The currency user want to swap to\n outputCurrency: Currency\n // Fee of swapping\n fee: Percent\n}\n\nexport function getSwapOutput({\n amplifier,\n balances: balanceAmounts,\n outputCurrency,\n amount,\n fee,\n}: GetSwapOutputParams): CurrencyAmount<Currency> {\n const validateAmountOut = (a: CurrencyAmount<Currency>) =>\n invariant(!a.lessThan(ZERO), 'Insufficient liquidity to perform the swap')\n\n let i: number | null = null\n let j: number | null = null\n const balances: bigint[] = []\n for (const [index, b] of balanceAmounts.entries()) {\n balances.push(getRawAmount(b))\n if (b.currency.wrapped.equals(amount.currency.wrapped)) {\n i = index\n // eslint-disable-next-line no-continue\n continue\n }\n if (b.currency.wrapped.equals(outputCurrency.wrapped)) {\n j = index\n // eslint-disable-next-line no-continue\n continue\n }\n }\n\n invariant(\n i !== null && j !== null && i !== j,\n 'Input currency or output currency does not match currencies of token balances.',\n )\n\n // Exact output\n if (amount.quotient < ZERO) {\n const x = ONE_HUNDRED_PERCENT.subtract(fee).invert().multiply(getRawAmount(amount)).quotient\n const y = getY({ amplifier, balances, i, j, x })\n const dy = y - balances[j]\n const amountOut = parseAmount(outputCurrency, dy)\n validateAmountOut(amountOut)\n return amountOut\n }\n\n const y = getY({ amplifier, balances, i, j, x: getRawAmount(amount) })\n const dy = balances[j] - y\n const feeAmount = fee.multiply(dy).quotient\n const amountOut = parseAmount(outputCurrency, dy - feeAmount)\n validateAmountOut(amountOut)\n return amountOut\n}\n\nexport function getSwapOutputWithoutFee(params: Omit<GetSwapOutputParams, 'fee'>): CurrencyAmount<Currency> {\n return getSwapOutput({ ...params, fee: new Percent(0) })\n}\n\nexport function getSwapInput({ amount, ...rest }: GetSwapOutputParams) {\n return getSwapOutput({\n ...rest,\n amount: CurrencyAmount.fromRawAmount(amount.currency, -amount.quotient),\n })\n}\n\nexport function getSwapInputWithtouFee(params: Omit<GetSwapOutputParams, 'fee'>) {\n return getSwapInput({ ...params, fee: new Percent(0) })\n}\n\nfunction createQuoteGetter(isExactIn: boolean) {\n const getSwapQuote = isExactIn ? getSwapOutput : getSwapInput\n const applySwap = (\n balances: CurrencyAmount<Currency>[],\n amount: CurrencyAmount<Currency>,\n quote: CurrencyAmount<Currency>,\n ): CurrencyAmount<Currency>[] =>\n balances.map((b) => {\n if (b.currency.equals(amount.currency)) {\n return isExactIn ? b.add(amount) : b.subtract(amount)\n }\n if (b.currency.equals(quote.currency)) {\n return isExactIn ? b.subtract(quote) : b.add(quote)\n }\n return b\n })\n\n return function getQuote(\n params: GetSwapOutputParams,\n ): [CurrencyAmount<Currency>, Pick<GetSwapOutputParams, 'balances' | 'fee' | 'amplifier'>] {\n const { balances, amplifier, fee, amount } = params\n const quote = getSwapQuote(params)\n return [\n quote,\n {\n balances: applySwap(balances, amount, quote),\n amplifier,\n fee,\n },\n ]\n }\n}\n\nexport const getQuoteExactIn = createQuoteGetter(true)\n\nexport const getQuoteExactOut = createQuoteGetter(false)\n","import { Percent } from '@pancakeswap/swap-sdk-core'\n\nexport * from './pools'\n\nexport const ONE_HUNDRED_PERCENT = new Percent('1')\n","import { ChainId } from '@pancakeswap/chains'\n\nimport { StableSwapPool } from '../../types'\nimport { pools as bscPools } from './bsc'\nimport { pools as arbPools } from './arb'\nimport { pools as bscTestnetPools } from './bscTestnet'\nimport { pools as ethPools } from './eth'\n\nexport type StableSwapPoolMap<TChainId extends number> = {\n [chainId in TChainId]: StableSwapPool[]\n}\n\nexport const isStableSwapSupported = (chainId: number | undefined): chainId is StableSupportedChainId => {\n if (!chainId) {\n return false\n }\n return STABLE_SUPPORTED_CHAIN_IDS.includes(chainId)\n}\n\nexport const STABLE_SUPPORTED_CHAIN_IDS = [\n ChainId.BSC,\n ChainId.BSC_TESTNET,\n ChainId.ARBITRUM_ONE,\n ChainId.ETHEREUM,\n] as const\n\nexport type StableSupportedChainId = (typeof STABLE_SUPPORTED_CHAIN_IDS)[number]\n\nexport const STABLE_POOL_MAP = {\n [ChainId.BSC]: bscPools,\n [ChainId.BSC_TESTNET]: bscTestnetPools,\n [ChainId.ARBITRUM_ONE]: arbPools,\n [ChainId.ETHEREUM]: ethPools,\n} satisfies StableSwapPoolMap<StableSupportedChainId>\n","import { bscTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'lisUSD-BUSD LP',\n lpAddress: '0xB6040A9F294477dDAdf5543a24E5463B8F2423Ae',\n token: bscTokens.hay,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0x49079D07ef47449aF808A4f36c2a8dEC975594eC',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x36842F8fb99D55477C0Da638aF5ceb6bBf86aA98',\n token: bscTokens.usdt,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0x169F653A54ACD441aB34B73dA9946e2C451787EF',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableTotalFee: 0.0001,\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDC-BUSD LP',\n lpAddress: '0x1A77C359D0019cD8F4d36b7CDf5a88043D801072',\n token: bscTokens.usdc,\n quoteToken: bscTokens.busd,\n stableSwapAddress: '0xc2F5B9a3d9138ab2B74d581fC11346219eBf43Fe',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableTotalFee: 0.0001,\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-USDC LP',\n lpAddress: '0xee1bcc9F1692E81A281b3a302a4b67890BA4be76',\n token: bscTokens.usdt,\n quoteToken: bscTokens.usdc,\n stableSwapAddress: '0x3EFebC418efB585248A0D2140cfb87aFcc2C63DD',\n infoStableSwapAddress: '0xa680d27f63Fa5E213C502d1B3Ca1EB6a3C1b31D6',\n stableTotalFee: 0.0001,\n stableLpFee: 0.00005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'axlUSDC-USDT LP',\n lpAddress: '0x1c7e5a3A72b6D94DE5Ec20812E3e68713978a584',\n token: bscTokens.axlusdc,\n quoteToken: bscTokens.usdt,\n stableSwapAddress: '0x6D8fba276ec6F1EDa2344DA48565AdbCA7e4FFa5',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'WBNB-stkBNB LP',\n lpAddress: '0x9976f5c8BEfDee650226d5571d5F5551e8722b75',\n token: bscTokens.wbnb,\n quoteToken: bscTokens.stkbnb,\n stableSwapAddress: '0x0b03e3d6Ec0c5e5bBf993dED8D947C6fb6eEc18D',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'BNBx-BNB LP',\n lpAddress: '0x92357Ab9003CA881E08e32CDAE59B10B3161b05C',\n token: bscTokens.bnbx,\n quoteToken: bscTokens.wbnb,\n stableSwapAddress: '0x9c138bE1D76ee4C5162E0fe9D4eEA5542a23D1bD',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'lisUSD-USDT LP',\n lpAddress: '0xB2Aa63f363196caba3154D4187949283F085a488',\n token: bscTokens.hay,\n quoteToken: bscTokens.usdt,\n stableSwapAddress: '0xb1Da7D2C257c5700612BdE35C8d7187dc80d79f1',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'CAKE-sdCAKE LP',\n lpAddress: '0xB1D54d76E2cB9425Ec9c018538cc531440b55dbB',\n token: bscTokens.cake,\n quoteToken: bscTokens.sdcake,\n stableSwapAddress: '0xb8204D31379A9B317CD61C833406C972F58ecCbC',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.001,\n stableLpFee: 0.0005,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'CAKE-mCAKE LP',\n lpAddress: '0xb9dC6396AcFFD24E0f69Dfd3231fDaeB31514D02',\n token: bscTokens.cake,\n quoteToken: bscTokens.mcake,\n stableSwapAddress: '0xc54d35a8Cfd9f6dAe50945Df27A91C9911A03ab1',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.005,\n stableLpFee: 0.0025,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mPENDLE-PENDLE LP',\n lpAddress: '0x183F325b33d190597D80d1B46D865d0250fD9BF2',\n token: bscTokens.mpendle,\n quoteToken: bscTokens.pendle,\n stableSwapAddress: '0xD8CB82059da7215b1a9604E845d49D3e78d0f95A',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mDLP-DLP LP',\n lpAddress: '0xA2915ae3bc8C6C03f59496B6Dd26aa6a4335b788',\n token: bscTokens.mdlp,\n quoteToken: bscTokens.dlp,\n stableSwapAddress: '0x25d0eD3b1cE5aF0F3Ac7da4b39B46FC409bF67e2',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'mwBETH-wBETH LP',\n lpAddress: '0x4cBEa76B4A1c42C356B4c52B0314A98313fFE9df',\n token: bscTokens.mwbeth,\n quoteToken: bscTokens.wbeth,\n stableSwapAddress: '0xfF5Ce4846A3708EA9befa6c3Ab145e63f65DC045',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0002,\n stableLpFee: 0.0001,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BITU LP',\n lpAddress: '0x00020c0235677c9D66CE1E20A8FD4a2526d58CDb',\n token: bscTokens.usdt,\n quoteToken: bscTokens.bitu,\n stableSwapAddress: '0x469F3B14FA289c960d272D4159eD005cFFC8D09D',\n infoStableSwapAddress: '0x150c8AbEB487137acCC541925408e73b92F39A50',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { arbitrumTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'PENDLE-mPENDLE LP',\n lpAddress: '0x1A2329546f11e4fE55b853D98Bba2c4678E3105A',\n token: arbitrumTokens.pendle,\n quoteToken: arbitrumTokens.mpendle,\n stableSwapAddress: '0x73ed25e04Aa673ddf7411441098fC5ae19976CE0',\n infoStableSwapAddress: '0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0',\n stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'DLP-mDLP LP',\n lpAddress: '0x0db5e247ab73FBaE16d9301f2977f974EC0AA336',\n token: arbitrumTokens.dlp,\n quoteToken: arbitrumTokens.mdlp,\n stableSwapAddress: '0xd0f0be815a76eFE677c92b07b39a5e972BAf22bD',\n infoStableSwapAddress: '0x58B2F00f74a1877510Ec37b22f116Bf5D63Ab1b0',\n stableTotalFee: 0.0025,\n stableLpFee: 0.00125,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { ChainId } from '@pancakeswap/chains'\nimport { Token } from '@pancakeswap/swap-sdk-core'\nimport { bscTestnetTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nconst mockUSDT = new Token(ChainId.BSC_TESTNET, '0x0fB5D7c73FA349A90392f873a4FA1eCf6a3d0a96', 18, 'USDT', 'MOCK Token')\n\nexport const pools: StableSwapPool[] = [\n // {\n // lpSymbol: 'USDC-BUSD LP',\n // lpAddress: '0xd1742b5eC6798cEB8C791e0ebbEf606A4946f67E',\n // token: bscTestnetTokens.usdc, // coins[0]\n // quoteToken: bscTestnetTokens.busd, // coins[1]\n // stableSwapAddress: '0x1288026D2c5a76A5bfb0730F615131A448f4Ad06',\n // infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n // },\n {\n lpSymbol: 'USDT-WBNB LP',\n lpAddress: '0x4c091Dc4418Bd3353A87488535528FD86954da2c',\n token: mockUSDT, // coins[0]\n quoteToken: bscTestnetTokens.wbnb, // coins[1]\n stableSwapAddress: '0xBcd585Ee8B8Ac8de6b0e45dA32Aa31703036b2a1',\n infoStableSwapAddress: '0x0A548d59D04096Bc01206D58C3D63c478e1e06dB',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x746a7063101E2D3305D1556888ee08193f2B9a07',\n token: mockUSDT, // coins[0]\n quoteToken: bscTestnetTokens.busd, // coins[1]\n stableSwapAddress: '0xE25A1352477f3DB9B3008B31e9b7a07a18f8A9e6',\n infoStableSwapAddress: '0x0A548d59D04096Bc01206D58C3D63c478e1e06dB',\n stableTotalFee: 0.0004,\n stableLpFee: 0.0002,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'BUSD-USDC LP',\n lpAddress: '0x7CA885d338462790DD1B5416ebe6bec75ee045a1',\n token: bscTestnetTokens.mockBusd, // coins[0]\n quoteToken: bscTestnetTokens.usdc, // coins[1]\n stableSwapAddress: '0xd5E56CD4c8111643a94Ee084df31F44055a1EC9F',\n infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n stableTotalFee: 0.0015,\n stableLpFee: 0.00075,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n {\n lpSymbol: 'USDT-BUSD LP',\n lpAddress: '0x9Fa2Ef2C3dF6F903F4b73047311e861C51a11B60',\n token: bscTestnetTokens.usdt, // coins[0]\n quoteToken: bscTestnetTokens.mockBusd, // coins[1]\n stableSwapAddress: '0xc418d68751Cbe0407C8fdd90Cde73cE95b892f39',\n infoStableSwapAddress: '0xaE6C14AAA753B3FCaB96149e1E10Bc4EDF39F546',\n stableTotalFee: 0.0015,\n stableLpFee: 0.00075,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { ethereumTokens } from '@pancakeswap/tokens'\n\nimport { StableSwapPool } from '../../types'\n\nexport const pools: StableSwapPool[] = [\n {\n lpSymbol: 'WBTC-mBTC LP',\n lpAddress: '0xaB9dEBAED21270832cCdf54a7461A8E4B133B57A',\n token: ethereumTokens.wbtc,\n quoteToken: ethereumTokens.mBtc,\n stableSwapAddress: '0x95A3832889B2c3455077991b834efA2d4fA3A945',\n infoStableSwapAddress: '0xCcd9fea6bBF1910F4c188A5BBC13D98Ea4F5f9F9',\n stableTotalFee: 0.0002,\n stableLpFee: 0.0001,\n stableLpFeeRateOfTotalFee: 0.5,\n },\n]\n","import { ChainId } from '@pancakeswap/chains'\n\nimport { isStableSwapSupported, STABLE_POOL_MAP, STABLE_SUPPORTED_CHAIN_IDS } from './pools'\nimport { StableSwapPool } from '../../types'\n\nexport function getStableSwapPools(chainId: ChainId): StableSwapPool[] {\n // Stable swap is only supported on BSC chain & BSC testnet\n if (!isStableSwapSupported(chainId)) {\n return []\n }\n return STABLE_POOL_MAP[chainId] || []\n}\n\nexport { isStableSwapSupported, STABLE_SUPPORTED_CHAIN_IDS }\n"]}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEtE,KAAK,OAAO,GAAG,KAAK,MAAM,EAAE,CAAA;AAE5B,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,sBAAsB,CAAA;IAC7B,UAAU,EAAE,sBAAsB,CAAA;CACnC;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,iBAAiB,EAAE,OAAO,CAAA;IAC1B,qBAAqB,EAAE,OAAO,CAAA;IAC9B,WAAW,EAAE,MAAM,CAAA;IACnB,yBAAyB,EAAE,MAAM,CAAA;CAClC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEtE,KAAK,OAAO,GAAG,KAAK,MAAM,EAAE,CAAA;AAE5B,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,sBAAsB,CAAA;IAC7B,UAAU,EAAE,sBAAsB,CAAA;CACnC;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,iBAAiB,EAAE,OAAO,CAAA;IAC1B,qBAAqB,EAAE,OAAO,CAAA;IAC9B,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,yBAAyB,EAAE,MAAM,CAAA;CAClC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pancakeswap/stable-swap-sdk",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "SDK for pancakeswap stable swap",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -19,10 +19,11 @@
|
|
|
19
19
|
"tiny-invariant": "^1.3.0",
|
|
20
20
|
"@pancakeswap/chains": "0.4.6",
|
|
21
21
|
"@pancakeswap/swap-sdk-core": "1.2.0",
|
|
22
|
-
"@pancakeswap/tokens": "0.6.
|
|
22
|
+
"@pancakeswap/tokens": "0.6.25"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"tsup": "^6.7.0",
|
|
26
|
+
"viem": "^2.20.0",
|
|
26
27
|
"@pancakeswap/token-lists": "0.0.12",
|
|
27
28
|
"@pancakeswap/tsconfig": "0.0.0",
|
|
28
29
|
"@pancakeswap/utils": "6.0.9"
|