@paraswap/dex-lib 4.2.3-2 → 4.2.3-4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,540 @@
1
+ [
2
+ {
3
+ "inputs": [
4
+ {
5
+ "components": [
6
+ { "internalType": "address", "name": "xyz", "type": "address" },
7
+ { "internalType": "address", "name": "weth", "type": "address" },
8
+ {
9
+ "internalType": "address",
10
+ "name": "bridgeStaking",
11
+ "type": "address"
12
+ },
13
+ {
14
+ "internalType": "uint256",
15
+ "name": "destChainId",
16
+ "type": "uint256"
17
+ }
18
+ ],
19
+ "internalType": "struct IMiroMigrator.BridgeConfig[]",
20
+ "name": "_bridgeConfigs",
21
+ "type": "tuple[]"
22
+ },
23
+ { "internalType": "address", "name": "sePSP1", "type": "address" },
24
+ { "internalType": "address", "name": "sePSP2", "type": "address" },
25
+ { "internalType": "address", "name": "seXYZ", "type": "address" },
26
+ {
27
+ "internalType": "contract IAcrossSpokePool",
28
+ "name": "spokePool",
29
+ "type": "address"
30
+ }
31
+ ],
32
+ "stateMutability": "nonpayable",
33
+ "type": "constructor"
34
+ },
35
+ { "inputs": [], "name": "EnforcedPause", "type": "error" },
36
+ { "inputs": [], "name": "ExpectedPause", "type": "error" },
37
+ { "inputs": [], "name": "InsufficientMsgValue", "type": "error" },
38
+ { "inputs": [], "name": "InvalidDestinationChainId", "type": "error" },
39
+ {
40
+ "inputs": [
41
+ { "internalType": "address", "name": "owner", "type": "address" }
42
+ ],
43
+ "name": "OwnableInvalidOwner",
44
+ "type": "error"
45
+ },
46
+ {
47
+ "inputs": [
48
+ { "internalType": "address", "name": "account", "type": "address" }
49
+ ],
50
+ "name": "OwnableUnauthorizedAccount",
51
+ "type": "error"
52
+ },
53
+ {
54
+ "anonymous": false,
55
+ "inputs": [
56
+ {
57
+ "indexed": true,
58
+ "internalType": "address",
59
+ "name": "user",
60
+ "type": "address"
61
+ },
62
+ {
63
+ "indexed": true,
64
+ "internalType": "uint256",
65
+ "name": "amount",
66
+ "type": "uint256"
67
+ }
68
+ ],
69
+ "name": "Migrated",
70
+ "type": "event"
71
+ },
72
+ {
73
+ "anonymous": false,
74
+ "inputs": [
75
+ {
76
+ "indexed": true,
77
+ "internalType": "address",
78
+ "name": "previousOwner",
79
+ "type": "address"
80
+ },
81
+ {
82
+ "indexed": true,
83
+ "internalType": "address",
84
+ "name": "newOwner",
85
+ "type": "address"
86
+ }
87
+ ],
88
+ "name": "OwnershipTransferred",
89
+ "type": "event"
90
+ },
91
+ {
92
+ "anonymous": false,
93
+ "inputs": [
94
+ {
95
+ "indexed": false,
96
+ "internalType": "address",
97
+ "name": "account",
98
+ "type": "address"
99
+ }
100
+ ],
101
+ "name": "Paused",
102
+ "type": "event"
103
+ },
104
+ {
105
+ "anonymous": false,
106
+ "inputs": [
107
+ {
108
+ "indexed": true,
109
+ "internalType": "address",
110
+ "name": "user",
111
+ "type": "address"
112
+ },
113
+ {
114
+ "indexed": true,
115
+ "internalType": "uint256",
116
+ "name": "xyzAmount",
117
+ "type": "uint256"
118
+ },
119
+ {
120
+ "indexed": true,
121
+ "internalType": "uint256",
122
+ "name": "wethAmount",
123
+ "type": "uint256"
124
+ },
125
+ {
126
+ "indexed": false,
127
+ "internalType": "uint256",
128
+ "name": "destChainId",
129
+ "type": "uint256"
130
+ },
131
+ {
132
+ "indexed": false,
133
+ "internalType": "bytes",
134
+ "name": "message",
135
+ "type": "bytes"
136
+ }
137
+ ],
138
+ "name": "StakeBridgingInitiated",
139
+ "type": "event"
140
+ },
141
+ {
142
+ "anonymous": false,
143
+ "inputs": [
144
+ {
145
+ "indexed": false,
146
+ "internalType": "address",
147
+ "name": "account",
148
+ "type": "address"
149
+ }
150
+ ],
151
+ "name": "Unpaused",
152
+ "type": "event"
153
+ },
154
+ {
155
+ "inputs": [],
156
+ "name": "BURN_ADDR",
157
+ "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
158
+ "stateMutability": "view",
159
+ "type": "function"
160
+ },
161
+ {
162
+ "inputs": [],
163
+ "name": "PSP",
164
+ "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
165
+ "stateMutability": "view",
166
+ "type": "function"
167
+ },
168
+ {
169
+ "inputs": [],
170
+ "name": "SE_PSP1",
171
+ "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
172
+ "stateMutability": "view",
173
+ "type": "function"
174
+ },
175
+ {
176
+ "inputs": [],
177
+ "name": "SE_PSP2",
178
+ "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
179
+ "stateMutability": "view",
180
+ "type": "function"
181
+ },
182
+ {
183
+ "inputs": [],
184
+ "name": "SE_XYZ",
185
+ "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
186
+ "stateMutability": "view",
187
+ "type": "function"
188
+ },
189
+ {
190
+ "inputs": [],
191
+ "name": "SPOKE_POOL",
192
+ "outputs": [
193
+ {
194
+ "internalType": "contract IAcrossSpokePool",
195
+ "name": "",
196
+ "type": "address"
197
+ }
198
+ ],
199
+ "stateMutability": "view",
200
+ "type": "function"
201
+ },
202
+ {
203
+ "inputs": [],
204
+ "name": "WETH",
205
+ "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
206
+ "stateMutability": "view",
207
+ "type": "function"
208
+ },
209
+ {
210
+ "inputs": [],
211
+ "name": "XYZ",
212
+ "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
213
+ "stateMutability": "view",
214
+ "type": "function"
215
+ },
216
+ {
217
+ "inputs": [
218
+ { "internalType": "uint256", "name": "chainId", "type": "uint256" }
219
+ ],
220
+ "name": "bridgeConfigs",
221
+ "outputs": [
222
+ { "internalType": "address", "name": "xyz", "type": "address" },
223
+ { "internalType": "address", "name": "weth", "type": "address" },
224
+ { "internalType": "address", "name": "bridgeStaking", "type": "address" },
225
+ { "internalType": "uint256", "name": "destChainId", "type": "uint256" }
226
+ ],
227
+ "stateMutability": "view",
228
+ "type": "function"
229
+ },
230
+ {
231
+ "inputs": [
232
+ { "internalType": "uint256", "name": "xyzAmount", "type": "uint256" },
233
+ { "internalType": "uint256", "name": "wethAmount", "type": "uint256" },
234
+ { "internalType": "uint256", "name": "destChainId", "type": "uint256" },
235
+ {
236
+ "internalType": "uint256",
237
+ "name": "minDestBptAmount",
238
+ "type": "uint256"
239
+ },
240
+ { "internalType": "address", "name": "beneficiary", "type": "address" },
241
+ {
242
+ "components": [
243
+ {
244
+ "internalType": "uint256",
245
+ "name": "relayerFee",
246
+ "type": "uint256"
247
+ },
248
+ {
249
+ "internalType": "address",
250
+ "name": "exclusiveRelayer",
251
+ "type": "address"
252
+ },
253
+ {
254
+ "internalType": "uint32",
255
+ "name": "quoteTimestamp",
256
+ "type": "uint32"
257
+ },
258
+ {
259
+ "internalType": "uint32",
260
+ "name": "fillDeadline",
261
+ "type": "uint32"
262
+ },
263
+ {
264
+ "internalType": "uint32",
265
+ "name": "exclusivityDeadline",
266
+ "type": "uint32"
267
+ }
268
+ ],
269
+ "internalType": "struct IMiroMigrator.BridgeData",
270
+ "name": "xyzBridgeData",
271
+ "type": "tuple"
272
+ },
273
+ {
274
+ "components": [
275
+ {
276
+ "internalType": "uint256",
277
+ "name": "relayerFee",
278
+ "type": "uint256"
279
+ },
280
+ {
281
+ "internalType": "address",
282
+ "name": "exclusiveRelayer",
283
+ "type": "address"
284
+ },
285
+ {
286
+ "internalType": "uint32",
287
+ "name": "quoteTimestamp",
288
+ "type": "uint32"
289
+ },
290
+ {
291
+ "internalType": "uint32",
292
+ "name": "fillDeadline",
293
+ "type": "uint32"
294
+ },
295
+ {
296
+ "internalType": "uint32",
297
+ "name": "exclusivityDeadline",
298
+ "type": "uint32"
299
+ }
300
+ ],
301
+ "internalType": "struct IMiroMigrator.BridgeData",
302
+ "name": "wethBridgeData",
303
+ "type": "tuple"
304
+ },
305
+ { "internalType": "bytes", "name": "permitData", "type": "bytes" }
306
+ ],
307
+ "name": "bridgeXYZAndStake",
308
+ "outputs": [],
309
+ "stateMutability": "payable",
310
+ "type": "function"
311
+ },
312
+ {
313
+ "inputs": [
314
+ { "internalType": "uint256", "name": "pspAmount", "type": "uint256" },
315
+ { "internalType": "uint256", "name": "wethAmount", "type": "uint256" },
316
+ { "internalType": "uint256", "name": "minBptOut", "type": "uint256" },
317
+ { "internalType": "bytes", "name": "permitData", "type": "bytes" }
318
+ ],
319
+ "name": "migratePSPtoSeXYZ",
320
+ "outputs": [],
321
+ "stateMutability": "payable",
322
+ "type": "function"
323
+ },
324
+ {
325
+ "inputs": [
326
+ { "internalType": "uint256", "name": "pspAmount", "type": "uint256" },
327
+ { "internalType": "bytes", "name": "permitData", "type": "bytes" }
328
+ ],
329
+ "name": "migratePSPtoXYZ",
330
+ "outputs": [],
331
+ "stateMutability": "nonpayable",
332
+ "type": "function"
333
+ },
334
+ {
335
+ "inputs": [
336
+ { "internalType": "uint256", "name": "sePSP1Amount", "type": "uint256" },
337
+ { "internalType": "uint256", "name": "wethAmount", "type": "uint256" },
338
+ { "internalType": "uint256", "name": "minBptOut", "type": "uint256" },
339
+ { "internalType": "bytes", "name": "permitData", "type": "bytes" }
340
+ ],
341
+ "name": "migrateSePSP1toSeXYZ",
342
+ "outputs": [],
343
+ "stateMutability": "payable",
344
+ "type": "function"
345
+ },
346
+ {
347
+ "inputs": [
348
+ { "internalType": "uint256", "name": "sePSP1Amount", "type": "uint256" },
349
+ { "internalType": "bytes", "name": "permitData", "type": "bytes" }
350
+ ],
351
+ "name": "migrateSePSP1toXYZ",
352
+ "outputs": [],
353
+ "stateMutability": "nonpayable",
354
+ "type": "function"
355
+ },
356
+ {
357
+ "inputs": [
358
+ { "internalType": "uint256", "name": "sePSP2Amount", "type": "uint256" },
359
+ { "internalType": "uint256", "name": "minPspAmount", "type": "uint256" },
360
+ { "internalType": "uint256", "name": "minWethAmount", "type": "uint256" },
361
+ { "internalType": "uint256", "name": "minBptOut", "type": "uint256" },
362
+ { "internalType": "bytes", "name": "permitData", "type": "bytes" }
363
+ ],
364
+ "name": "migrateSePSP2toSeXYZ",
365
+ "outputs": [],
366
+ "stateMutability": "nonpayable",
367
+ "type": "function"
368
+ },
369
+ {
370
+ "inputs": [
371
+ { "internalType": "uint256", "name": "sePSP2Amount", "type": "uint256" },
372
+ { "internalType": "uint256", "name": "minPspAmount", "type": "uint256" },
373
+ { "internalType": "uint256", "name": "minWethAmount", "type": "uint256" },
374
+ { "internalType": "uint256", "name": "destChainId", "type": "uint256" },
375
+ {
376
+ "internalType": "uint256",
377
+ "name": "minDestBptAmount",
378
+ "type": "uint256"
379
+ },
380
+ { "internalType": "address", "name": "beneficiary", "type": "address" },
381
+ {
382
+ "components": [
383
+ {
384
+ "internalType": "uint256",
385
+ "name": "relayerFee",
386
+ "type": "uint256"
387
+ },
388
+ {
389
+ "internalType": "address",
390
+ "name": "exclusiveRelayer",
391
+ "type": "address"
392
+ },
393
+ {
394
+ "internalType": "uint32",
395
+ "name": "quoteTimestamp",
396
+ "type": "uint32"
397
+ },
398
+ {
399
+ "internalType": "uint32",
400
+ "name": "fillDeadline",
401
+ "type": "uint32"
402
+ },
403
+ {
404
+ "internalType": "uint32",
405
+ "name": "exclusivityDeadline",
406
+ "type": "uint32"
407
+ }
408
+ ],
409
+ "internalType": "struct IMiroMigrator.BridgeData",
410
+ "name": "xyzBridgeData",
411
+ "type": "tuple"
412
+ },
413
+ {
414
+ "components": [
415
+ {
416
+ "internalType": "uint256",
417
+ "name": "relayerFee",
418
+ "type": "uint256"
419
+ },
420
+ {
421
+ "internalType": "address",
422
+ "name": "exclusiveRelayer",
423
+ "type": "address"
424
+ },
425
+ {
426
+ "internalType": "uint32",
427
+ "name": "quoteTimestamp",
428
+ "type": "uint32"
429
+ },
430
+ {
431
+ "internalType": "uint32",
432
+ "name": "fillDeadline",
433
+ "type": "uint32"
434
+ },
435
+ {
436
+ "internalType": "uint32",
437
+ "name": "exclusivityDeadline",
438
+ "type": "uint32"
439
+ }
440
+ ],
441
+ "internalType": "struct IMiroMigrator.BridgeData",
442
+ "name": "wethBridgeData",
443
+ "type": "tuple"
444
+ },
445
+ { "internalType": "bytes", "name": "permitData", "type": "bytes" }
446
+ ],
447
+ "name": "migrateSePSP2toSeXYZAndBridge",
448
+ "outputs": [],
449
+ "stateMutability": "nonpayable",
450
+ "type": "function"
451
+ },
452
+ {
453
+ "inputs": [],
454
+ "name": "owner",
455
+ "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
456
+ "stateMutability": "view",
457
+ "type": "function"
458
+ },
459
+ {
460
+ "inputs": [],
461
+ "name": "pause",
462
+ "outputs": [],
463
+ "stateMutability": "nonpayable",
464
+ "type": "function"
465
+ },
466
+ {
467
+ "inputs": [],
468
+ "name": "paused",
469
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
470
+ "stateMutability": "view",
471
+ "type": "function"
472
+ },
473
+ {
474
+ "inputs": [
475
+ { "internalType": "address", "name": "token", "type": "address" },
476
+ { "internalType": "address", "name": "to", "type": "address" }
477
+ ],
478
+ "name": "reClaimERC20",
479
+ "outputs": [],
480
+ "stateMutability": "nonpayable",
481
+ "type": "function"
482
+ },
483
+ {
484
+ "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],
485
+ "name": "reClaimETH",
486
+ "outputs": [],
487
+ "stateMutability": "nonpayable",
488
+ "type": "function"
489
+ },
490
+ {
491
+ "inputs": [],
492
+ "name": "renounceOwnership",
493
+ "outputs": [],
494
+ "stateMutability": "nonpayable",
495
+ "type": "function"
496
+ },
497
+ {
498
+ "inputs": [
499
+ {
500
+ "components": [
501
+ { "internalType": "address", "name": "xyz", "type": "address" },
502
+ { "internalType": "address", "name": "weth", "type": "address" },
503
+ {
504
+ "internalType": "address",
505
+ "name": "bridgeStaking",
506
+ "type": "address"
507
+ },
508
+ {
509
+ "internalType": "uint256",
510
+ "name": "destChainId",
511
+ "type": "uint256"
512
+ }
513
+ ],
514
+ "internalType": "struct IMiroMigrator.BridgeConfig[]",
515
+ "name": "_bridgeConfigs",
516
+ "type": "tuple[]"
517
+ }
518
+ ],
519
+ "name": "setBridgeConfigs",
520
+ "outputs": [],
521
+ "stateMutability": "nonpayable",
522
+ "type": "function"
523
+ },
524
+ {
525
+ "inputs": [
526
+ { "internalType": "address", "name": "newOwner", "type": "address" }
527
+ ],
528
+ "name": "transferOwnership",
529
+ "outputs": [],
530
+ "stateMutability": "nonpayable",
531
+ "type": "function"
532
+ },
533
+ {
534
+ "inputs": [],
535
+ "name": "unpause",
536
+ "outputs": [],
537
+ "stateMutability": "nonpayable",
538
+ "type": "function"
539
+ }
540
+ ]
@@ -44,4 +44,5 @@ export declare class MaverickV1 extends SimpleExchange implements IDex<MaverickV
44
44
  getSimpleParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: MaverickV1Data, side: SwapSide): Promise<SimpleExchangeParam>;
