@paraswap/dex-lib 5.0.9 → 5.0.11-force-rfq-revert.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/config.js +15 -14
- package/build/config.js.map +1 -1
- package/build/dex/balancer-v1/balancer-v1.d.ts +1 -1
- package/build/dex/balancer-v1/balancer-v1.js +14 -1
- package/build/dex/balancer-v1/balancer-v1.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/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 +124 -12
- package/build/executor/Executor01BytecodeBuilder.js.map +1 -1
- package/build/executor/Executor02BytecodeBuilder.d.ts +22 -0
- package/build/executor/Executor02BytecodeBuilder.js +208 -1
- 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 +5 -1
- package/build/generic-swap-transaction-builder.js +142 -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/tenderly-simulation.d.ts +96 -17
- package/build/tenderly-simulation.js +312 -45
- package/build/tenderly-simulation.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 — capture its real output
|
|
61
|
+
// 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
|
|
@@ -105,7 +109,7 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
105
109
|
const swap = priceRoute.bestRoute[routeIndex].swaps[swapIndex];
|
|
106
110
|
const { srcToken, destToken } = swap;
|
|
107
111
|
const exchangeParam = exchangeParams[exchangeParamIndex];
|
|
108
|
-
const { dexFuncHasRecipient, needWrapNative, needUnwrapNative, specialDexFlag, specialDexSupportsInsertFromAmount, swappedAmountNotPresentInExchangeData, sendEthButSupportsInsertFromAmount, } = exchangeParam;
|
|
112
|
+
const { dexFuncHasRecipient, needWrapNative, needUnwrapNative, specialDexFlag, specialDexSupportsInsertFromAmount, swappedAmountNotPresentInExchangeData, sendEthButSupportsInsertFromAmount, deliversToExecutor, } = exchangeParam;
|
|
109
113
|
const isLastSwap = swapIndex === priceRoute.bestRoute[routeIndex].swaps.length - 1;
|
|
110
114
|
const isEthSrc = (0, utils_1.isETHAddress)(srcToken);
|
|
111
115
|
const isEthDest = (0, utils_1.isETHAddress)(destToken);
|
|
@@ -116,7 +120,7 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
116
120
|
(isSpecialDex && !specialDexSupportsInsertFromAmount);
|
|
117
121
|
const needUnwrap = needWrapNative && isEthDest && maybeWethCallData?.withdraw;
|
|
118
122
|
const forceBalanceOfCheck = isLastSwap
|
|
119
|
-
? !dexFuncHasRecipient || needUnwrap
|
|
123
|
+
? !dexFuncHasRecipient || needUnwrap || !!deliversToExecutor
|
|
120
124
|
: true;
|
|
121
125
|
const needSendEth = isEthSrc && !needWrapNative;
|
|
122
126
|
const needCheckEthBalance = isEthDest && !needWrapNative;
|
|
@@ -257,6 +261,101 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
257
261
|
}
|
|
258
262
|
return swapCallData;
|
|
259
263
|
}
|
|
264
|
+
/**
|
|
265
|
+
* Build a revertable fallback group (Style 2): a special-dex step (0xFF) whose calldata payload is
|
|
266
|
+
* [tryLen(4)][fallbackLen(4)][try-block][fallback-block]. The try-block is the primary exchange's
|
|
267
|
+
* per-swap calldata; the fallback-block is the alternative's, built by substituting the fallback
|
|
268
|
+
* param at this hop and recomputing its flags. Executor01 runs the try-block in a self-call and,
|
|
269
|
+
* on revert, runs the fallback-block from the original pre-group input.
|
|
270
|
+
*/
|
|
271
|
+
buildRevertableGroup(params) {
|
|
272
|
+
const { priceRoute, index, exchangeParams, maybeWethCallData } = params;
|
|
273
|
+
const fallbackParam = exchangeParams[index].fallbackParam;
|
|
274
|
+
// Defensive: only reachable when a fallback is present.
|
|
275
|
+
if (!fallbackParam) {
|
|
276
|
+
return this.buildSingleSwapCallData(params);
|
|
277
|
+
}
|
|
278
|
+
// Mixed wrap-ness on an ETH-dest hop (raw-native primary vs WETH-based
|
|
279
|
+
// fallback or the reverse): final hops are normalized below via the
|
|
280
|
+
// fallback unit's unwrap / appended native send, mid-route hops further down.
|
|
281
|
+
const groupSwap = priceRoute.bestRoute[0].swaps[index];
|
|
282
|
+
const isLastSwapHop = index === priceRoute.bestRoute[0].swaps.length - 1;
|
|
283
|
+
const mixedEthDestWethFallback = (0, utils_1.isETHAddress)(groupSwap.destToken) &&
|
|
284
|
+
!exchangeParams[index].needWrapNative &&
|
|
285
|
+
Boolean(fallbackParam.needWrapNative);
|
|
286
|
+
// try-block: the primary's normal per-swap calldata (approve/wrap/swap, contiguous).
|
|
287
|
+
const tryBlock = this.buildSingleSwapCallData(params);
|
|
288
|
+
// fallback-block: substitute the fallback param at this hop and recompute flags for it.
|
|
289
|
+
const fallbackExchangeParams = exchangeParams.slice();
|
|
290
|
+
fallbackExchangeParams[index] = fallbackParam;
|
|
291
|
+
const fallbackFlags = this.buildFlags(priceRoute, fallbackExchangeParams, maybeWethCallData);
|
|
292
|
+
let fallbackBlock = this.buildSingleSwapCallData({
|
|
293
|
+
...params,
|
|
294
|
+
exchangeParams: fallbackExchangeParams,
|
|
295
|
+
flags: fallbackFlags,
|
|
296
|
+
});
|
|
297
|
+
// Recipient-capable primary (buildByteCode appends no route-level
|
|
298
|
+
// forward) with a fallback whose output stays on the executor: append
|
|
299
|
+
// the executor->Augustus forward inside the fallback block, amount
|
|
300
|
+
// inserted from the threaded fromAmount.
|
|
301
|
+
if (isLastSwapHop &&
|
|
302
|
+
!(0, utils_1.isETHAddress)(priceRoute.destToken) &&
|
|
303
|
+
exchangeParams[index].dexFuncHasRecipient &&
|
|
304
|
+
!fallbackParam.dexFuncHasRecipient) {
|
|
305
|
+
const transferCallData = this.buildTransferCallData(this.erc20Interface.encodeFunctionData('transfer', [
|
|
306
|
+
this.dexHelper.config.data.augustusV6Address,
|
|
307
|
+
priceRoute.destAmount,
|
|
308
|
+
]), priceRoute.destToken);
|
|
309
|
+
fallbackBlock = hexConcat([fallbackBlock, transferCallData]);
|
|
310
|
+
}
|
|
311
|
+
// Final-hop ETH-dest mixed wrap-ness: the raw-native primary delivers to
|
|
312
|
+
// Augustus itself while the WETH-based fallback unwraps onto the executor.
|
|
313
|
+
// Append the native send inside the fallback block (amount = threaded
|
|
314
|
+
// fromAmount); buildByteCode suppresses its route-level send for this shape.
|
|
315
|
+
if (mixedEthDestWethFallback &&
|
|
316
|
+
isLastSwapHop &&
|
|
317
|
+
exchangeParams[index].dexFuncHasRecipient) {
|
|
318
|
+
fallbackBlock = hexConcat([
|
|
319
|
+
fallbackBlock,
|
|
320
|
+
this.buildFinalSpecialFlagCalldata(),
|
|
321
|
+
]);
|
|
322
|
+
}
|
|
323
|
+
// Mid-route ETH-dest mixed wrap-ness: make the fallback block end in the
|
|
324
|
+
// token form the primary threads to the next hop (WETH only when a
|
|
325
|
+
// needWrapNative primary precedes a needWrapNative hop) — unwrap a
|
|
326
|
+
// WETH-holding fallback, wrap a raw-native one.
|
|
327
|
+
if (!isLastSwapHop && (0, utils_1.isETHAddress)(groupSwap.destToken)) {
|
|
328
|
+
const nextParam = exchangeParams[index + 1];
|
|
329
|
+
const unitEndsInWeth = (param) => Boolean(param.needWrapNative) &&
|
|
330
|
+
!(Boolean(param.needWrapNative) &&
|
|
331
|
+
!!maybeWethCallData?.withdraw &&
|
|
332
|
+
(!nextParam || !nextParam.needWrapNative));
|
|
333
|
+
const tryEndsInWeth = unitEndsInWeth(exchangeParams[index]);
|
|
334
|
+
const fallbackEndsInWeth = unitEndsInWeth(fallbackParam);
|
|
335
|
+
if (tryEndsInWeth !== fallbackEndsInWeth) {
|
|
336
|
+
fallbackBlock = hexConcat([
|
|
337
|
+
fallbackBlock,
|
|
338
|
+
fallbackEndsInWeth
|
|
339
|
+
? this.buildUnwrapEthCallData(this.getWETHAddress(fallbackParam), this.erc20Interface.encodeFunctionData('withdraw', [
|
|
340
|
+
groupSwap.swapExchanges[0].destAmount,
|
|
341
|
+
]))
|
|
342
|
+
: this.buildWrapEthCallData(this.getWETHAddress(fallbackParam), this.erc20Interface.encodeFunctionData('deposit'), types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_DONT_CHECK_BALANCE_AFTER_SWAP),
|
|
343
|
+
]);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
// payload = [tryLen(4)][fallbackLen(4)][try-block][fallback-block]
|
|
347
|
+
const payload = hexConcat([
|
|
348
|
+
hexZeroPad(hexlify(hexDataLength(tryBlock)), 4),
|
|
349
|
+
hexZeroPad(hexlify(hexDataLength(fallbackBlock)), 4),
|
|
350
|
+
tryBlock,
|
|
351
|
+
fallbackBlock,
|
|
352
|
+
]);
|
|
353
|
+
// Standard metadata packing; specialDexFlag = 0xFF marks the group. target/flag unused.
|
|
354
|
+
return this.buildCallData(constants_1.ZEROS_20_BYTES, payload, 0, // fromAmountPos
|
|
355
|
+
0, // destTokenPos
|
|
356
|
+
types_1.SpecialDex.REVERTABLE_FALLBACK_GROUP, types_1.Flag.DONT_INSERT_FROM_AMOUNT_DONT_CHECK_BALANCE_AFTER_SWAP, 0, // toAmountPos
|
|
357
|
+
0);
|
|
358
|
+
}
|
|
260
359
|
buildDexCallData(params) {
|
|
261
360
|
const { priceRoute, exchangeParamIndex, exchangeParams, routeIndex, swapIndex, flag, swapExchangeIndex, } = params;
|
|
262
361
|
const dontCheckBalanceAfterSwap = flag % 3 === 0;
|
|
@@ -296,17 +395,20 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
296
395
|
}
|
|
297
396
|
buildByteCode(priceRoute, exchangeParams, sender, maybeWethCallData) {
|
|
298
397
|
const flags = this.buildFlags(priceRoute, exchangeParams, maybeWethCallData);
|
|
299
|
-
let swapsCalldata = exchangeParams.reduce((acc, ep, index) =>
|
|
300
|
-
|
|
301
|
-
this.buildSingleSwapCallData({
|
|
398
|
+
let swapsCalldata = exchangeParams.reduce((acc, ep, index) => {
|
|
399
|
+
const callDataParams = {
|
|
302
400
|
priceRoute,
|
|
303
401
|
exchangeParams,
|
|
304
402
|
index,
|
|
305
403
|
flags,
|
|
306
404
|
sender,
|
|
307
405
|
maybeWethCallData,
|
|
308
|
-
}
|
|
309
|
-
|
|
406
|
+
};
|
|
407
|
+
const stepCallData = ep.fallbackParam
|
|
408
|
+
? this.buildRevertableGroup(callDataParams)
|
|
409
|
+
: this.buildSingleSwapCallData(callDataParams);
|
|
410
|
+
return hexConcat([acc, stepCallData]);
|
|
411
|
+
}, '0x');
|
|
310
412
|
if (!exchangeParams[exchangeParams.length - 1].dexFuncHasRecipient &&
|
|
311
413
|
!(0, utils_1.isETHAddress)(priceRoute.destToken)) {
|
|
312
414
|
const transferCallData = this.buildTransferCallData(this.erc20Interface.encodeFunctionData('transfer', [
|
|
@@ -315,9 +417,19 @@ class Executor01BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
315
417
|
]), priceRoute.destToken);
|
|
316
418
|
swapsCalldata = hexConcat([swapsCalldata, transferCallData]);
|
|
317
419
|
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
420
|
+
// The group already sends the fallback's native output inside its block
|
|
421
|
+
// (see buildRevertableGroup); a route-level send here would also run
|
|
422
|
+
// after the try branch, with an unthreaded fromAmount.
|
|
423
|
+
const lastParam = exchangeParams[exchangeParams.length - 1];
|
|
424
|
+
const groupHandlesNativeSend = (0, utils_1.isETHAddress)(priceRoute.destToken) &&
|
|
425
|
+
!!lastParam.fallbackParam &&
|
|
426
|
+
Boolean(lastParam.fallbackParam.needWrapNative) &&
|
|
427
|
+
!lastParam.needWrapNative &&
|
|
428
|
+
lastParam.dexFuncHasRecipient;
|
|
429
|
+
if (!groupHandlesNativeSend &&
|
|
430
|
+
((maybeWethCallData?.withdraw && (0, utils_1.isETHAddress)(priceRoute.destToken)) ||
|
|
431
|
+
(!exchangeParams[exchangeParams.length - 1].dexFuncHasRecipient &&
|
|
432
|
+
(0, utils_1.isETHAddress)(priceRoute.destToken)))) {
|
|
321
433
|
const finalSpecialFlagCalldata = this.buildFinalSpecialFlagCalldata();
|
|
322
434
|
swapsCalldata = hexConcat([swapsCalldata, finalSpecialFlagCalldata]);
|
|
323
435
|
}
|
|
@@ -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;
|
|
@@ -352,12 +352,196 @@ 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
|
-
|
|
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
|
+
const fallbackWrapMap = {};
|
|
402
|
+
let fallbackBlock = this.buildSingleSwapExchangeCallData(priceRoute, routeIndex, swapIndex, swapExchangeIndex, fallbackExchangeParams, fallbackFlags, fallbackWrapMap, allowToAddWrap, prevBranchWasWrapped, {}, maybeWethCallData, false, // addMultiSwapMetadata — the path metadata wraps the group, not the block
|
|
403
|
+
applyVerticalBranching, true, // disableRevertableGroup — never nest
|
|
404
|
+
fallbackEndState);
|
|
405
|
+
// Normalize the fallback block's INPUT. When the primary's wrap lives outside
|
|
406
|
+
// the try block (root/shared wrap), it persists after a try revert, so the
|
|
407
|
+
// branch holds its slice as WETH — unlike a try-internal wrap, which rolls
|
|
408
|
+
// back leaving raw ETH (that case the fallback unit already handles by
|
|
409
|
+
// adding its own approve+deposit).
|
|
410
|
+
if ((0, utils_1.isETHAddress)(swap.srcToken) &&
|
|
411
|
+
Boolean(exchangeParams[exchangeParamIndex].needWrapNative) &&
|
|
412
|
+
!wrapAddedInsideTry) {
|
|
413
|
+
if (!fallbackParam.needWrapNative) {
|
|
414
|
+
// WETH in hand, fallback consumes raw ETH: unwrap the slice first (the
|
|
415
|
+
// running amount is inserted at runtime; rolls back with the block).
|
|
416
|
+
fallbackBlock = hexConcat([
|
|
417
|
+
this.buildUnwrapEthCallData(this.getWETHAddress(fallbackParam), this.erc20Interface.encodeFunctionData('withdraw', [
|
|
418
|
+
swapExchange.srcAmount,
|
|
419
|
+
])),
|
|
420
|
+
fallbackBlock,
|
|
421
|
+
]);
|
|
422
|
+
}
|
|
423
|
+
else if (fallbackParam.approveData && !fallbackParam.skipApproval) {
|
|
424
|
+
// WETH in hand, fallback also consumes WETH: no deposit needed, but the
|
|
425
|
+
// unit skipped its approve (it only rides with the deposit branch,
|
|
426
|
+
// which the external wrap suppresses) — prepend it.
|
|
427
|
+
fallbackBlock = hexConcat([
|
|
428
|
+
this.buildApproveCallData(fallbackParam.approveData.target, fallbackParam.approveData.token, fallbackFlags.approves[exchangeParamIndex], fallbackParam.permit2Approval),
|
|
429
|
+
fallbackBlock,
|
|
430
|
+
]);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
// Raw-native primary + wrap-needing fallback on a native-src hop: no wrap
|
|
434
|
+
// exists on the primary path, and the fallback unit can wrongly skip its
|
|
435
|
+
// own deposit — root-wrap detection runs on the SUBSTITUTED params
|
|
436
|
+
// (doesRouteNeedsRootWrapEth), not the real route. If the unit didn't
|
|
437
|
+
// wrap, prepend the approve+deposit.
|
|
438
|
+
if ((0, utils_1.isETHAddress)(swap.srcToken) &&
|
|
439
|
+
!exchangeParams[exchangeParamIndex].needWrapNative &&
|
|
440
|
+
Boolean(fallbackParam.needWrapNative) &&
|
|
441
|
+
!!maybeWethCallData?.deposit &&
|
|
442
|
+
!fallbackWrapMap[`${routeIndex}_${swapIndex}_${swapExchangeIndex}`]) {
|
|
443
|
+
const approveCallData = fallbackParam.approveData && !fallbackParam.skipApproval
|
|
444
|
+
? this.buildApproveCallData(fallbackParam.approveData.target, fallbackParam.approveData.token, fallbackFlags.approves[exchangeParamIndex], fallbackParam.permit2Approval)
|
|
445
|
+
: '0x';
|
|
446
|
+
fallbackBlock = hexConcat([
|
|
447
|
+
approveCallData,
|
|
448
|
+
this.buildWrapEthCallData(this.getWETHAddress(fallbackParam), this.erc20Interface.encodeFunctionData('deposit'), types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_DONT_CHECK_BALANCE_AFTER_SWAP),
|
|
449
|
+
fallbackBlock,
|
|
450
|
+
]);
|
|
451
|
+
}
|
|
452
|
+
// Normalize the fallback block's OUTPUT on an ETH-dest final hop: the
|
|
453
|
+
// post-group machinery was shaped by the primary, so the fallback must
|
|
454
|
+
// end where the try block would — wrap raw ETH when the try ends in WETH,
|
|
455
|
+
// unwrap a WETH-holding fallback (and send if the try would have)
|
|
456
|
+
// otherwise; already-delivered ('sent') is terminal.
|
|
457
|
+
const isLastSwap = swapIndex === priceRoute.bestRoute[routeIndex].swaps.length - 1;
|
|
458
|
+
if ((0, utils_1.isETHAddress)(swap.destToken) && isLastSwap) {
|
|
459
|
+
const tryOutcome = this.ethDestOutcome(exchangeParams[exchangeParamIndex], tryEndState, true);
|
|
460
|
+
const fallbackOutcome = this.ethDestOutcome(fallbackParam, fallbackEndState, false);
|
|
461
|
+
if (fallbackOutcome !== tryOutcome && fallbackOutcome !== 'sent') {
|
|
462
|
+
if (tryOutcome === 'weth') {
|
|
463
|
+
fallbackBlock = hexConcat([
|
|
464
|
+
fallbackBlock,
|
|
465
|
+
this.buildWrapEthCallData(this.getWETHAddress(fallbackParam), this.erc20Interface.encodeFunctionData('deposit'), types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_DONT_CHECK_BALANCE_AFTER_SWAP),
|
|
466
|
+
]);
|
|
467
|
+
}
|
|
468
|
+
else {
|
|
469
|
+
if (fallbackOutcome === 'weth') {
|
|
470
|
+
fallbackBlock = hexConcat([
|
|
471
|
+
fallbackBlock,
|
|
472
|
+
this.buildUnwrapEthCallData(this.getWETHAddress(fallbackParam), this.erc20Interface.encodeFunctionData('withdraw', [
|
|
473
|
+
swapExchange.destAmount,
|
|
474
|
+
])),
|
|
475
|
+
]);
|
|
476
|
+
}
|
|
477
|
+
if (tryOutcome === 'sent') {
|
|
478
|
+
fallbackBlock = hexConcat([
|
|
479
|
+
fallbackBlock,
|
|
480
|
+
this.buildFinalSpecialFlagCalldata(),
|
|
481
|
+
]);
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
// payload = [padding(28)][tryLen(4)][fallbackLen(4)][try][fallback]
|
|
487
|
+
let payload = hexConcat([
|
|
488
|
+
constants_1.ZEROS_28_BYTES,
|
|
489
|
+
hexZeroPad(hexlify(hexDataLength(tryBlock)), 4),
|
|
490
|
+
hexZeroPad(hexlify(hexDataLength(fallbackBlock)), 4),
|
|
491
|
+
tryBlock,
|
|
492
|
+
fallbackBlock,
|
|
493
|
+
]);
|
|
494
|
+
const flag = insidePath
|
|
495
|
+
? types_1.Flag.DONT_INSERT_FROM_AMOUNT_DONT_CHECK_BALANCE_AFTER_SWAP // 0
|
|
496
|
+
: this.buildVerticalBranchingFlag(priceRoute, swap, exchangeParams, routeIndex, swapIndex);
|
|
497
|
+
// Locate the dest token in the payload for the post-group balance check
|
|
498
|
+
// (append it if absent — trailing bytes after the blocks are ignored on-chain).
|
|
499
|
+
let destTokenPos = 0;
|
|
500
|
+
if (flag % 3 === 2) {
|
|
501
|
+
const destTokenAddr = (0, utils_1.isETHAddress)(swap.destToken)
|
|
502
|
+
? this.dexHelper.config.data.wrappedNativeTokenAddress.toLowerCase()
|
|
503
|
+
: swap.destToken.toLowerCase();
|
|
504
|
+
payload = this.addTokenAddressToCallData(payload, destTokenAddr);
|
|
505
|
+
const destTokenAddrIndex = payload
|
|
506
|
+
.replace('0x', '')
|
|
507
|
+
.indexOf(destTokenAddr.replace('0x', ''));
|
|
508
|
+
destTokenPos = destTokenAddrIndex / 2 - 40;
|
|
509
|
+
if (destTokenPos < 0)
|
|
510
|
+
destTokenPos = 0;
|
|
511
|
+
}
|
|
512
|
+
return solidityPack([
|
|
513
|
+
'bytes20',
|
|
514
|
+
'bytes4',
|
|
515
|
+
'bytes2',
|
|
516
|
+
'bytes2',
|
|
517
|
+
'bytes1',
|
|
518
|
+
'bytes1',
|
|
519
|
+
'bytes2',
|
|
520
|
+
'bytes',
|
|
521
|
+
], [
|
|
522
|
+
constants_1.ZEROS_20_BYTES, // no call target for a group
|
|
523
|
+
hexZeroPad(hexlify(hexDataLength(payload)), 4), // payload length (incl. padding)
|
|
524
|
+
hexZeroPad(hexlify(0), 2), // fromAmountPos (unused by the group branch)
|
|
525
|
+
hexZeroPad(hexlify(destTokenPos), 2), // destTokenPos
|
|
526
|
+
hexZeroPad(hexlify(0), 1), // returnAmountPos (contract forces 0xFF)
|
|
527
|
+
hexZeroPad(hexlify(types_1.SpecialDex.REVERTABLE_FALLBACK_GROUP), 1), // 0xFF
|
|
528
|
+
hexZeroPad(hexlify(flag), 2), // flag (balance-check threading)
|
|
529
|
+
payload,
|
|
530
|
+
]);
|
|
531
|
+
}
|
|
532
|
+
buildSingleSwapExchangeCallData(priceRoute, routeIndex, swapIndex, swapExchangeIndex, exchangeParams, flags, addedWrapToSwapExchangeMap, allowToAddWrap = true, prevBranchWasWrapped = false, unwrapToSwapMap, maybeWethCallData, addMultiSwapMetadata, applyVerticalBranching, disableRevertableGroup = false, endStateOut) {
|
|
356
533
|
const isSimpleSwap = priceRoute.bestRoute.length === 1 &&
|
|
357
534
|
priceRoute.bestRoute[0].swaps.length === 1;
|
|
358
535
|
let swapExchangeCallData = '';
|
|
359
536
|
const swap = priceRoute.bestRoute[routeIndex].swaps[swapIndex];
|
|
360
537
|
const swapExchange = swap.swapExchanges[swapExchangeIndex];
|
|
538
|
+
// What this unit appends for ETH-dest endings — a revertable group's
|
|
539
|
+
// fallback block must end in the same state as its try block, so both
|
|
540
|
+
// sides report what they did (see wrapInRevertableGroup).
|
|
541
|
+
const endState = {
|
|
542
|
+
unwrapped: false,
|
|
543
|
+
sentNative: false,
|
|
544
|
+
};
|
|
361
545
|
let exchangeParamIndex = 0;
|
|
362
546
|
let tempExchangeParamIndex = 0;
|
|
363
547
|
priceRoute.bestRoute.map(route => route.swaps.map(curSwap => {
|
|
@@ -468,6 +652,7 @@ class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
468
652
|
this.isLastExchangeWithNeedWrapNative(priceRoute, swap, exchangeParams, exchangeParamIndex);
|
|
469
653
|
if (customWethAddress || needUnwrap) {
|
|
470
654
|
unwrapToSwapMap[swapIndex] = true;
|
|
655
|
+
endState.unwrapped = true;
|
|
471
656
|
withdrawCallData = this.buildUnwrapEthCallData(this.getWETHAddress(curExchangeParam), maybeWethCallData.withdraw.calldata);
|
|
472
657
|
}
|
|
473
658
|
swapExchangeCallData = hexConcat([
|
|
@@ -475,6 +660,7 @@ class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
475
660
|
withdrawCallData,
|
|
476
661
|
]);
|
|
477
662
|
if (isSimpleSwap && (needUnwrap || customWethAddress)) {
|
|
663
|
+
endState.sentNative = true;
|
|
478
664
|
const finalSpecialFlagCalldata = this.buildFinalSpecialFlagCalldata();
|
|
479
665
|
swapExchangeCallData = hexConcat([
|
|
480
666
|
swapExchangeCallData,
|
|
@@ -521,12 +707,33 @@ class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder_1.ExecutorByteco
|
|
|
521
707
|
isLastSwap &&
|
|
522
708
|
// don't need to send eth without unwrapping, handling unwrap and sendEth in the end of root branch
|
|
523
709
|
!this.doesRouteNeedsRootUnwrapEth(priceRoute, exchangeParams)) {
|
|
710
|
+
endState.sentNative = true;
|
|
524
711
|
const finalSpecialFlagCalldata = this.buildFinalSpecialFlagCalldata();
|
|
525
712
|
swapExchangeCallData = hexConcat([
|
|
526
713
|
swapExchangeCallData,
|
|
527
714
|
finalSpecialFlagCalldata,
|
|
528
715
|
]);
|
|
529
716
|
}
|
|
717
|
+
if (endStateOut) {
|
|
718
|
+
endStateOut.unwrapped = endState.unwrapped;
|
|
719
|
+
endStateOut.sentNative = endState.sentNative;
|
|
720
|
+
}
|
|
721
|
+
const fallbackParam = curExchangeParam.fallbackParam;
|
|
722
|
+
if (!disableRevertableGroup &&
|
|
723
|
+
fallbackParam &&
|
|
724
|
+
// Mixed wrap-ness on a MID-ROUTE ETH-dest hop is not normalized (raw ETH
|
|
725
|
+
// as an intermediate threading token is flag-7 territory the group's
|
|
726
|
+
// balance check doesn't model) — run plain. Final-hop mismatches are
|
|
727
|
+
// normalized inside wrapInRevertableGroup (input and output side).
|
|
728
|
+
!((0, utils_1.isETHAddress)(swap.destToken) &&
|
|
729
|
+
!isLastSwap &&
|
|
730
|
+
Boolean(curExchangeParam.needWrapNative) !==
|
|
731
|
+
Boolean(fallbackParam.needWrapNative))) {
|
|
732
|
+
swapExchangeCallData = this.wrapInRevertableGroup(priceRoute, routeIndex, swapIndex, swapExchangeIndex, exchangeParams, exchangeParamIndex, swapExchangeCallData, allowToAddWrap, prevBranchWasWrapped, !!addMultiSwapMetadata,
|
|
733
|
+
// Whether the primary's wrap sits INSIDE the try block (rolls back with
|
|
734
|
+
// it) or outside (root/shared — persists after a try revert).
|
|
735
|
+
!!addedWrapToSwapExchangeMap[`${routeIndex}_${swapIndex}_${swapExchangeIndex}`], endState, maybeWethCallData, applyVerticalBranching);
|
|
736
|
+
}
|
|
530
737
|
if (addMultiSwapMetadata) {
|
|
531
738
|
return this.addMultiSwapMetadata(priceRoute, exchangeParams, swapExchangeCallData, swapExchange.percent, swap, exchangeParamIndex, addedWrapToSwapExchangeMap[`${routeIndex}_${swapIndex}_${swapExchangeIndex}`], addedUnwrapForDexWithNoNeedWrapNative);
|
|
532
739
|
}
|