@paraswap/dex-lib 5.0.8 → 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.
Files changed (69) hide show
  1. package/build/config.js +15 -14
  2. package/build/config.js.map +1 -1
  3. package/build/dex/balancer-v1/balancer-v1.d.ts +1 -1
  4. package/build/dex/balancer-v1/balancer-v1.js +14 -1
  5. package/build/dex/balancer-v1/balancer-v1.js.map +1 -1
  6. package/build/dex/bebop/bebop.d.ts +2 -2
  7. package/build/dex/bebop/bebop.js +15 -2
  8. package/build/dex/bebop/bebop.js.map +1 -1
  9. package/build/dex/cables/cables.d.ts +2 -2
  10. package/build/dex/cables/cables.js +6 -2
  11. package/build/dex/cables/cables.js.map +1 -1
  12. package/build/dex/dexalot/dexalot.d.ts +2 -2
  13. package/build/dex/dexalot/dexalot.js +6 -2
  14. package/build/dex/dexalot/dexalot.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/dex/woo-fi-v2/config.js +1 -1
  41. package/build/dex/woo-fi-v2/config.js.map +1 -1
  42. package/build/dex/woo-fi-v2/woo-fi-v2-math.js +19 -4
  43. package/build/dex/woo-fi-v2/woo-fi-v2-math.js.map +1 -1
  44. package/build/executor/Executor01BytecodeBuilder.d.ts +8 -0
  45. package/build/executor/Executor01BytecodeBuilder.js +124 -12
  46. package/build/executor/Executor01BytecodeBuilder.js.map +1 -1
  47. package/build/executor/Executor02BytecodeBuilder.d.ts +22 -0
  48. package/build/executor/Executor02BytecodeBuilder.js +208 -1
  49. package/build/executor/Executor02BytecodeBuilder.js.map +1 -1
  50. package/build/executor/ExecutorDetector.d.ts +1 -0
  51. package/build/executor/ExecutorDetector.js +14 -0
  52. package/build/executor/ExecutorDetector.js.map +1 -1
  53. package/build/executor/types.d.ts +2 -1
  54. package/build/executor/types.js +4 -0
  55. package/build/executor/types.js.map +1 -1
  56. package/build/generic-swap-transaction-builder.d.ts +5 -1
  57. package/build/generic-swap-transaction-builder.js +142 -51
  58. package/build/generic-swap-transaction-builder.js.map +1 -1
  59. package/build/implementations/local-paraswap-sdk.d.ts +1 -0
  60. package/build/implementations/local-paraswap-sdk.js +7 -1
  61. package/build/implementations/local-paraswap-sdk.js.map +1 -1
  62. package/build/tenderly-simulation.d.ts +96 -17
  63. package/build/tenderly-simulation.js +312 -45
  64. package/build/tenderly-simulation.js.map +1 -1
  65. package/build/types.d.ts +3 -0
  66. package/build/utils.d.ts +1 -0
  67. package/build/utils.js +15 -1
  68. package/build/utils.js.map +1 -1
  69. 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 — 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) => hexConcat([
300
- acc,
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
- ]), '0x');
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
- if ((maybeWethCallData?.withdraw && (0, utils_1.isETHAddress)(priceRoute.destToken)) ||
319
- (!exchangeParams[exchangeParams.length - 1].dexFuncHasRecipient &&
320
- (0, utils_1.isETHAddress)(priceRoute.destToken))) {
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
- 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
+ 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
  }