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