@paraswap/dex-lib 5.0.7 → 5.0.8-force-rfq-revert.1
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 +15 -14
- package/build/config.js.map +1 -1
- package/build/dex/bebop/bebop.d.ts +2 -2
- package/build/dex/bebop/bebop.js +15 -2
- package/build/dex/bebop/bebop.js.map +1 -1
- package/build/dex/cables/cables.d.ts +2 -2
- package/build/dex/cables/cables.js +6 -2
- package/build/dex/cables/cables.js.map +1 -1
- package/build/dex/dexalot/dexalot.d.ts +2 -2
- package/build/dex/dexalot/dexalot.js +6 -2
- package/build/dex/dexalot/dexalot.js.map +1 -1
- package/build/dex/fluid-dex/fluid-dex.d.ts +2 -0
- package/build/dex/fluid-dex/fluid-dex.js +55 -31
- package/build/dex/fluid-dex/fluid-dex.js.map +1 -1
- package/build/dex/generic-rfq/generic-rfq.d.ts +2 -2
- package/build/dex/generic-rfq/generic-rfq.js +11 -2
- 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 +6 -2
- package/build/dex/hashflow/hashflow.js.map +1 -1
- package/build/dex/index.js +8 -0
- package/build/dex/index.js.map +1 -1
- package/build/dex/metric/metric.js +5 -1
- package/build/dex/metric/metric.js.map +1 -1
- package/build/dex/native/native.d.ts +2 -2
- package/build/dex/native/native.js +8 -2
- package/build/dex/native/native.js.map +1 -1
- package/build/dex/paraswap-limit-orders/config.js +6 -0
- 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 +11 -2
- 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 +10 -2
- package/build/dex/swaap-v2/swaap-v2.js.map +1 -1
- package/build/dex/uniswap-v3/config.js +28 -0
- package/build/dex/uniswap-v3/config.js.map +1 -1
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js +1 -0
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js.map +1 -1
- package/build/executor/Executor01BytecodeBuilder.d.ts +8 -0
- package/build/executor/Executor01BytecodeBuilder.js +160 -14
- package/build/executor/Executor01BytecodeBuilder.js.map +1 -1
- package/build/executor/Executor02BytecodeBuilder.d.ts +22 -0
- package/build/executor/Executor02BytecodeBuilder.js +226 -3
- package/build/executor/Executor02BytecodeBuilder.js.map +1 -1
- package/build/executor/ExecutorDetector.d.ts +1 -0
- package/build/executor/ExecutorDetector.js +14 -0
- package/build/executor/ExecutorDetector.js.map +1 -1
- package/build/executor/types.d.ts +2 -1
- package/build/executor/types.js +4 -0
- package/build/executor/types.js.map +1 -1
- package/build/generic-swap-transaction-builder.d.ts +3 -1
- package/build/generic-swap-transaction-builder.js +189 -51
- package/build/generic-swap-transaction-builder.js.map +1 -1
- package/build/implementations/local-paraswap-sdk.d.ts +1 -0
- package/build/implementations/local-paraswap-sdk.js +7 -1
- package/build/implementations/local-paraswap-sdk.js.map +1 -1
- package/build/types.d.ts +3 -0
- package/build/utils.d.ts +1 -0
- package/build/utils.js +15 -1
- 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, } = exchangeParam;
|
|
33
|
+
const { dexFuncHasRecipient, needWrapNative, needUnwrapNative, specialDexFlag, specialDexSupportsInsertFromAmount, swappedAmountNotPresentInExchangeData, sendEthButSupportsInsertFromAmount, deliversToExecutor, } = 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,7 +56,11 @@ 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 ||
|
|
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)) {
|
|
60
64
|
dexFlag = forcePreventInsertFromAmount
|
|
61
65
|
? types_1.Flag.DONT_INSERT_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP
|
|
62
66
|
: types_1.Flag.INSERT_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP; // 8 or 11
|
|
@@ -65,8 +69,14 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
65
69
|
// check WETH src balance (should be 0) after. Some DEXes don't have a 1:1
|
|
66
70
|
// ETH -> custom_ETH rate.
|
|
67
71
|
if (isWETHSrc) {
|
|
72
|
+
// Also insert the runtime fromAmount into the dex calldata when the dex
|
|
73
|
+
// supports it: value is always the threaded amount, and split slicing can
|
|
74
|
+
// drift a wei from the quoted amount — dexes that require
|
|
75
|
+
// msg.value == amountIn (e.g. FluidDex) revert on the mismatch otherwise.
|
|
68
76
|
dexFlag =
|
|
69
|
-
|
|
77
|
+
sendEthButSupportsInsertFromAmount && !forcePreventInsertFromAmount
|
|
78
|
+
? types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_PLUS_INSERT_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP // 14
|
|
79
|
+
: types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP; // 5
|
|
70
80
|
}
|
|
71
81
|
else if (isWETHDest) {
|
|
72
82
|
// DEX returns native ETH; wrap after. Check ETH balance post-swap so the
|
|
@@ -99,7 +109,7 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
99
109
|
const swap = priceRoute.bestRoute[routeIndex].swaps[swapIndex];
|
|
100
110
|
const { srcToken, destToken } = swap;
|
|
101
111
|
const exchangeParam = exchangeParams[exchangeParamIndex];
|
|
102
|
-
const { dexFuncHasRecipient, needWrapNative, needUnwrapNative, specialDexFlag, specialDexSupportsInsertFromAmount, swappedAmountNotPresentInExchangeData, sendEthButSupportsInsertFromAmount, } = exchangeParam;
|
|
112
|
+
const { dexFuncHasRecipient, needWrapNative, needUnwrapNative, specialDexFlag, specialDexSupportsInsertFromAmount, swappedAmountNotPresentInExchangeData, sendEthButSupportsInsertFromAmount, deliversToExecutor, } = exchangeParam;
|
|
103
113
|
const isLastSwap = swapIndex === priceRoute.bestRoute[routeIndex].swaps.length - 1;
|
|
104
114
|
const isEthSrc = (0, utils_1.isETHAddress)(srcToken);
|
|
105
115
|
const isEthDest = (0, utils_1.isETHAddress)(destToken);
|
|
@@ -110,7 +120,8 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
110
120
|
(isSpecialDex && !specialDexSupportsInsertFromAmount);
|
|
111
121
|
const needUnwrap = needWrapNative && isEthDest && maybeWethCallData?.withdraw;
|
|
112
122
|
const forceBalanceOfCheck = isLastSwap
|
|
113
|
-
?
|
|
123
|
+
? // deliversToExecutor: group fallback redirected to the executor (case C)
|
|
124
|
+
!dexFuncHasRecipient || needUnwrap || !!deliversToExecutor
|
|
114
125
|
: true;
|
|
115
126
|
const needSendEth = isEthSrc && !needWrapNative;
|
|
116
127
|
const needCheckEthBalance = isEthDest && !needWrapNative;
|
|
@@ -152,8 +163,14 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
152
163
|
: types_1.Flag.INSERT_FROM_AMOUNT_DONT_CHECK_BALANCE_AFTER_SWAP; // 3
|
|
153
164
|
}
|
|
154
165
|
if (isWETHSrc) {
|
|
166
|
+
// Also insert the runtime fromAmount into the dex calldata when the dex
|
|
167
|
+
// supports it: value is always the threaded amount, and split slicing can
|
|
168
|
+
// drift a wei from the quoted amount — dexes that require
|
|
169
|
+
// msg.value == amountIn (e.g. FluidDex) revert on the mismatch otherwise.
|
|
155
170
|
dexFlag =
|
|
156
|
-
|
|
171
|
+
sendEthButSupportsInsertFromAmount && !forcePreventInsertFromAmount
|
|
172
|
+
? types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_PLUS_INSERT_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP // 14
|
|
173
|
+
: types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP; // 5
|
|
157
174
|
}
|
|
158
175
|
else if (isWETHDest) {
|
|
159
176
|
dexFlag = forcePreventInsertFromAmount
|
|
@@ -245,6 +262,119 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
245
262
|
}
|
|
246
263
|
return swapCallData;
|
|
247
264
|
}
|
|
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
|
+
}
|
|
248
378
|
buildDexCallData(params) {
|
|
249
379
|
const { priceRoute, exchangeParamIndex, exchangeParams, routeIndex, swapIndex, flag, swapExchangeIndex, } = params;
|
|
250
380
|
const dontCheckBalanceAfterSwap = flag % 3 === 0;
|
|
@@ -284,17 +414,20 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
284
414
|
}
|
|
285
415
|
buildByteCode(priceRoute, exchangeParams, sender, maybeWethCallData) {
|
|
286
416
|
const flags = this.buildFlags(priceRoute, exchangeParams, maybeWethCallData);
|
|
287
|
-
let swapsCalldata = exchangeParams.reduce((acc, ep, index) =>
|
|
288
|
-
|
|
289
|
-
this.buildSingleSwapCallData({
|
|
417
|
+
let swapsCalldata = exchangeParams.reduce((acc, ep, index) => {
|
|
418
|
+
const callDataParams = {
|
|
290
419
|
priceRoute,
|
|
291
420
|
exchangeParams,
|
|
292
421
|
index,
|
|
293
422
|
flags,
|
|
294
423
|
sender,
|
|
295
424
|
maybeWethCallData,
|
|
296
|
-
}
|
|
297
|
-
|
|
425
|
+
};
|
|
426
|
+
const stepCallData = ep.fallbackParam
|
|
427
|
+
? this.buildRevertableGroup(callDataParams)
|
|
428
|
+
: this.buildSingleSwapCallData(callDataParams);
|
|
429
|
+
return hexConcat([acc, stepCallData]);
|
|
430
|
+
}, '0x');
|
|
298
431
|
if (!exchangeParams[exchangeParams.length - 1].dexFuncHasRecipient &&
|
|
299
432
|
!(0, utils_1.isETHAddress)(priceRoute.destToken)) {
|
|
300
433
|
const transferCallData = this.buildTransferCallData(this.erc20Interface.encodeFunctionData('transfer', [
|
|
@@ -303,9 +436,22 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
303
436
|
]), priceRoute.destToken);
|
|
304
437
|
swapsCalldata = hexConcat([swapsCalldata, transferCallData]);
|
|
305
438
|
}
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
439
|
+
// A final-hop group whose raw-native primary delivers to Augustus itself
|
|
440
|
+
// sends the fallback's native output inside the fallback block (see
|
|
441
|
+
// buildRevertableGroup). The route-level withdraw template only exists
|
|
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)))) {
|
|
309
455
|
const finalSpecialFlagCalldata = this.buildFinalSpecialFlagCalldata();
|
|
310
456
|
swapsCalldata = hexConcat([swapsCalldata, finalSpecialFlagCalldata]);
|
|
311
457
|
}
|
|
@@ -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,6 +64,28 @@ 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;
|
|
67
89
|
private buildSingleSwapExchangeCallData;
|
|
68
90
|
private appendWrapEthCallData;
|
|
69
91
|
private eachDexOnSwapNeedsWrapNative;
|
|
@@ -65,8 +65,14 @@ class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
65
65
|
// check WETH src balance (should be 0) after. Some DEXes don't have a 1:1
|
|
66
66
|
// ETH -> custom_ETH rate.
|
|
67
67
|
if (isWETHSrc) {
|
|
68
|
+
// Also insert the runtime fromAmount into the dex calldata when the dex
|
|
69
|
+
// supports it: value is always the threaded amount, and split slicing can
|
|
70
|
+
// drift a wei from the quoted amount — dexes that require
|
|
71
|
+
// msg.value == amountIn (e.g. FluidDex) revert on the mismatch otherwise.
|
|
68
72
|
dexFlag =
|
|
69
|
-
|
|
73
|
+
sendEthButSupportsInsertFromAmount && !forcePreventInsertFromAmount
|
|
74
|
+
? types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_PLUS_INSERT_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP // 14
|
|
75
|
+
: types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP; // 5
|
|
70
76
|
}
|
|
71
77
|
else if (isWETHDest) {
|
|
72
78
|
dexFlag = forcePreventInsertFromAmount
|
|
@@ -168,8 +174,14 @@ class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
168
174
|
// check WETH src balance (should be 0) after. Some DEXes don't have a 1:1
|
|
169
175
|
// ETH -> custom_ETH rate.
|
|
170
176
|
if (isWETHSrcUnwrap) {
|
|
177
|
+
// Also insert the runtime fromAmount into the dex calldata when the dex
|
|
178
|
+
// supports it: value is always the threaded amount, and split slicing can
|
|
179
|
+
// drift a wei from the quoted amount — dexes that require
|
|
180
|
+
// msg.value == amountIn (e.g. FluidDex) revert on the mismatch otherwise.
|
|
171
181
|
dexFlag =
|
|
172
|
-
|
|
182
|
+
sendEthButSupportsInsertFromAmount && !forcePreventInsertFromAmount
|
|
183
|
+
? types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_PLUS_INSERT_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP // 14
|
|
184
|
+
: types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP; // 5
|
|
173
185
|
}
|
|
174
186
|
else if (isWETHDestWrap) {
|
|
175
187
|
dexFlag = forcePreventInsertFromAmount
|
|
@@ -340,12 +352,200 @@ class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
340
352
|
const fromAmountPos = hexDataLength(data) - 64 - 28; // 64 (position), 28 (selector padding);
|
|
341
353
|
return this.packVerticalBranchingCallData(data, fromAmountPos, destTokenPos < 0 ? 0 : destTokenPos, flag);
|
|
342
354
|
}
|
|
343
|
-
|
|
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) {
|
|
344
537
|
const isSimpleSwap = priceRoute.bestRoute.length === 1 &&
|
|
345
538
|
priceRoute.bestRoute[0].swaps.length === 1;
|
|
346
539
|
let swapExchangeCallData = '';
|
|
347
540
|
const swap = priceRoute.bestRoute[routeIndex].swaps[swapIndex];
|
|
348
541
|
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
|
+
};
|
|
349
549
|
let exchangeParamIndex = 0;
|
|
350
550
|
let tempExchangeParamIndex = 0;
|
|
351
551
|
priceRoute.bestRoute.map(route => route.swaps.map(curSwap => {
|
|
@@ -456,6 +656,7 @@ class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
456
656
|
this.isLastExchangeWithNeedWrapNative(priceRoute, swap, exchangeParams, exchangeParamIndex);
|
|
457
657
|
if (customWethAddress || needUnwrap) {
|
|
458
658
|
unwrapToSwapMap[swapIndex] = true;
|
|
659
|
+
endState.unwrapped = true;
|
|
459
660
|
withdrawCallData = this.buildUnwrapEthCallData(this.getWETHAddress(curExchangeParam), maybeWethCallData.withdraw.calldata);
|
|
460
661
|
}
|
|
461
662
|
swapExchangeCallData = hexConcat([
|
|
@@ -463,6 +664,7 @@ class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
463
664
|
withdrawCallData,
|
|
464
665
|
]);
|
|
465
666
|
if (isSimpleSwap && (needUnwrap || customWethAddress)) {
|
|
667
|
+
endState.sentNative = true;
|
|
466
668
|
const finalSpecialFlagCalldata = this.buildFinalSpecialFlagCalldata();
|
|
467
669
|
swapExchangeCallData = hexConcat([
|
|
468
670
|
swapExchangeCallData,
|
|
@@ -509,12 +711,33 @@ class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
509
711
|
isLastSwap &&
|
|
510
712
|
// don't need to send eth without unwrapping, handling unwrap and sendEth in the end of root branch
|
|
511
713
|
!this.doesRouteNeedsRootUnwrapEth(priceRoute, exchangeParams)) {
|
|
714
|
+
endState.sentNative = true;
|
|
512
715
|
const finalSpecialFlagCalldata = this.buildFinalSpecialFlagCalldata();
|
|
513
716
|
swapExchangeCallData = hexConcat([
|
|
514
717
|
swapExchangeCallData,
|
|
515
718
|
finalSpecialFlagCalldata,
|
|
516
719
|
]);
|
|
517
720
|
}
|
|
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
|
+
}
|
|
518
741
|
if (addMultiSwapMetadata) {
|
|
519
742
|
return this.addMultiSwapMetadata(priceRoute, exchangeParams, swapExchangeCallData, swapExchange.percent, swap, exchangeParamIndex, addedWrapToSwapExchangeMap[`${routeIndex}_${swapIndex}_${swapExchangeIndex}`], addedUnwrapForDexWithNoNeedWrapNative);
|
|
520
743
|
}
|