@paraswap/dex-lib 5.0.8-force-rfq-revert.0 → 5.0.9
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/build/config.js +14 -15
- package/build/config.js.map +1 -1
- package/build/dex/bebop/bebop.d.ts +2 -2
- package/build/dex/bebop/bebop.js +2 -15
- package/build/dex/bebop/bebop.js.map +1 -1
- package/build/dex/cables/cables.d.ts +2 -2
- package/build/dex/cables/cables.js +2 -6
- package/build/dex/cables/cables.js.map +1 -1
- package/build/dex/dexalot/dexalot.d.ts +2 -2
- package/build/dex/dexalot/dexalot.js +2 -6
- package/build/dex/dexalot/dexalot.js.map +1 -1
- package/build/dex/generic-rfq/generic-rfq.d.ts +2 -2
- package/build/dex/generic-rfq/generic-rfq.js +2 -11
- package/build/dex/generic-rfq/generic-rfq.js.map +1 -1
- package/build/dex/hashflow/hashflow.d.ts +2 -2
- package/build/dex/hashflow/hashflow.js +2 -6
- package/build/dex/hashflow/hashflow.js.map +1 -1
- package/build/dex/index.js +0 -8
- package/build/dex/index.js.map +1 -1
- package/build/dex/metric/metric.js +1 -5
- package/build/dex/metric/metric.js.map +1 -1
- package/build/dex/native/native.d.ts +2 -2
- package/build/dex/native/native.js +2 -8
- package/build/dex/native/native.js.map +1 -1
- package/build/dex/paraswap-limit-orders/config.js +0 -6
- package/build/dex/paraswap-limit-orders/config.js.map +1 -1
- package/build/dex/paraswap-limit-orders/paraswap-limit-orders.d.ts +2 -2
- package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js +2 -11
- package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js.map +1 -1
- package/build/dex/swaap-v2/swaap-v2.d.ts +2 -2
- package/build/dex/swaap-v2/swaap-v2.js +2 -10
- package/build/dex/swaap-v2/swaap-v2.js.map +1 -1
- package/build/dex/uniswap-v3/config.js +0 -28
- package/build/dex/uniswap-v3/config.js.map +1 -1
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js +0 -1
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js.map +1 -1
- package/build/dex/woo-fi-v2/config.js +1 -1
- package/build/dex/woo-fi-v2/config.js.map +1 -1
- package/build/dex/woo-fi-v2/woo-fi-v2-math.js +19 -4
- package/build/dex/woo-fi-v2/woo-fi-v2-math.js.map +1 -1
- package/build/executor/Executor01BytecodeBuilder.d.ts +0 -8
- package/build/executor/Executor01BytecodeBuilder.js +12 -146
- package/build/executor/Executor01BytecodeBuilder.js.map +1 -1
- package/build/executor/Executor02BytecodeBuilder.d.ts +0 -22
- package/build/executor/Executor02BytecodeBuilder.js +1 -212
- package/build/executor/Executor02BytecodeBuilder.js.map +1 -1
- package/build/executor/ExecutorDetector.d.ts +0 -1
- package/build/executor/ExecutorDetector.js +0 -14
- package/build/executor/ExecutorDetector.js.map +1 -1
- package/build/executor/types.d.ts +1 -2
- package/build/executor/types.js +0 -4
- package/build/executor/types.js.map +1 -1
- package/build/generic-swap-transaction-builder.d.ts +1 -3
- package/build/generic-swap-transaction-builder.js +51 -176
- package/build/generic-swap-transaction-builder.js.map +1 -1
- package/build/implementations/local-paraswap-sdk.d.ts +0 -1
- package/build/implementations/local-paraswap-sdk.js +1 -7
- package/build/implementations/local-paraswap-sdk.js.map +1 -1
- package/build/types.d.ts +0 -3
- package/build/utils.d.ts +0 -1
- package/build/utils.js +1 -15
- package/build/utils.js.map +1 -1
- package/package.json +2 -2
|
@@ -30,7 +30,7 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
30
30
|
const isEthSrc = (0, utils_1.isETHAddress)(srcToken);
|
|
31
31
|
const isEthDest = (0, utils_1.isETHAddress)(destToken);
|
|
32
32
|
const exchangeParam = exchangeParams[exchangeParamIndex];
|
|
33
|
-
const { dexFuncHasRecipient, needWrapNative, needUnwrapNative, specialDexFlag, specialDexSupportsInsertFromAmount, swappedAmountNotPresentInExchangeData, sendEthButSupportsInsertFromAmount,
|
|
33
|
+
const { dexFuncHasRecipient, needWrapNative, needUnwrapNative, specialDexFlag, specialDexSupportsInsertFromAmount, swappedAmountNotPresentInExchangeData, sendEthButSupportsInsertFromAmount, } = exchangeParam;
|
|
34
34
|
const isWETHSrc = !!needUnwrapNative && this.dexHelper.config.isWETH(srcToken);
|
|
35
35
|
const isWETHDest = !!needUnwrapNative && this.dexHelper.config.isWETH(destToken);
|
|
36
36
|
const needWrap = needWrapNative && isEthSrc && maybeWethCallData?.deposit;
|
|
@@ -56,11 +56,7 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
56
56
|
? types_1.Flag.DONT_INSERT_FROM_AMOUNT_CHECK_ETH_BALANCE_AFTER_SWAP
|
|
57
57
|
: types_1.Flag.INSERT_FROM_AMOUNT_CHECK_ETH_BALANCE_AFTER_SWAP; // 4 or 7
|
|
58
58
|
}
|
|
59
|
-
else if (!dexFuncHasRecipient ||
|
|
60
|
-
// group fallback redirected to the executor (case C) — capture its real
|
|
61
|
-
// output so the group threads it to the route-level forward
|
|
62
|
-
deliversToExecutor ||
|
|
63
|
-
(isEthDest && needUnwrap)) {
|
|
59
|
+
else if (!dexFuncHasRecipient || (isEthDest && needUnwrap)) {
|
|
64
60
|
dexFlag = forcePreventInsertFromAmount
|
|
65
61
|
? types_1.Flag.DONT_INSERT_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP
|
|
66
62
|
: types_1.Flag.INSERT_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP; // 8 or 11
|
|
@@ -109,7 +105,7 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
109
105
|
const swap = priceRoute.bestRoute[routeIndex].swaps[swapIndex];
|
|
110
106
|
const { srcToken, destToken } = swap;
|
|
111
107
|
const exchangeParam = exchangeParams[exchangeParamIndex];
|
|
112
|
-
const { dexFuncHasRecipient, needWrapNative, needUnwrapNative, specialDexFlag, specialDexSupportsInsertFromAmount, swappedAmountNotPresentInExchangeData, sendEthButSupportsInsertFromAmount,
|
|
108
|
+
const { dexFuncHasRecipient, needWrapNative, needUnwrapNative, specialDexFlag, specialDexSupportsInsertFromAmount, swappedAmountNotPresentInExchangeData, sendEthButSupportsInsertFromAmount, } = exchangeParam;
|
|
113
109
|
const isLastSwap = swapIndex === priceRoute.bestRoute[routeIndex].swaps.length - 1;
|
|
114
110
|
const isEthSrc = (0, utils_1.isETHAddress)(srcToken);
|
|
115
111
|
const isEthDest = (0, utils_1.isETHAddress)(destToken);
|
|
@@ -120,8 +116,7 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
120
116
|
(isSpecialDex && !specialDexSupportsInsertFromAmount);
|
|
121
117
|
const needUnwrap = needWrapNative && isEthDest && maybeWethCallData?.withdraw;
|
|
122
118
|
const forceBalanceOfCheck = isLastSwap
|
|
123
|
-
?
|
|
124
|
-
!dexFuncHasRecipient || needUnwrap || !!deliversToExecutor
|
|
119
|
+
? !dexFuncHasRecipient || needUnwrap
|
|
125
120
|
: true;
|
|
126
121
|
const needSendEth = isEthSrc && !needWrapNative;
|
|
127
122
|
const needCheckEthBalance = isEthDest && !needWrapNative;
|
|
@@ -262,119 +257,6 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
262
257
|
}
|
|
263
258
|
return swapCallData;
|
|
264
259
|
}
|
|
265
|
-
/**
|
|
266
|
-
* Build a revertable fallback group (Style 2): a special-dex step (0xFF) whose calldata payload is
|
|
267
|
-
* [tryLen(4)][fallbackLen(4)][try-block][fallback-block]. The try-block is the primary exchange's
|
|
268
|
-
* per-swap calldata; the fallback-block is the alternative's, built by substituting the fallback
|
|
269
|
-
* param at this hop and recomputing its flags. Executor01 runs the try-block in a self-call and,
|
|
270
|
-
* on revert, runs the fallback-block from the original pre-group input.
|
|
271
|
-
*/
|
|
272
|
-
buildRevertableGroup(params) {
|
|
273
|
-
const { priceRoute, index, exchangeParams, maybeWethCallData } = params;
|
|
274
|
-
const fallbackParam = exchangeParams[index].fallbackParam;
|
|
275
|
-
// Defensive: only reachable when a fallback is present.
|
|
276
|
-
if (!fallbackParam) {
|
|
277
|
-
return this.buildSingleSwapCallData(params);
|
|
278
|
-
}
|
|
279
|
-
// Mixed wrap-ness on an ETH-dest hop: raw-native primary, WETH-based
|
|
280
|
-
// fallback (or the reverse). On the FINAL hop this is normalized via the
|
|
281
|
-
// fallback unit's own unwrap plus (for a self-delivering primary) the
|
|
282
|
-
// native send appended below. MID-ROUTE hops are normalized further down:
|
|
283
|
-
// the fallback block is made to end in the same token form (raw native or
|
|
284
|
-
// WETH) the primary threads to the next hop.
|
|
285
|
-
const groupSwap = priceRoute.bestRoute[0].swaps[index];
|
|
286
|
-
const isLastSwapHop = index === priceRoute.bestRoute[0].swaps.length - 1;
|
|
287
|
-
const mixedEthDestWethFallback = (0, utils_1.isETHAddress)(groupSwap.destToken) &&
|
|
288
|
-
!exchangeParams[index].needWrapNative &&
|
|
289
|
-
Boolean(fallbackParam.needWrapNative);
|
|
290
|
-
// try-block: the primary's normal per-swap calldata (approve/wrap/swap, contiguous).
|
|
291
|
-
const tryBlock = this.buildSingleSwapCallData(params);
|
|
292
|
-
// fallback-block: substitute the fallback param at this hop and recompute flags for it.
|
|
293
|
-
const fallbackExchangeParams = exchangeParams.slice();
|
|
294
|
-
fallbackExchangeParams[index] = fallbackParam;
|
|
295
|
-
const fallbackFlags = this.buildFlags(priceRoute, fallbackExchangeParams, maybeWethCallData);
|
|
296
|
-
let fallbackBlock = this.buildSingleSwapCallData({
|
|
297
|
-
...params,
|
|
298
|
-
exchangeParams: fallbackExchangeParams,
|
|
299
|
-
flags: fallbackFlags,
|
|
300
|
-
});
|
|
301
|
-
// Case D: recipient-capable primary (delivers to Augustus itself — so
|
|
302
|
-
// buildByteCode appends NO route-level forward) with a fallback whose
|
|
303
|
-
// output stays on the executor: either a false-recipient dex, or a
|
|
304
|
-
// needUnwrapNative raw-ETH dex on a WETH-dest hop that was re-encoded to
|
|
305
|
-
// deliver on the executor for its wrap-after (deliversToExecutor). Append
|
|
306
|
-
// the executor->Augustus forward INSIDE the fallback block so both
|
|
307
|
-
// branches end with Augustus funded. The transferred amount is inserted
|
|
308
|
-
// from the threaded fromAmount, which the fallback's dest-balance /
|
|
309
|
-
// ETH-balance check has just set to its real output.
|
|
310
|
-
if (isLastSwapHop &&
|
|
311
|
-
!(0, utils_1.isETHAddress)(priceRoute.destToken) &&
|
|
312
|
-
exchangeParams[index].dexFuncHasRecipient &&
|
|
313
|
-
(!fallbackParam.dexFuncHasRecipient || !!fallbackParam.deliversToExecutor)) {
|
|
314
|
-
const transferCallData = this.buildTransferCallData(this.erc20Interface.encodeFunctionData('transfer', [
|
|
315
|
-
this.dexHelper.config.data.augustusV6Address,
|
|
316
|
-
priceRoute.destAmount,
|
|
317
|
-
]), priceRoute.destToken);
|
|
318
|
-
fallbackBlock = hexConcat([fallbackBlock, transferCallData]);
|
|
319
|
-
}
|
|
320
|
-
// Final-hop ETH-dest mixed wrap-ness (mirrors Executor02's ethDestOutcome
|
|
321
|
-
// 'sent' vs 'weth'): the raw-native primary delivers to Augustus itself
|
|
322
|
-
// (recipient-capable), while the WETH-based fallback ends with its unwrap
|
|
323
|
-
// leaving raw native on the executor. Append the native send INSIDE the
|
|
324
|
-
// fallback block so both branches end with Augustus funded — the amount is
|
|
325
|
-
// the threaded fromAmount, which the unwrap's ETH-balance check has just
|
|
326
|
-
// set to the fallback's real output. buildByteCode suppresses its
|
|
327
|
-
// route-level send for this shape (it would re-send an unthreaded amount
|
|
328
|
-
// after the try branch, which keeps nothing on the executor).
|
|
329
|
-
if (mixedEthDestWethFallback &&
|
|
330
|
-
isLastSwapHop &&
|
|
331
|
-
exchangeParams[index].dexFuncHasRecipient) {
|
|
332
|
-
fallbackBlock = hexConcat([
|
|
333
|
-
fallbackBlock,
|
|
334
|
-
this.buildFinalSpecialFlagCalldata(),
|
|
335
|
-
]);
|
|
336
|
-
}
|
|
337
|
-
// MID-ROUTE ETH-dest mixed wrap-ness: the token form threaded to the next
|
|
338
|
-
// hop is shaped by the primary — WETH only when a needWrapNative dex is
|
|
339
|
-
// followed by a needWrapNative hop (the unit skips its unwrap exactly
|
|
340
|
-
// then; a raw next hop gets raw native, and a raw primary before a
|
|
341
|
-
// needWrapNative hop threads raw native which the next unit deposits
|
|
342
|
-
// itself). Make the fallback block end in that same form: unwrap a
|
|
343
|
-
// WETH-holding fallback, or wrap a raw-native one. Amounts are the
|
|
344
|
-
// threaded fromAmount, set by the unit's own balance check (WETH
|
|
345
|
-
// dest-balance for a needWrapNative fallback, ETH balance for a raw one).
|
|
346
|
-
if (!isLastSwapHop && (0, utils_1.isETHAddress)(groupSwap.destToken)) {
|
|
347
|
-
const nextParam = exchangeParams[index + 1];
|
|
348
|
-
const unitEndsInWeth = (param) => Boolean(param.needWrapNative) &&
|
|
349
|
-
!(Boolean(param.needWrapNative) &&
|
|
350
|
-
!!maybeWethCallData?.withdraw &&
|
|
351
|
-
(!nextParam || !nextParam.needWrapNative));
|
|
352
|
-
const tryEndsInWeth = unitEndsInWeth(exchangeParams[index]);
|
|
353
|
-
const fallbackEndsInWeth = unitEndsInWeth(fallbackParam);
|
|
354
|
-
if (tryEndsInWeth !== fallbackEndsInWeth) {
|
|
355
|
-
fallbackBlock = hexConcat([
|
|
356
|
-
fallbackBlock,
|
|
357
|
-
fallbackEndsInWeth
|
|
358
|
-
? this.buildUnwrapEthCallData(this.getWETHAddress(fallbackParam), this.erc20Interface.encodeFunctionData('withdraw', [
|
|
359
|
-
groupSwap.swapExchanges[0].destAmount,
|
|
360
|
-
]))
|
|
361
|
-
: this.buildWrapEthCallData(this.getWETHAddress(fallbackParam), this.erc20Interface.encodeFunctionData('deposit'), types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_DONT_CHECK_BALANCE_AFTER_SWAP),
|
|
362
|
-
]);
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
// payload = [tryLen(4)][fallbackLen(4)][try-block][fallback-block]
|
|
366
|
-
const payload = hexConcat([
|
|
367
|
-
hexZeroPad(hexlify(hexDataLength(tryBlock)), 4),
|
|
368
|
-
hexZeroPad(hexlify(hexDataLength(fallbackBlock)), 4),
|
|
369
|
-
tryBlock,
|
|
370
|
-
fallbackBlock,
|
|
371
|
-
]);
|
|
372
|
-
// Standard metadata packing; specialDexFlag = 0xFF marks the group. target/flag unused.
|
|
373
|
-
return this.buildCallData(constants_1.ZEROS_20_BYTES, payload, 0, // fromAmountPos
|
|
374
|
-
0, // destTokenPos
|
|
375
|
-
types_1.SpecialDex.REVERTABLE_FALLBACK_GROUP, types_1.Flag.DONT_INSERT_FROM_AMOUNT_DONT_CHECK_BALANCE_AFTER_SWAP, 0, // toAmountPos
|
|
376
|
-
0);
|
|
377
|
-
}
|
|
378
260
|
buildDexCallData(params) {
|
|
379
261
|
const { priceRoute, exchangeParamIndex, exchangeParams, routeIndex, swapIndex, flag, swapExchangeIndex, } = params;
|
|
380
262
|
const dontCheckBalanceAfterSwap = flag % 3 === 0;
|
|
@@ -414,20 +296,17 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
414
296
|
}
|
|
415
297
|
buildByteCode(priceRoute, exchangeParams, sender, maybeWethCallData) {
|
|
416
298
|
const flags = this.buildFlags(priceRoute, exchangeParams, maybeWethCallData);
|
|
417
|
-
let swapsCalldata = exchangeParams.reduce((acc, ep, index) =>
|
|
418
|
-
|
|
299
|
+
let swapsCalldata = exchangeParams.reduce((acc, ep, index) => hexConcat([
|
|
300
|
+
acc,
|
|
301
|
+
this.buildSingleSwapCallData({
|
|
419
302
|
priceRoute,
|
|
420
303
|
exchangeParams,
|
|
421
304
|
index,
|
|
422
305
|
flags,
|
|
423
306
|
sender,
|
|
424
307
|
maybeWethCallData,
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
? this.buildRevertableGroup(callDataParams)
|
|
428
|
-
: this.buildSingleSwapCallData(callDataParams);
|
|
429
|
-
return hexConcat([acc, stepCallData]);
|
|
430
|
-
}, '0x');
|
|
308
|
+
}),
|
|
309
|
+
]), '0x');
|
|
431
310
|
if (!exchangeParams[exchangeParams.length - 1].dexFuncHasRecipient &&
|
|
432
311
|
!(0, utils_1.isETHAddress)(priceRoute.destToken)) {
|
|
433
312
|
const transferCallData = this.buildTransferCallData(this.erc20Interface.encodeFunctionData('transfer', [
|
|
@@ -436,22 +315,9 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
436
315
|
]), priceRoute.destToken);
|
|
437
316
|
swapsCalldata = hexConcat([swapsCalldata, transferCallData]);
|
|
438
317
|
}
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
// because of that fallback's accounting — appending the send here would
|
|
443
|
-
// run it after the try branch too, with an unthreaded fromAmount and an
|
|
444
|
-
// empty executor balance.
|
|
445
|
-
const lastParam = exchangeParams[exchangeParams.length - 1];
|
|
446
|
-
const groupHandlesNativeSend = (0, utils_1.isETHAddress)(priceRoute.destToken) &&
|
|
447
|
-
!!lastParam.fallbackParam &&
|
|
448
|
-
Boolean(lastParam.fallbackParam.needWrapNative) &&
|
|
449
|
-
!lastParam.needWrapNative &&
|
|
450
|
-
lastParam.dexFuncHasRecipient;
|
|
451
|
-
if (!groupHandlesNativeSend &&
|
|
452
|
-
((maybeWethCallData?.withdraw && (0, utils_1.isETHAddress)(priceRoute.destToken)) ||
|
|
453
|
-
(!exchangeParams[exchangeParams.length - 1].dexFuncHasRecipient &&
|
|
454
|
-
(0, utils_1.isETHAddress)(priceRoute.destToken)))) {
|
|
318
|
+
if ((maybeWethCallData?.withdraw && (0, utils_1.isETHAddress)(priceRoute.destToken)) ||
|
|
319
|
+
(!exchangeParams[exchangeParams.length - 1].dexFuncHasRecipient &&
|
|
320
|
+
(0, utils_1.isETHAddress)(priceRoute.destToken))) {
|
|
455
321
|
const finalSpecialFlagCalldata = this.buildFinalSpecialFlagCalldata();
|
|
456
322
|
swapsCalldata = hexConcat([swapsCalldata, finalSpecialFlagCalldata]);
|
|
457
323
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Executor01BytecodeBuilder.js","sourceRoot":"","sources":["../../src/executor/Executor01BytecodeBuilder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Executor01BytecodeBuilder.js","sourceRoot":"","sources":["../../src/executor/Executor01BytecodeBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,28 +64,6 @@ export declare class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder<E
|
|
|
64
64
|
private packVerticalBranchingData;
|
|
65
65
|
private packVerticalBranchingCallData;
|
|
66
66
|
private buildVerticalBranchingCallData;
|
|
67
|
-
/**
|
|
68
|
-
* Where an ETH-dest final-hop branch leaves its output. Everything outside a
|
|
69
|
-
* revertable group (root unwrap/send, threading flags, sibling accounting)
|
|
70
|
-
* is computed from the primary's params, so the fallback block must end in
|
|
71
|
-
* the same place the try block would.
|
|
72
|
-
*/
|
|
73
|
-
private ethDestOutcome;
|
|
74
|
-
/**
|
|
75
|
-
* Wrap an already-assembled per-exchange unit in a revertable fallback group
|
|
76
|
-
* (specialDex 0xFF). The step's calldata payload is [28-byte padding]
|
|
77
|
-
* [tryLen(4)][fallbackLen(4)][try-block][fallback-block]; the try-block is the
|
|
78
|
-
* unit as it would have run inline, the fallback-block is the alternative's
|
|
79
|
-
* unit. On-chain, Executor02 runs the try-block in a self-call and, on revert,
|
|
80
|
-
* runs the fallback-block from the same input.
|
|
81
|
-
*
|
|
82
|
-
* Threading: when the group sits directly in a horizontal sequence
|
|
83
|
-
* (insidePath = false) it must thread the running amount to the next step, so
|
|
84
|
-
* it uses the vertical-branching wrapper's flag/destTokenPos semantics. When
|
|
85
|
-
* it is a member of a split (insidePath = true), the vertical-branching
|
|
86
|
-
* wrapper above it does the threading, so the group skips the balance check.
|
|
87
|
-
*/
|
|
88
|
-
private wrapInRevertableGroup;
|
|
89
67
|
private buildSingleSwapExchangeCallData;
|
|
90
68
|
private appendWrapEthCallData;
|
|
91
69
|
private eachDexOnSwapNeedsWrapNative;
|
|
@@ -352,200 +352,12 @@ class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
352
352
|
const fromAmountPos = hexDataLength(data) - 64 - 28; // 64 (position), 28 (selector padding);
|
|
353
353
|
return this.packVerticalBranchingCallData(data, fromAmountPos, destTokenPos < 0 ? 0 : destTokenPos, flag);
|
|
354
354
|
}
|
|
355
|
-
|
|
356
|
-
* Where an ETH-dest final-hop branch leaves its output. Everything outside a
|
|
357
|
-
* revertable group (root unwrap/send, threading flags, sibling accounting)
|
|
358
|
-
* is computed from the primary's params, so the fallback block must end in
|
|
359
|
-
* the same place the try block would.
|
|
360
|
-
*/
|
|
361
|
-
ethDestOutcome(param, endState,
|
|
362
|
-
// Primary raw-ETH last-hop params are built with recipient = Augustus, so
|
|
363
|
-
// a recipient-capable dex delivers itself. Fallback params are always
|
|
364
|
-
// built with recipient = executor (see getDexCallsParams) — their output
|
|
365
|
-
// stays on the executor no matter what the dex supports.
|
|
366
|
-
deliversViaRecipient) {
|
|
367
|
-
if (endState.sentNative)
|
|
368
|
-
return 'sent';
|
|
369
|
-
if (param.needWrapNative)
|
|
370
|
-
return endState.unwrapped ? 'eth' : 'weth';
|
|
371
|
-
return deliversViaRecipient && param.dexFuncHasRecipient ? 'sent' : 'eth';
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* Wrap an already-assembled per-exchange unit in a revertable fallback group
|
|
375
|
-
* (specialDex 0xFF). The step's calldata payload is [28-byte padding]
|
|
376
|
-
* [tryLen(4)][fallbackLen(4)][try-block][fallback-block]; the try-block is the
|
|
377
|
-
* unit as it would have run inline, the fallback-block is the alternative's
|
|
378
|
-
* unit. On-chain, Executor02 runs the try-block in a self-call and, on revert,
|
|
379
|
-
* runs the fallback-block from the same input.
|
|
380
|
-
*
|
|
381
|
-
* Threading: when the group sits directly in a horizontal sequence
|
|
382
|
-
* (insidePath = false) it must thread the running amount to the next step, so
|
|
383
|
-
* it uses the vertical-branching wrapper's flag/destTokenPos semantics. When
|
|
384
|
-
* it is a member of a split (insidePath = true), the vertical-branching
|
|
385
|
-
* wrapper above it does the threading, so the group skips the balance check.
|
|
386
|
-
*/
|
|
387
|
-
wrapInRevertableGroup(priceRoute, routeIndex, swapIndex, swapExchangeIndex, exchangeParams, exchangeParamIndex, tryBlock, allowToAddWrap, prevBranchWasWrapped, insidePath, wrapAddedInsideTry, tryEndState, maybeWethCallData, applyVerticalBranching) {
|
|
388
|
-
const swap = priceRoute.bestRoute[routeIndex].swaps[swapIndex];
|
|
389
|
-
const swapExchange = swap.swapExchanges[swapExchangeIndex];
|
|
390
|
-
const fallbackParam = exchangeParams[exchangeParamIndex].fallbackParam;
|
|
391
|
-
// fallback-block: substitute the fallback param at this hop and recompute
|
|
392
|
-
// flags for it. Fresh wrap maps: the fallback is an independent alternative
|
|
393
|
-
// whose own wrap/approve must be encoded inside its block.
|
|
394
|
-
const fallbackExchangeParams = exchangeParams.slice();
|
|
395
|
-
fallbackExchangeParams[exchangeParamIndex] = fallbackParam;
|
|
396
|
-
const fallbackFlags = this.buildFlags(priceRoute, fallbackExchangeParams, maybeWethCallData);
|
|
397
|
-
const fallbackEndState = {
|
|
398
|
-
unwrapped: false,
|
|
399
|
-
sentNative: false,
|
|
400
|
-
};
|
|
401
|
-
let fallbackBlock = this.buildSingleSwapExchangeCallData(priceRoute, routeIndex, swapIndex, swapExchangeIndex, fallbackExchangeParams, fallbackFlags, {}, allowToAddWrap, prevBranchWasWrapped, {}, maybeWethCallData, false, // addMultiSwapMetadata — the path metadata wraps the group, not the block
|
|
402
|
-
applyVerticalBranching, true, // disableRevertableGroup — never nest
|
|
403
|
-
fallbackEndState);
|
|
404
|
-
// Normalize the fallback block's INPUT. When the primary's wrap lives outside
|
|
405
|
-
// the try block (root/shared wrap), it persists after a try revert, so the
|
|
406
|
-
// branch holds its slice as WETH — unlike a try-internal wrap, which rolls
|
|
407
|
-
// back leaving raw ETH (that case the fallback unit already handles by
|
|
408
|
-
// adding its own approve+deposit).
|
|
409
|
-
if ((0, utils_1.isETHAddress)(swap.srcToken) &&
|
|
410
|
-
Boolean(exchangeParams[exchangeParamIndex].needWrapNative) &&
|
|
411
|
-
!wrapAddedInsideTry) {
|
|
412
|
-
if (!fallbackParam.needWrapNative) {
|
|
413
|
-
// WETH in hand, fallback consumes raw ETH: unwrap the slice first (the
|
|
414
|
-
// running amount is inserted at runtime; rolls back with the block).
|
|
415
|
-
fallbackBlock = hexConcat([
|
|
416
|
-
this.buildUnwrapEthCallData(this.getWETHAddress(fallbackParam), this.erc20Interface.encodeFunctionData('withdraw', [
|
|
417
|
-
swapExchange.srcAmount,
|
|
418
|
-
])),
|
|
419
|
-
fallbackBlock,
|
|
420
|
-
]);
|
|
421
|
-
}
|
|
422
|
-
else if (fallbackParam.approveData && !fallbackParam.skipApproval) {
|
|
423
|
-
// WETH in hand, fallback also consumes WETH: no deposit needed, but the
|
|
424
|
-
// unit skipped its approve (it only rides with the deposit branch,
|
|
425
|
-
// which the external wrap suppresses) — prepend it.
|
|
426
|
-
fallbackBlock = hexConcat([
|
|
427
|
-
this.buildApproveCallData(fallbackParam.approveData.target, fallbackParam.approveData.token, fallbackFlags.approves[exchangeParamIndex], fallbackParam.permit2Approval),
|
|
428
|
-
fallbackBlock,
|
|
429
|
-
]);
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
// Normalize the fallback block's OUTPUT on an ETH-dest final hop. The
|
|
433
|
-
// machinery after the group was computed from the primary's params, so the
|
|
434
|
-
// fallback must leave its output in the same place the try block would:
|
|
435
|
-
// - fallback already delivered to Augustus ('sent'): terminal and
|
|
436
|
-
// total-preserving — the executor threads only what it still holds and
|
|
437
|
-
// Augustus' received-amount check sees the sum; nothing to append.
|
|
438
|
-
// - try ends in WETH, fallback holds raw ETH: wrap it (the running amount
|
|
439
|
-
// is the fallback's output at this point).
|
|
440
|
-
// - try ends in raw ETH or delivered: unwrap a WETH-holding fallback
|
|
441
|
-
// (amount inserted at runtime), then send if the try would have.
|
|
442
|
-
const isLastSwap = swapIndex === priceRoute.bestRoute[routeIndex].swaps.length - 1;
|
|
443
|
-
if ((0, utils_1.isETHAddress)(swap.destToken) && isLastSwap) {
|
|
444
|
-
const tryOutcome = this.ethDestOutcome(exchangeParams[exchangeParamIndex], tryEndState, true);
|
|
445
|
-
const fallbackOutcome = this.ethDestOutcome(fallbackParam, fallbackEndState, false);
|
|
446
|
-
if (fallbackOutcome !== tryOutcome && fallbackOutcome !== 'sent') {
|
|
447
|
-
if (tryOutcome === 'weth') {
|
|
448
|
-
fallbackBlock = hexConcat([
|
|
449
|
-
fallbackBlock,
|
|
450
|
-
this.buildWrapEthCallData(this.getWETHAddress(fallbackParam), this.erc20Interface.encodeFunctionData('deposit'), types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_DONT_CHECK_BALANCE_AFTER_SWAP),
|
|
451
|
-
]);
|
|
452
|
-
}
|
|
453
|
-
else {
|
|
454
|
-
if (fallbackOutcome === 'weth') {
|
|
455
|
-
fallbackBlock = hexConcat([
|
|
456
|
-
fallbackBlock,
|
|
457
|
-
this.buildUnwrapEthCallData(this.getWETHAddress(fallbackParam), this.erc20Interface.encodeFunctionData('withdraw', [
|
|
458
|
-
swapExchange.destAmount,
|
|
459
|
-
])),
|
|
460
|
-
]);
|
|
461
|
-
}
|
|
462
|
-
if (tryOutcome === 'sent') {
|
|
463
|
-
fallbackBlock = hexConcat([
|
|
464
|
-
fallbackBlock,
|
|
465
|
-
this.buildFinalSpecialFlagCalldata(),
|
|
466
|
-
]);
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
// Normalize the fallback block's OUTPUT on a WETH-dest final hop when the
|
|
472
|
-
// fallback was re-encoded to deliver on the executor (needUnwrapNative
|
|
473
|
-
// raw-ETH dex — see buildSingleExchangeParam): after its wrap-after step
|
|
474
|
-
// the executor holds the WETH, but the try branch (recipient-capable
|
|
475
|
-
// primary) delivered straight to Augustus and shaped no forward — append
|
|
476
|
-
// one inside the block, amount inserted from the threaded output.
|
|
477
|
-
if (isLastSwap &&
|
|
478
|
-
fallbackParam.deliversToExecutor &&
|
|
479
|
-
!(0, utils_1.isETHAddress)(swap.destToken) &&
|
|
480
|
-
priceRoute.destToken === swap.destToken &&
|
|
481
|
-
exchangeParams[exchangeParamIndex].dexFuncHasRecipient) {
|
|
482
|
-
fallbackBlock = hexConcat([
|
|
483
|
-
fallbackBlock,
|
|
484
|
-
this.buildTransferCallData(this.erc20Interface.encodeFunctionData('transfer', [
|
|
485
|
-
this.dexHelper.config.data.augustusV6Address,
|
|
486
|
-
swapExchange.destAmount,
|
|
487
|
-
]), swap.destToken),
|
|
488
|
-
]);
|
|
489
|
-
}
|
|
490
|
-
// payload = [padding(28)][tryLen(4)][fallbackLen(4)][try][fallback]
|
|
491
|
-
let payload = hexConcat([
|
|
492
|
-
constants_1.ZEROS_28_BYTES,
|
|
493
|
-
hexZeroPad(hexlify(hexDataLength(tryBlock)), 4),
|
|
494
|
-
hexZeroPad(hexlify(hexDataLength(fallbackBlock)), 4),
|
|
495
|
-
tryBlock,
|
|
496
|
-
fallbackBlock,
|
|
497
|
-
]);
|
|
498
|
-
const flag = insidePath
|
|
499
|
-
? types_1.Flag.DONT_INSERT_FROM_AMOUNT_DONT_CHECK_BALANCE_AFTER_SWAP // 0
|
|
500
|
-
: this.buildVerticalBranchingFlag(priceRoute, swap, exchangeParams, routeIndex, swapIndex);
|
|
501
|
-
// Locate the dest token in the payload for the post-group balance check
|
|
502
|
-
// (append it if absent — trailing bytes after the blocks are ignored on-chain).
|
|
503
|
-
let destTokenPos = 0;
|
|
504
|
-
if (flag % 3 === 2) {
|
|
505
|
-
const destTokenAddr = (0, utils_1.isETHAddress)(swap.destToken)
|
|
506
|
-
? this.dexHelper.config.data.wrappedNativeTokenAddress.toLowerCase()
|
|
507
|
-
: swap.destToken.toLowerCase();
|
|
508
|
-
payload = this.addTokenAddressToCallData(payload, destTokenAddr);
|
|
509
|
-
const destTokenAddrIndex = payload
|
|
510
|
-
.replace('0x', '')
|
|
511
|
-
.indexOf(destTokenAddr.replace('0x', ''));
|
|
512
|
-
destTokenPos = destTokenAddrIndex / 2 - 40;
|
|
513
|
-
if (destTokenPos < 0)
|
|
514
|
-
destTokenPos = 0;
|
|
515
|
-
}
|
|
516
|
-
return solidityPack([
|
|
517
|
-
'bytes20',
|
|
518
|
-
'bytes4',
|
|
519
|
-
'bytes2',
|
|
520
|
-
'bytes2',
|
|
521
|
-
'bytes1',
|
|
522
|
-
'bytes1',
|
|
523
|
-
'bytes2',
|
|
524
|
-
'bytes',
|
|
525
|
-
], [
|
|
526
|
-
constants_1.ZEROS_20_BYTES, // no call target for a group
|
|
527
|
-
hexZeroPad(hexlify(hexDataLength(payload)), 4), // payload length (incl. padding)
|
|
528
|
-
hexZeroPad(hexlify(0), 2), // fromAmountPos (unused by the group branch)
|
|
529
|
-
hexZeroPad(hexlify(destTokenPos), 2), // destTokenPos
|
|
530
|
-
hexZeroPad(hexlify(0), 1), // returnAmountPos (contract forces 0xFF)
|
|
531
|
-
hexZeroPad(hexlify(types_1.SpecialDex.REVERTABLE_FALLBACK_GROUP), 1), // 0xFF
|
|
532
|
-
hexZeroPad(hexlify(flag), 2), // flag (balance-check threading)
|
|
533
|
-
payload,
|
|
534
|
-
]);
|
|
535
|
-
}
|
|
536
|
-
buildSingleSwapExchangeCallData(priceRoute, routeIndex, swapIndex, swapExchangeIndex, exchangeParams, flags, addedWrapToSwapExchangeMap, allowToAddWrap = true, prevBranchWasWrapped = false, unwrapToSwapMap, maybeWethCallData, addMultiSwapMetadata, applyVerticalBranching, disableRevertableGroup = false, endStateOut) {
|
|
355
|
+
buildSingleSwapExchangeCallData(priceRoute, routeIndex, swapIndex, swapExchangeIndex, exchangeParams, flags, addedWrapToSwapExchangeMap, allowToAddWrap = true, prevBranchWasWrapped = false, unwrapToSwapMap, maybeWethCallData, addMultiSwapMetadata, applyVerticalBranching) {
|
|
537
356
|
const isSimpleSwap = priceRoute.bestRoute.length === 1 &&
|
|
538
357
|
priceRoute.bestRoute[0].swaps.length === 1;
|
|
539
358
|
let swapExchangeCallData = '';
|
|
540
359
|
const swap = priceRoute.bestRoute[routeIndex].swaps[swapIndex];
|
|
541
360
|
const swapExchange = swap.swapExchanges[swapExchangeIndex];
|
|
542
|
-
// What this unit appends for ETH-dest endings — a revertable group's
|
|
543
|
-
// fallback block must end in the same state as its try block, so both
|
|
544
|
-
// sides report what they did (see wrapInRevertableGroup).
|
|
545
|
-
const endState = {
|
|
546
|
-
unwrapped: false,
|
|
547
|
-
sentNative: false,
|
|
548
|
-
};
|
|
549
361
|
let exchangeParamIndex = 0;
|
|
550
362
|
let tempExchangeParamIndex = 0;
|
|
551
363
|
priceRoute.bestRoute.map(route => route.swaps.map(curSwap => {
|
|
@@ -656,7 +468,6 @@ class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
656
468
|
this.isLastExchangeWithNeedWrapNative(priceRoute, swap, exchangeParams, exchangeParamIndex);
|
|
657
469
|
if (customWethAddress || needUnwrap) {
|
|
658
470
|
unwrapToSwapMap[swapIndex] = true;
|
|
659
|
-
endState.unwrapped = true;
|
|
660
471
|
withdrawCallData = this.buildUnwrapEthCallData(this.getWETHAddress(curExchangeParam), maybeWethCallData.withdraw.calldata);
|
|
661
472
|
}
|
|
662
473
|
swapExchangeCallData = hexConcat([
|
|
@@ -664,7 +475,6 @@ class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
664
475
|
withdrawCallData,
|
|
665
476
|
]);
|
|
666
477
|
if (isSimpleSwap && (needUnwrap || customWethAddress)) {
|
|
667
|
-
endState.sentNative = true;
|
|
668
478
|
const finalSpecialFlagCalldata = this.buildFinalSpecialFlagCalldata();
|
|
669
479
|
swapExchangeCallData = hexConcat([
|
|
670
480
|
swapExchangeCallData,
|
|
@@ -711,33 +521,12 @@ class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
711
521
|
isLastSwap &&
|
|
712
522
|
// don't need to send eth without unwrapping, handling unwrap and sendEth in the end of root branch
|
|
713
523
|
!this.doesRouteNeedsRootUnwrapEth(priceRoute, exchangeParams)) {
|
|
714
|
-
endState.sentNative = true;
|
|
715
524
|
const finalSpecialFlagCalldata = this.buildFinalSpecialFlagCalldata();
|
|
716
525
|
swapExchangeCallData = hexConcat([
|
|
717
526
|
swapExchangeCallData,
|
|
718
527
|
finalSpecialFlagCalldata,
|
|
719
528
|
]);
|
|
720
529
|
}
|
|
721
|
-
if (endStateOut) {
|
|
722
|
-
endStateOut.unwrapped = endState.unwrapped;
|
|
723
|
-
endStateOut.sentNative = endState.sentNative;
|
|
724
|
-
}
|
|
725
|
-
const fallbackParam = curExchangeParam.fallbackParam;
|
|
726
|
-
if (!disableRevertableGroup &&
|
|
727
|
-
fallbackParam &&
|
|
728
|
-
// Mixed wrap-ness on a MID-ROUTE ETH-dest hop is not normalized (raw ETH
|
|
729
|
-
// as an intermediate threading token is flag-7 territory the group's
|
|
730
|
-
// balance check doesn't model) — run plain. Final-hop mismatches are
|
|
731
|
-
// normalized inside wrapInRevertableGroup (input and output side).
|
|
732
|
-
!((0, utils_1.isETHAddress)(swap.destToken) &&
|
|
733
|
-
!isLastSwap &&
|
|
734
|
-
Boolean(curExchangeParam.needWrapNative) !==
|
|
735
|
-
Boolean(fallbackParam.needWrapNative))) {
|
|
736
|
-
swapExchangeCallData = this.wrapInRevertableGroup(priceRoute, routeIndex, swapIndex, swapExchangeIndex, exchangeParams, exchangeParamIndex, swapExchangeCallData, allowToAddWrap, prevBranchWasWrapped, !!addMultiSwapMetadata,
|
|
737
|
-
// Whether the primary's wrap sits INSIDE the try block (rolls back with
|
|
738
|
-
// it) or outside (root/shared — persists after a try revert).
|
|
739
|
-
!!addedWrapToSwapExchangeMap[`${routeIndex}_${swapIndex}_${swapExchangeIndex}`], endState, maybeWethCallData, applyVerticalBranching);
|
|
740
|
-
}
|
|
741
530
|
if (addMultiSwapMetadata) {
|
|
742
531
|
return this.addMultiSwapMetadata(priceRoute, exchangeParams, swapExchangeCallData, swapExchange.percent, swap, exchangeParamIndex, addedWrapToSwapExchangeMap[`${routeIndex}_${swapIndex}_${swapExchangeIndex}`], addedUnwrapForDexWithNoNeedWrapNative);
|
|
743
532
|
}
|