@paraswap/dex-lib 5.0.7 → 5.0.8-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.
Files changed (62) hide show
  1. package/build/config.js +15 -14
  2. package/build/config.js.map +1 -1
  3. package/build/dex/bebop/bebop.d.ts +2 -2
  4. package/build/dex/bebop/bebop.js +15 -2
  5. package/build/dex/bebop/bebop.js.map +1 -1
  6. package/build/dex/cables/cables.d.ts +2 -2
  7. package/build/dex/cables/cables.js +6 -2
  8. package/build/dex/cables/cables.js.map +1 -1
  9. package/build/dex/dexalot/dexalot.d.ts +2 -2
  10. package/build/dex/dexalot/dexalot.js +6 -2
  11. package/build/dex/dexalot/dexalot.js.map +1 -1
  12. package/build/dex/fluid-dex/fluid-dex.d.ts +2 -0
  13. package/build/dex/fluid-dex/fluid-dex.js +55 -31
  14. package/build/dex/fluid-dex/fluid-dex.js.map +1 -1
  15. package/build/dex/generic-rfq/generic-rfq.d.ts +2 -2
  16. package/build/dex/generic-rfq/generic-rfq.js +11 -2
  17. package/build/dex/generic-rfq/generic-rfq.js.map +1 -1
  18. package/build/dex/hashflow/hashflow.d.ts +2 -2
  19. package/build/dex/hashflow/hashflow.js +6 -2
  20. package/build/dex/hashflow/hashflow.js.map +1 -1
  21. package/build/dex/index.js +8 -0
  22. package/build/dex/index.js.map +1 -1
  23. package/build/dex/metric/metric.js +5 -1
  24. package/build/dex/metric/metric.js.map +1 -1
  25. package/build/dex/native/native.d.ts +2 -2
  26. package/build/dex/native/native.js +8 -2
  27. package/build/dex/native/native.js.map +1 -1
  28. package/build/dex/paraswap-limit-orders/config.js +6 -0
  29. package/build/dex/paraswap-limit-orders/config.js.map +1 -1
  30. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.d.ts +2 -2
  31. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js +11 -2
  32. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js.map +1 -1
  33. package/build/dex/swaap-v2/swaap-v2.d.ts +2 -2
  34. package/build/dex/swaap-v2/swaap-v2.js +10 -2
  35. package/build/dex/swaap-v2/swaap-v2.js.map +1 -1
  36. package/build/dex/uniswap-v3/config.js +28 -0
  37. package/build/dex/uniswap-v3/config.js.map +1 -1
  38. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js +1 -0
  39. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js.map +1 -1
  40. package/build/executor/Executor01BytecodeBuilder.d.ts +8 -0
  41. package/build/executor/Executor01BytecodeBuilder.js +160 -14
  42. package/build/executor/Executor01BytecodeBuilder.js.map +1 -1
  43. package/build/executor/Executor02BytecodeBuilder.d.ts +22 -0
  44. package/build/executor/Executor02BytecodeBuilder.js +226 -3
  45. package/build/executor/Executor02BytecodeBuilder.js.map +1 -1
  46. package/build/executor/ExecutorDetector.d.ts +1 -0
  47. package/build/executor/ExecutorDetector.js +14 -0
  48. package/build/executor/ExecutorDetector.js.map +1 -1
  49. package/build/executor/types.d.ts +2 -1
  50. package/build/executor/types.js +4 -0
  51. package/build/executor/types.js.map +1 -1
  52. package/build/generic-swap-transaction-builder.d.ts +3 -1
  53. package/build/generic-swap-transaction-builder.js +176 -51
  54. package/build/generic-swap-transaction-builder.js.map +1 -1
  55. package/build/implementations/local-paraswap-sdk.d.ts +1 -0
  56. package/build/implementations/local-paraswap-sdk.js +7 -1
  57. package/build/implementations/local-paraswap-sdk.js.map +1 -1
  58. package/build/types.d.ts +3 -0
  59. package/build/utils.d.ts +1 -0
  60. package/build/utils.js +15 -1
  61. package/build/utils.js.map +1 -1
  62. 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 || (isEthDest && needUnwrap)) {
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
- types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP;
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
- ? !dexFuncHasRecipient || needUnwrap
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
- types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP;
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) => hexConcat([
288
- acc,
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
- ]), '0x');
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
- if ((maybeWethCallData?.withdraw && (0, utils_1.isETHAddress)(priceRoute.destToken)) ||
307
- (!exchangeParams[exchangeParams.length - 1].dexFuncHasRecipient &&
308
- (0, utils_1.isETHAddress)(priceRoute.destToken))) {
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
- types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP;
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
- types_1.Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP;
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
- buildSingleSwapExchangeCallData(priceRoute, routeIndex, swapIndex, swapExchangeIndex, exchangeParams, flags, addedWrapToSwapExchangeMap, allowToAddWrap = true, prevBranchWasWrapped = false, unwrapToSwapMap, maybeWethCallData, addMultiSwapMetadata, applyVerticalBranching) {
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
  }