45
45
  private _querySubgraph;
46
46
  getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
47
+ private _getPoolBalances;
47
48
  }
@@ -50,6 +50,8 @@ const subgraph_queries_1 = require("./subgraph-queries");
50
50
  const constants_2 = require("../../constants");
51
51
  const router_json_1 = __importDefault(require("../../abi/maverick-v1/router.json"));
52
52
  const utils_2 = require("../../executor/utils");
53
+ const utils_3 = require("ethers/lib/utils");
54
+ const decoders_1 = require("../../lib/decoders");
53
55
  const MAX_POOL_CNT = 1000;
54
56
  const EFFICIENCY_FACTOR = 3;
55
57
  class MaverickV1 extends simple_exchange_1.SimpleExchange {
@@ -354,7 +356,7 @@ class MaverickV1 extends simple_exchange_1.SimpleExchange {
354
356
  decimals: parseInt(pool.tokenB.decimals),
355
357
  },
356
358
  ],
357
- liquidityUSD: parseFloat(pool.balanceUSD) * EFFICIENCY_FACTOR,
359
+ liquidityUSD: parseFloat(pool.balanceUSD),
358
360
  }));
359
361
  const pools1 = lodash_1.default.map(res.pools1, pool => ({
360
362
  exchange: this.dexKey,
@@ -365,10 +367,83 @@ class MaverickV1 extends simple_exchange_1.SimpleExchange {
365
367
  decimals: parseInt(pool.tokenA.decimals),
366
368
  },
367
369
  ],
368
- liquidityUSD: parseFloat(pool.balanceUSD) * EFFICIENCY_FACTOR,
370
+ liquidityUSD: parseFloat(pool.balanceUSD),
369
371
  }));
370
- const pools = lodash_1.default.slice(lodash_1.default.sortBy(lodash_1.default.concat(pools0, pools1), [pool => -1 * pool.liquidityUSD]), 0, limit);
371
- return pools;
372
+ const allPools = pools0.concat(pools1);
373
+ const tokenDecimals = allPools.reduce((a, c) => ({
374
+ ...a,
375
+ [c.connectorTokens[0].address]: c.connectorTokens[0].decimals,
376
+ }), {});
377
+ const tokenDecimal = res.pools0?.[0]?.tokenA?.decimals ?? res.pools1?.[0]?.tokenB?.decimals;
378
+ tokenDecimals[_tokenAddress] = parseInt(tokenDecimal);
379
+ // just to optimize in case same tokens are used in multiple pools
380
+ const normalizedUsdPrices = await Promise.all(Object.keys(tokenDecimals).map(t => this.dexHelper.getTokenUSDPrice({
381
+ address: t,
382
+ decimals: tokenDecimals[t],
383
+ }, BigInt(1 * 10 ** tokenDecimals[t]))));
384
+ const usdPrices = Object.fromEntries(Object.keys(tokenDecimals).map((t, i) => [t, normalizedUsdPrices[i]]));
385
+ const poolBalances = await this._getPoolBalances(allPools.map(p => [
386
+ p.address,
387
+ tokenAddress,
388
+ p.connectorTokens[0].address,
389
+ ]));
390
+ const pools = allPools.map((pool, i) => {
391
+ const _connectorTokenAddress = pool.connectorTokens[0].address;
392
+ const tokenBalance = poolBalances[i][0];
393
+ const connectorTokenBalance = poolBalances[i][1];
394
+ const tokenUsdPrice = usdPrices[_tokenAddress];
395
+ const connectorTokenUsdPrice = usdPrices[_connectorTokenAddress];
396
+ let tokenUsdLiquidity = null;
397
+ if (tokenBalance && tokenUsdPrice && tokenDecimals[_tokenAddress]) {
398
+ const amount = (0, utils_3.formatUnits)(tokenBalance, tokenDecimals[_tokenAddress]);
399
+ tokenUsdLiquidity = Number(amount) * tokenUsdPrice * EFFICIENCY_FACTOR;
400
+ }
401
+ let connectorTokenUsdLiquidity = null;
402
+ if (connectorTokenBalance &&
403
+ connectorTokenUsdPrice &&
404
+ tokenDecimals[_connectorTokenAddress]) {
405
+ const amount = (0, utils_3.formatUnits)(connectorTokenBalance, tokenDecimals[_connectorTokenAddress]);
406
+ connectorTokenUsdLiquidity =
407
+ Number(amount) * connectorTokenUsdPrice * EFFICIENCY_FACTOR;
408
+ }
409
+ const liquidityUSD = Math.min(tokenUsdLiquidity ?? pool.liquidityUSD / 2, connectorTokenUsdLiquidity ?? pool.liquidityUSD / 2) * 2;
410
+ return {
411
+ ...pool,
412
+ liquidityUSD,
413
+ };
414
+ });
415
+ return pools.slice(0, limit);
416
+ }
417
+ async _getPoolBalances(pools) {
418
+ const callData = pools
419
+ .map(pool => [
420
+ {
421
+ target: pool[1],
422
+ callData: this.erc20Interface.encodeFunctionData('balanceOf', [
423
+ pool[0],
424
+ ]),
425
+ decodeFunction: decoders_1.uint256ToBigInt,
426
+ },
427
+ {
428
+ target: pool[2],
429
+ callData: this.erc20Interface.encodeFunctionData('balanceOf', [
430
+ pool[0],
431
+ ]),
432
+ decodeFunction: decoders_1.uint256ToBigInt,
433
+ },
434
+ ])
435
+ .flat();
436
+ const balanceOfCalls = await this.dexHelper.multiWrapper.tryAggregate(false, callData);
437
+ const balances = [];
438
+ for (let i = 0; i < balanceOfCalls.length; i += 2) {
439
+ const balanceToken0 = balanceOfCalls[i];
440
+ const balanceToken1 = balanceOfCalls[i + 1];
441
+ balances.push([
442
+ balanceToken0.success ? balanceToken0.returnData : null,
443
+ balanceToken1.success ? balanceToken1.returnData : null,
444
+ ]);
445
+ }
446
+ return balances;
372
447
  }
373
448
  }
374
449
  exports.MaverickV1 = MaverickV1;