@uniswap/universal-router-sdk 5.10.0 → 5.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +12 -2
  2. package/dist/cjs/src/index.d.ts +2 -0
  3. package/dist/cjs/src/index.js +3 -1
  4. package/dist/cjs/src/index.js.map +1 -1
  5. package/dist/cjs/src/swapRouter.d.ts +16 -3
  6. package/dist/cjs/src/swapRouter.js +28 -5
  7. package/dist/cjs/src/swapRouter.js.map +1 -1
  8. package/dist/cjs/src/types/encodeSwaps.d.ts +14 -1
  9. package/dist/cjs/src/utils/directTransfers.d.ts +14 -0
  10. package/dist/cjs/src/utils/directTransfers.js +264 -0
  11. package/dist/cjs/src/utils/directTransfers.js.map +1 -0
  12. package/dist/cjs/src/utils/encodeSwapStep.js +5 -5
  13. package/dist/cjs/src/utils/encodeSwapStep.js.map +1 -1
  14. package/dist/cjs/src/utils/encodeV4Action.js +2 -2
  15. package/dist/cjs/src/utils/encodeV4Action.js.map +1 -1
  16. package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.js +3 -2
  17. package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.js.map +1 -1
  18. package/dist/cjs/src/utils/validateEncodeSwaps.js +86 -24
  19. package/dist/cjs/src/utils/validateEncodeSwaps.js.map +1 -1
  20. package/dist/esm/src/index.d.ts +2 -0
  21. package/dist/esm/src/index.js +1 -0
  22. package/dist/esm/src/index.js.map +1 -1
  23. package/dist/esm/src/swapRouter.d.ts +16 -3
  24. package/dist/esm/src/swapRouter.js +28 -5
  25. package/dist/esm/src/swapRouter.js.map +1 -1
  26. package/dist/esm/src/types/encodeSwaps.d.ts +14 -1
  27. package/dist/esm/src/utils/directTransfers.d.ts +14 -0
  28. package/dist/esm/src/utils/directTransfers.js +253 -0
  29. package/dist/esm/src/utils/directTransfers.js.map +1 -0
  30. package/dist/esm/src/utils/encodeSwapStep.js +5 -5
  31. package/dist/esm/src/utils/encodeSwapStep.js.map +1 -1
  32. package/dist/esm/src/utils/encodeV4Action.js +2 -2
  33. package/dist/esm/src/utils/encodeV4Action.js.map +1 -1
  34. package/dist/esm/src/utils/normalizeEncodeSwapsSpec.js +3 -2
  35. package/dist/esm/src/utils/normalizeEncodeSwapsSpec.js.map +1 -1
  36. package/dist/esm/src/utils/validateEncodeSwaps.js +86 -24
  37. package/dist/esm/src/utils/validateEncodeSwaps.js.map +1 -1
  38. package/dist/types/src/index.d.ts +2 -0
  39. package/dist/types/src/swapRouter.d.ts +16 -3
  40. package/dist/types/src/types/encodeSwaps.d.ts +14 -1
  41. package/dist/types/src/utils/directTransfers.d.ts +14 -0
  42. package/package.json +6 -6
package/README.md CHANGED
@@ -101,11 +101,21 @@ const { calldata, value } = SwapRouter.encodeSwaps(
101
101
 
102
102
  ### Constraints
103
103
 
104
- - All swap step recipients must be `ROUTER_AS_RECIPIENT` — the SDK's settlement sweeps need router custody to see the funds.
105
- - `payerIsUser` is hardcoded to `false`; ingress runs once up-front via `PERMIT2_TRANSFER_FROM`.
104
+ - By default, all swap step recipients must be `ROUTER_AS_RECIPIENT` and `payerIsUser` is `false` (ingress runs once up-front via `PERMIT2_TRANSFER_FROM`) — the SDK's settlement sweeps need router custody to see the funds. The optional `allowDirectTransfers` regime relaxes both (see [Direct Transfers](#direct-transfers-allowdirecttransfers)).
106
105
  - Routers must end with output in `routing.outputToken`. For exact-output, unused input must end in `routing.inputToken`.
107
106
  - The final top-level `SWEEP` is appended by the SDK — don't include it in `swapSteps`.
108
107
 
108
+ ### Direct Transfers (`allowDirectTransfers`)
109
+
110
+ By default every transfer routes through router custody. Setting `allowDirectTransfers: true` on the spec lets routing-supplied steps move funds directly between the user and the pools — pulling input straight from the user (`payerIsUser` on V2/V3 swaps and v4 `SETTLE`) and paying output straight to `recipient` — which removes the Permit2 ingress and the final sweep transfer for a simple swap.
111
+
112
+ The safety contract is unchanged (the user pays at most `exactOrMaxAmountIn`; the recipient receives at least the slippage-bounded minimum), but it's enforced by counting instead of custody:
113
+
114
+ - **Inbound budget** — contract-enforced direct pulls must sum within `exactOrMaxAmountIn`; the SDK ingress pulls only the remainder.
115
+ - **Outbound coverage** — contract-enforced direct-output minimums reduce the final `SWEEP` floor. Since independently-floored per-leg minimums can sum a few wei below the trade minimum, the floor forgives a bounded, sub-economic rounding shortfall (`max(min(0.5bps of the minimum, 1% of slippage), a small per-leg allowance)`, zero at zero slippage); a larger, real gap still reverts.
116
+
117
+ Step amounts are never trusted — only counted or capped.
118
+
109
119
  ### Per-Hop Slippage
110
120
 
111
121
  Per-hop bounds require Universal Router v2.1.1+ — set `urVersion: UniversalRouterVersion.V2_1_1` on `spec` to enable.
@@ -10,5 +10,7 @@ export { CommandParser, GenericCommandParser } from './utils/commandParser';
10
10
  export type { UniversalRouterCommand, UniversalRouterCall, Param, CommandsDefinition } from './utils/commandParser';
11
11
  export type { Permit2Permit } from './utils/inputTokens';
12
12
  export { normalizeEncodeSwapsSpec } from './utils/normalizeEncodeSwapsSpec';
13
+ export { computeEncodeSwapsAmounts } from './utils/computeEncodeSwapsAmounts';
14
+ export type { EncodeSwapsAmounts } from './utils/computeEncodeSwapsAmounts';
13
15
  export { validateEncodeSwaps } from './utils/validateEncodeSwaps';
14
16
  export { NONCE_SKIP_CHECK, generateNonce, EXECUTE_SIGNED_TYPES, getUniversalRouterDomain } from './utils/eip712';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getUniversalRouterDomain = exports.EXECUTE_SIGNED_TYPES = exports.generateNonce = exports.NONCE_SKIP_CHECK = exports.validateEncodeSwaps = exports.normalizeEncodeSwapsSpec = exports.GenericCommandParser = exports.CommandParser = exports.isAtLeastV2_1_1 = exports.UniversalRouterVersion = exports.WETH_ADDRESS = exports.ROUTER_AS_RECIPIENT = exports.SWAP_PROXY_ADDRESS = exports.UNIVERSAL_ROUTER_ADDRESS = exports.UNIVERSAL_ROUTER_CREATION_BLOCK = exports.Subparser = exports.Parser = exports.COMMAND_DEFINITION = exports.CommandType = exports.RoutePlanner = exports.SwapRouter = void 0;
3
+ exports.getUniversalRouterDomain = exports.EXECUTE_SIGNED_TYPES = exports.generateNonce = exports.NONCE_SKIP_CHECK = exports.validateEncodeSwaps = exports.computeEncodeSwapsAmounts = exports.normalizeEncodeSwapsSpec = exports.GenericCommandParser = exports.CommandParser = exports.isAtLeastV2_1_1 = exports.UniversalRouterVersion = exports.WETH_ADDRESS = exports.ROUTER_AS_RECIPIENT = exports.SWAP_PROXY_ADDRESS = exports.UNIVERSAL_ROUTER_ADDRESS = exports.UNIVERSAL_ROUTER_CREATION_BLOCK = exports.Subparser = exports.Parser = exports.COMMAND_DEFINITION = exports.CommandType = exports.RoutePlanner = exports.SwapRouter = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  var swapRouter_1 = require("./swapRouter");
6
6
  Object.defineProperty(exports, "SwapRouter", { enumerable: true, get: function () { return swapRouter_1.SwapRouter; } });
@@ -26,6 +26,8 @@ Object.defineProperty(exports, "CommandParser", { enumerable: true, get: functio
26
26
  Object.defineProperty(exports, "GenericCommandParser", { enumerable: true, get: function () { return commandParser_1.GenericCommandParser; } });
27
27
  var normalizeEncodeSwapsSpec_1 = require("./utils/normalizeEncodeSwapsSpec");
28
28
  Object.defineProperty(exports, "normalizeEncodeSwapsSpec", { enumerable: true, get: function () { return normalizeEncodeSwapsSpec_1.normalizeEncodeSwapsSpec; } });
29
+ var computeEncodeSwapsAmounts_1 = require("./utils/computeEncodeSwapsAmounts");
30
+ Object.defineProperty(exports, "computeEncodeSwapsAmounts", { enumerable: true, get: function () { return computeEncodeSwapsAmounts_1.computeEncodeSwapsAmounts; } });
29
31
  var validateEncodeSwaps_1 = require("./utils/validateEncodeSwaps");
30
32
  Object.defineProperty(exports, "validateEncodeSwaps", { enumerable: true, get: function () { return validateEncodeSwaps_1.validateEncodeSwaps; } });
31
33
  var eip712_1 = require("./utils/eip712");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;;AAAA,2CAAyC;AAAhC,wGAAA,UAAU,OAAA;AAEnB,8DAAmC;AACnC,qDAA0B;AAC1B,qEAA0C;AAC1C,yDAAyG;AAAhG,8GAAA,YAAY,OAAA;AAAE,6GAAA,WAAW,OAAA;AAAE,oHAAA,kBAAkB,OAAA;AAAE,wGAAA,MAAM,OAAA;AAAE,2GAAA,SAAS,OAAA;AAEzE,+CAQ0B;AAPxB,4HAAA,+BAA+B,OAAA;AAC/B,qHAAA,wBAAwB,OAAA;AACxB,+GAAA,kBAAkB,OAAA;AAClB,gHAAA,mBAAmB,OAAA;AACnB,yGAAA,YAAY,OAAA;AACZ,mHAAA,sBAAsB,OAAA;AACtB,4GAAA,eAAe,OAAA;AAEjB,uDAA2E;AAAlE,8GAAA,aAAa,OAAA;AAAE,qHAAA,oBAAoB,OAAA;AAG5C,6EAA2E;AAAlE,oIAAA,wBAAwB,OAAA;AACjC,mEAAiE;AAAxD,0HAAA,mBAAmB,OAAA;AAC5B,yCAAgH;AAAvG,0GAAA,gBAAgB,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAAE,kHAAA,wBAAwB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;;AAAA,2CAAyC;AAAhC,wGAAA,UAAU,OAAA;AAEnB,8DAAmC;AACnC,qDAA0B;AAC1B,qEAA0C;AAC1C,yDAAyG;AAAhG,8GAAA,YAAY,OAAA;AAAE,6GAAA,WAAW,OAAA;AAAE,oHAAA,kBAAkB,OAAA;AAAE,wGAAA,MAAM,OAAA;AAAE,2GAAA,SAAS,OAAA;AAEzE,+CAQ0B;AAPxB,4HAAA,+BAA+B,OAAA;AAC/B,qHAAA,wBAAwB,OAAA;AACxB,+GAAA,kBAAkB,OAAA;AAClB,gHAAA,mBAAmB,OAAA;AACnB,yGAAA,YAAY,OAAA;AACZ,mHAAA,sBAAsB,OAAA;AACtB,4GAAA,eAAe,OAAA;AAEjB,uDAA2E;AAAlE,8GAAA,aAAa,OAAA;AAAE,qHAAA,oBAAoB,OAAA;AAG5C,6EAA2E;AAAlE,oIAAA,wBAAwB,OAAA;AACjC,+EAA6E;AAApE,sIAAA,yBAAyB,OAAA;AAElC,mEAAiE;AAAxD,0HAAA,mBAAmB,OAAA;AAC5B,yCAAgH;AAAvG,0GAAA,gBAAgB,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAAE,kHAAA,wBAAwB,OAAA"}
@@ -47,12 +47,25 @@ export declare abstract class SwapRouter {
47
47
  * Routers own `swapSteps` (V2/V3/V4 swaps, plus any `WRAP_ETH` / `UNWRAP_WETH` required by the route).
48
48
  * The SDK owns ingress, fees, final settlement, exact-output refund, and optional `safeMode`.
49
49
  *
50
+ * Two validation regimes:
51
+ * - Default (router custody): the single SDK ingress pull is the only user withdrawal and every step
52
+ * recipient must be the router; the final SWEEP floor enforces the minimum output.
53
+ * - `allowDirectTransfers`: steps may pull input straight from the user (`payerIsUser`,
54
+ * v4 SETTLE_ALL) and pay output straight to `recipient` (step recipients, v4 TAKE/TAKE_ALL,
55
+ * UNWRAP_WETH). Direct pulls may total at most exactOrMaxAmountIn — ingress pulls the
56
+ * remainder — and direct output minimums count toward the SWEEP floor. Portion fees still
57
+ * require output custody. Step amounts are never trusted, only counted or capped.
58
+ *
59
+ * Direct-transfer caveats:
60
+ * - Fee-on-transfer output: output minimums bind the amount each swap *produces* (pre-transfer), not the
61
+ * recipient's post-tax balance. A FoT token's own transfer tax reduces the final balance below the
62
+ * minimum — inherent to such tokens and expected when swapping into one, not a shortfall to guard.
63
+ * - A flat fee is a plain TRANSFER, so routing must keep at least the fee amount in router custody
64
+ * (not route 100% of output directly), or the fee TRANSFER reverts.
65
+ *
50
66
  * Router contract: end with final output in `spec.routing.outputToken`; for `EXACT_OUTPUT`, unused input
51
67
  * must end in `spec.routing.inputToken`. Don't include a top-level `SWEEP` — the SDK appends settlement,
52
68
  * refund, and safeMode sweeps itself.
53
- *
54
- * Router custody with `payerIsUser = false` is deliberate for safety, even if it costs an extra command
55
- * or transfer; the SDK does not infer route topology on behalf of routers.
56
69
  */
57
70
  static encodeSwaps(spec: SwapSpecification, swapSteps: SwapStep[]): MethodParameters;
58
71
  /**
@@ -12,6 +12,7 @@ const sdk_core_1 = require("@uniswap/sdk-core");
12
12
  const uniswap_1 = require("./entities/actions/uniswap");
13
13
  const routerCommands_1 = require("./utils/routerCommands");
14
14
  const inputTokens_1 = require("./utils/inputTokens");
15
+ const directTransfers_1 = require("./utils/directTransfers");
15
16
  const constants_1 = require("./utils/constants");
16
17
  const getCurrencyAddress_1 = require("./utils/getCurrencyAddress");
17
18
  const numbers_1 = require("./utils/numbers");
@@ -75,12 +76,25 @@ class SwapRouter {
75
76
  * Routers own `swapSteps` (V2/V3/V4 swaps, plus any `WRAP_ETH` / `UNWRAP_WETH` required by the route).
76
77
  * The SDK owns ingress, fees, final settlement, exact-output refund, and optional `safeMode`.
77
78
  *
79
+ * Two validation regimes:
80
+ * - Default (router custody): the single SDK ingress pull is the only user withdrawal and every step
81
+ * recipient must be the router; the final SWEEP floor enforces the minimum output.
82
+ * - `allowDirectTransfers`: steps may pull input straight from the user (`payerIsUser`,
83
+ * v4 SETTLE_ALL) and pay output straight to `recipient` (step recipients, v4 TAKE/TAKE_ALL,
84
+ * UNWRAP_WETH). Direct pulls may total at most exactOrMaxAmountIn — ingress pulls the
85
+ * remainder — and direct output minimums count toward the SWEEP floor. Portion fees still
86
+ * require output custody. Step amounts are never trusted, only counted or capped.
87
+ *
88
+ * Direct-transfer caveats:
89
+ * - Fee-on-transfer output: output minimums bind the amount each swap *produces* (pre-transfer), not the
90
+ * recipient's post-tax balance. A FoT token's own transfer tax reduces the final balance below the
91
+ * minimum — inherent to such tokens and expected when swapping into one, not a shortfall to guard.
92
+ * - A flat fee is a plain TRANSFER, so routing must keep at least the fee amount in router custody
93
+ * (not route 100% of output directly), or the fee TRANSFER reverts.
94
+ *
78
95
  * Router contract: end with final output in `spec.routing.outputToken`; for `EXACT_OUTPUT`, unused input
79
96
  * must end in `spec.routing.inputToken`. Don't include a top-level `SWEEP` — the SDK appends settlement,
80
97
  * refund, and safeMode sweeps itself.
81
- *
82
- * Router custody with `payerIsUser = false` is deliberate for safety, even if it costs an extra command
83
- * or transfer; the SDK does not infer route topology on behalf of routers.
84
98
  */
85
99
  static encodeSwaps(spec, swapSteps) {
86
100
  var _a, _b;
@@ -97,7 +111,11 @@ class SwapRouter {
97
111
  (0, inputTokens_1.encodePermit)(planner, normalizedSpec.permit);
98
112
  }
99
113
  if (!inputToken.isNative && !normalizedSpec.nativeErc20Input) {
100
- planner.addCommand(routerCommands_1.CommandType.PERMIT2_TRANSFER_FROM, [(0, getCurrencyAddress_1.getCurrencyAddress)(inputToken), constants_1.ROUTER_AS_RECIPIENT, exactOrMaxAmountIn], false, normalizedSpec.urVersion);
114
+ // user-paid steps draw part of the budget straight from the wallet; ingress pulls only the rest
115
+ const ingressAmount = exactOrMaxAmountIn.sub((0, directTransfers_1.sumUserPaidMax)(swapSteps));
116
+ if (ingressAmount.gt(0)) {
117
+ planner.addCommand(routerCommands_1.CommandType.PERMIT2_TRANSFER_FROM, [(0, getCurrencyAddress_1.getCurrencyAddress)(inputToken), constants_1.ROUTER_AS_RECIPIENT, ingressAmount], false, normalizedSpec.urVersion);
118
+ }
101
119
  }
102
120
  }
103
121
  for (const step of swapSteps) {
@@ -118,7 +136,12 @@ class SwapRouter {
118
136
  planner.addCommand(routerCommands_1.CommandType.TRANSFER, [(0, getCurrencyAddress_1.getCurrencyAddress)(outputToken), normalizedSpec.fee.recipient, normalizedSpec.fee.amount], false, normalizedSpec.urVersion);
119
137
  }
120
138
  // Assumes routers already normalized final gross output into `routing.outputToken`.
121
- planner.addCommand(routerCommands_1.CommandType.SWEEP, [(0, getCurrencyAddress_1.getCurrencyAddress)(outputToken), normalizedSpec.recipient, netMinOrExactAmountOut], false, normalizedSpec.urVersion);
139
+ // Direct-output minimums (contract-enforced, delivered straight to the recipient)
140
+ // reduce the floor; the sweep always remains to forward any custody balance.
141
+ const sweepFloor = normalizedSpec.allowDirectTransfers
142
+ ? (0, directTransfers_1.directTransferSweepFloor)(normalizedSpec, netMinOrExactAmountOut, swapSteps, (0, getCurrencyAddress_1.getCurrencyAddress)(outputToken))
143
+ : netMinOrExactAmountOut;
144
+ planner.addCommand(routerCommands_1.CommandType.SWEEP, [(0, getCurrencyAddress_1.getCurrencyAddress)(outputToken), normalizedSpec.recipient, sweepFloor], false, normalizedSpec.urVersion);
122
145
  // Assumes routers already normalized unused input into `routing.inputToken`.
123
146
  // Exact-output uses max input, so any unused slippage padding is refunded to the recipient.
124
147
  // For nativeErc20Input the leftover lives in the router's native balance (18 decimals), so
@@ -1 +1 @@
1
- {"version":3,"file":"swapRouter.js","sourceRoot":"","sources":["../../../src/swapRouter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"swapRouter.js","sourceRoot":"","sources":["../../../src/swapRouter.ts"],"names":[],"mappings":"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"}
@@ -39,12 +39,20 @@ export type SwapSpecification = {
39
39
  * Incompatible with native input, permit, and TokenTransferMode.ApproveProxy.
40
40
  */
41
41
  nativeErc20Input?: boolean;
42
+ /**
43
+ * Lets steps pull input straight from the user and pay output straight to `recipient`
44
+ * (instead of router custody), still validated so the user never pays more than
45
+ * `exactOrMaxAmountIn` or receives less than the minimum output. Default false.
46
+ * See `SwapRouter.encodeSwaps`.
47
+ */
48
+ allowDirectTransfers?: boolean;
42
49
  };
43
- export type NormalizedSwapSpecification = Omit<SwapSpecification, 'recipient' | 'tokenTransferMode' | 'urVersion' | 'safeMode'> & {
50
+ export type NormalizedSwapSpecification = Omit<SwapSpecification, 'recipient' | 'tokenTransferMode' | 'urVersion' | 'safeMode' | 'allowDirectTransfers'> & {
44
51
  recipient: string;
45
52
  tokenTransferMode: TokenTransferMode;
46
53
  urVersion: UniversalRouterVersion;
47
54
  safeMode: boolean;
55
+ allowDirectTransfers: boolean;
48
56
  };
49
57
  export type V2SwapExactIn = {
50
58
  type: 'V2_SWAP_EXACT_IN';
@@ -53,6 +61,7 @@ export type V2SwapExactIn = {
53
61
  amountOutMin: BigNumberish;
54
62
  path: string[];
55
63
  minHopPriceX36?: BigNumberish[];
64
+ payerIsUser?: boolean;
56
65
  };
57
66
  export type V2SwapExactOut = {
58
67
  type: 'V2_SWAP_EXACT_OUT';
@@ -61,6 +70,7 @@ export type V2SwapExactOut = {
61
70
  amountInMax: BigNumberish;
62
71
  path: string[];
63
72
  minHopPriceX36?: BigNumberish[];
73
+ payerIsUser?: boolean;
64
74
  };
65
75
  export type V3SwapExactIn = {
66
76
  type: 'V3_SWAP_EXACT_IN';
@@ -69,6 +79,7 @@ export type V3SwapExactIn = {
69
79
  amountOutMin: BigNumberish;
70
80
  path: string;
71
81
  minHopPriceX36?: BigNumberish[];
82
+ payerIsUser?: boolean;
72
83
  };
73
84
  export type V3SwapExactOut = {
74
85
  type: 'V3_SWAP_EXACT_OUT';
@@ -77,6 +88,7 @@ export type V3SwapExactOut = {
77
88
  amountInMax: BigNumberish;
78
89
  path: string;
79
90
  minHopPriceX36?: BigNumberish[];
91
+ payerIsUser?: boolean;
80
92
  };
81
93
  export type V4Swap = {
82
94
  type: 'V4_SWAP';
@@ -131,6 +143,7 @@ export type V4Settle = {
131
143
  action: 'SETTLE';
132
144
  currency: string;
133
145
  amount: BigNumberish;
146
+ payerIsUser?: boolean;
134
147
  };
135
148
  export type V4SettleAll = {
136
149
  action: 'SETTLE_ALL';
@@ -0,0 +1,14 @@
1
+ import { BigNumber } from 'ethers';
2
+ import { NormalizedSwapSpecification, SwapStep } from '../types/encodeSwaps';
3
+ export type UserPaidPull = {
4
+ token: string | undefined;
5
+ maxAmount: BigNumber;
6
+ };
7
+ export declare function getV3HopCount(path: string): number | undefined;
8
+ export declare function v3PathFirstToken(path: string): string | undefined;
9
+ export declare function v3PathLastToken(path: string): string | undefined;
10
+ export declare function hasUserPaidFlag(step: SwapStep): boolean;
11
+ export declare function stepUserPaidPulls(step: SwapStep): UserPaidPull[];
12
+ export declare function sumUserPaidMax(steps: SwapStep[]): BigNumber;
13
+ export declare function sumDirectOutputMin(steps: SwapStep[], recipient: string, outputTokenAddress: string): BigNumber;
14
+ export declare function directTransferSweepFloor(spec: NormalizedSwapSpecification, netMin: BigNumber, swapSteps: SwapStep[], outputTokenAddress: string): BigNumber;
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.directTransferSweepFloor = exports.sumDirectOutputMin = exports.sumUserPaidMax = exports.stepUserPaidPulls = exports.hasUserPaidFlag = exports.v3PathLastToken = exports.v3PathFirstToken = exports.getV3HopCount = void 0;
4
+ const ethers_1 = require("ethers");
5
+ const sdk_core_1 = require("@uniswap/sdk-core");
6
+ const constants_1 = require("./constants");
7
+ // V3 path: 20-byte address + N × (3-byte fee + 20-byte address); minimum is 43 bytes (single hop, N=1)
8
+ // Returns N or undefined if malformed
9
+ function getV3HopCount(path) {
10
+ if (!path.startsWith('0x'))
11
+ return undefined;
12
+ const byteLength = (path.length - 2) / 2;
13
+ if (byteLength < 43)
14
+ return undefined;
15
+ const variableSegmentLength = byteLength - 20;
16
+ if (variableSegmentLength < 23 || variableSegmentLength % 23 !== 0)
17
+ return undefined;
18
+ return variableSegmentLength / 23;
19
+ }
20
+ exports.getV3HopCount = getV3HopCount;
21
+ function v3PathFirstToken(path) {
22
+ if (getV3HopCount(path) === undefined)
23
+ return undefined;
24
+ return '0x' + path.slice(2, 42);
25
+ }
26
+ exports.v3PathFirstToken = v3PathFirstToken;
27
+ function v3PathLastToken(path) {
28
+ if (getV3HopCount(path) === undefined)
29
+ return undefined;
30
+ return '0x' + path.slice(-40);
31
+ }
32
+ exports.v3PathLastToken = v3PathLastToken;
33
+ // SETTLE_ALL / TAKE_ALL are intrinsically direct (no flag on-chain) and are gated separately
34
+ function hasUserPaidFlag(step) {
35
+ switch (step.type) {
36
+ case 'V2_SWAP_EXACT_IN':
37
+ case 'V2_SWAP_EXACT_OUT':
38
+ case 'V3_SWAP_EXACT_IN':
39
+ case 'V3_SWAP_EXACT_OUT':
40
+ return step.payerIsUser === true;
41
+ case 'V4_SWAP':
42
+ return step.v4Actions.some((a) => a.action === 'SETTLE' && a.payerIsUser === true);
43
+ default:
44
+ return false;
45
+ }
46
+ }
47
+ exports.hasUserPaidFlag = hasUserPaidFlag;
48
+ function v4UserPaidPulls(action) {
49
+ switch (action.action) {
50
+ case 'SETTLE':
51
+ return action.payerIsUser === true ? [{ token: action.currency, maxAmount: ethers_1.BigNumber.from(action.amount) }] : [];
52
+ case 'SETTLE_ALL':
53
+ // SETTLE_ALL always settles from msgSender (the user), bounded on-chain by maxAmount
54
+ return [{ token: action.currency, maxAmount: ethers_1.BigNumber.from(action.maxAmount) }];
55
+ default:
56
+ return [];
57
+ }
58
+ }
59
+ // contract-enforced maxima: exact-in pulls exactly amountIn; exact-out reverts above amountInMax
60
+ function stepUserPaidPulls(step) {
61
+ switch (step.type) {
62
+ case 'V2_SWAP_EXACT_IN':
63
+ return step.payerIsUser === true ? [{ token: step.path[0], maxAmount: ethers_1.BigNumber.from(step.amountIn) }] : [];
64
+ case 'V2_SWAP_EXACT_OUT':
65
+ return step.payerIsUser === true ? [{ token: step.path[0], maxAmount: ethers_1.BigNumber.from(step.amountInMax) }] : [];
66
+ case 'V3_SWAP_EXACT_IN':
67
+ return step.payerIsUser === true
68
+ ? [{ token: v3PathFirstToken(step.path), maxAmount: ethers_1.BigNumber.from(step.amountIn) }]
69
+ : [];
70
+ case 'V3_SWAP_EXACT_OUT':
71
+ // exact-out paths are encoded output-first, so the input token is the path tail
72
+ return step.payerIsUser === true
73
+ ? [{ token: v3PathLastToken(step.path), maxAmount: ethers_1.BigNumber.from(step.amountInMax) }]
74
+ : [];
75
+ case 'V4_SWAP':
76
+ return step.v4Actions.flatMap(v4UserPaidPulls);
77
+ default:
78
+ return [];
79
+ }
80
+ }
81
+ exports.stepUserPaidPulls = stepUserPaidPulls;
82
+ // token-agnostic by design: validation binds every pull to the input token before this sum is
83
+ // used, so off-token pulls are rejected rather than filtered (unlike output credits below)
84
+ function sumUserPaidMax(steps) {
85
+ return steps.flatMap(stepUserPaidPulls).reduce((total, pull) => total.add(pull.maxAmount), ethers_1.BigNumber.from(0));
86
+ }
87
+ exports.sumUserPaidMax = sumUserPaidMax;
88
+ // input/output currencies of a v4 swap action's delta within its command's lock
89
+ function v4SwapCurrencies(action) {
90
+ switch (action.action) {
91
+ case 'SWAP_EXACT_IN':
92
+ return action.path.length > 0
93
+ ? { input: action.currencyIn, output: action.path[action.path.length - 1].intermediateCurrency }
94
+ : undefined;
95
+ case 'SWAP_EXACT_OUT':
96
+ // exact-out paths walk from the input side, so the first hop names the input currency
97
+ return action.path.length > 0
98
+ ? { input: action.path[0].intermediateCurrency, output: action.currencyOut }
99
+ : undefined;
100
+ case 'SWAP_EXACT_IN_SINGLE':
101
+ case 'SWAP_EXACT_OUT_SINGLE':
102
+ return action.zeroForOne
103
+ ? { input: action.poolKey.currency0, output: action.poolKey.currency1 }
104
+ : { input: action.poolKey.currency1, output: action.poolKey.currency0 };
105
+ default:
106
+ return undefined;
107
+ }
108
+ }
109
+ // credits exact-in swap minimums that a single OPEN_DELTA take forwards to the recipient.
110
+ // sound because the v4 ledger must zero for the command to succeed: when a currency's only
111
+ // take is one OPEN_DELTA take to the recipient and nothing else in the block can consume that
112
+ // currency, any successful transaction paid the recipient everything the block's swaps produced
113
+ // of it — contract-enforced to be at least the exact-in swaps' summed amountOutMinimums
114
+ // (order-independent: an early take strands later credit and reverts the lock)
115
+ function v4OpenDeltaTakeCredits(actions, recipient) {
116
+ var _a, _b, _c;
117
+ const swapMins = new Map();
118
+ const takeCounts = new Map();
119
+ const soleOpenDeltaToRecipient = new Map();
120
+ const disqualified = new Set();
121
+ for (const action of actions) {
122
+ switch (action.action) {
123
+ case 'SWAP_EXACT_IN':
124
+ case 'SWAP_EXACT_OUT':
125
+ case 'SWAP_EXACT_IN_SINGLE':
126
+ case 'SWAP_EXACT_OUT_SINGLE': {
127
+ const currencies = v4SwapCurrencies(action);
128
+ if (currencies === undefined)
129
+ return []; // unparseable swap: cannot attribute deltas, credit nothing
130
+ disqualified.add(currencies.input.toLowerCase()); // the swap consumes this currency's delta
131
+ // only exact-in minimums are creditable: the action enforces them (V4TooLittleReceived).
132
+ // exact-out amounts are NOT asserted by the deployed v4 router — a price-limit partial
133
+ // fill succeeds with less — so exact-out swaps contribute zero (their actual output only
134
+ // adds on top of the credited exact-in minimums, keeping the credit a valid lower bound)
135
+ if (action.action === 'SWAP_EXACT_IN' || action.action === 'SWAP_EXACT_IN_SINGLE') {
136
+ const output = currencies.output.toLowerCase();
137
+ swapMins.set(output, ((_a = swapMins.get(output)) !== null && _a !== void 0 ? _a : ethers_1.BigNumber.from(0)).add(ethers_1.BigNumber.from(action.amountOutMinimum)));
138
+ }
139
+ break;
140
+ }
141
+ case 'SETTLE':
142
+ case 'SETTLE_ALL':
143
+ disqualified.add(action.currency.toLowerCase());
144
+ break;
145
+ case 'TAKE': {
146
+ const currency = action.currency.toLowerCase();
147
+ takeCounts.set(currency, ((_b = takeCounts.get(currency)) !== null && _b !== void 0 ? _b : 0) + 1);
148
+ soleOpenDeltaToRecipient.set(currency, ethers_1.BigNumber.from(action.amount).isZero() && action.recipient.toLowerCase() === recipient.toLowerCase());
149
+ break;
150
+ }
151
+ case 'TAKE_ALL':
152
+ case 'TAKE_PORTION': {
153
+ const currency = action.currency.toLowerCase();
154
+ takeCounts.set(currency, ((_c = takeCounts.get(currency)) !== null && _c !== void 0 ? _c : 0) + 1);
155
+ soleOpenDeltaToRecipient.set(currency, false);
156
+ break;
157
+ }
158
+ default:
159
+ break;
160
+ }
161
+ }
162
+ const credits = [];
163
+ for (const [currency, min] of swapMins) {
164
+ if (takeCounts.get(currency) === 1 && soleOpenDeltaToRecipient.get(currency) && !disqualified.has(currency)) {
165
+ credits.push({ token: currency, minAmount: min });
166
+ }
167
+ }
168
+ return credits;
169
+ }
170
+ function v4DirectOutputCredits(action, recipient) {
171
+ switch (action.action) {
172
+ case 'TAKE': {
173
+ if (action.recipient.toLowerCase() !== recipient.toLowerCase())
174
+ return [];
175
+ const amount = ethers_1.BigNumber.from(action.amount);
176
+ // OPEN_DELTA (0) / CONTRACT_BALANCE takes are runtime-sized: deliverable, but guarantee nothing
177
+ if (amount.lte(0) || amount.gte(constants_1.CONTRACT_BALANCE))
178
+ return [];
179
+ return [{ token: action.currency, minAmount: amount }];
180
+ }
181
+ case 'TAKE_ALL':
182
+ // pays msgSender on-chain: counts only when the spec recipient IS the sender sentinel
183
+ return recipient === constants_1.SENDER_AS_RECIPIENT
184
+ ? [{ token: action.currency, minAmount: ethers_1.BigNumber.from(action.minAmount) }]
185
+ : [];
186
+ default:
187
+ return [];
188
+ }
189
+ }
190
+ // contract-guaranteed amounts a step delivers directly to `recipient`
191
+ function stepDirectOutputCredits(step, recipient) {
192
+ const isDirect = 'recipient' in step && step.recipient.toLowerCase() === recipient.toLowerCase();
193
+ switch (step.type) {
194
+ case 'V2_SWAP_EXACT_IN':
195
+ return isDirect ? [{ token: step.path[step.path.length - 1], minAmount: ethers_1.BigNumber.from(step.amountOutMin) }] : [];
196
+ case 'V2_SWAP_EXACT_OUT':
197
+ // not creditable: v2SwapExactOutput only bounds amountIn (<= amountInMaximum) and never asserts
198
+ // amountOut was produced — unlike V3 exact-out (V3InvalidAmountOut) or v4 exact-out (concrete TAKE /
199
+ // CurrencyNotSettled). So a fee-on-transfer input/intermediate makes the leg produce less than
200
+ // amountOut and still succeed; like v4 OPEN_DELTA exact-out, contribute zero.
201
+ return [];
202
+ case 'V3_SWAP_EXACT_IN':
203
+ return isDirect ? [{ token: v3PathLastToken(step.path), minAmount: ethers_1.BigNumber.from(step.amountOutMin) }] : [];
204
+ case 'V3_SWAP_EXACT_OUT':
205
+ // exact-out paths are encoded output-first, so the output token is the path head
206
+ return isDirect ? [{ token: v3PathFirstToken(step.path), minAmount: ethers_1.BigNumber.from(step.amountOut) }] : [];
207
+ case 'UNWRAP_WETH':
208
+ return isDirect ? [{ token: constants_1.ETH_ADDRESS, minAmount: ethers_1.BigNumber.from(step.amountMin) }] : [];
209
+ case 'V4_SWAP':
210
+ // per-action concrete credits and the block-level OPEN_DELTA rule are disjoint:
211
+ // an OPEN_DELTA take never produces a per-action credit
212
+ return [
213
+ ...step.v4Actions.flatMap((action) => v4DirectOutputCredits(action, recipient)),
214
+ ...v4OpenDeltaTakeCredits(step.v4Actions, recipient),
215
+ ];
216
+ default:
217
+ return [];
218
+ }
219
+ }
220
+ // Direct-output coverage in the output token: the summed contract-enforced minimum delivered straight to
221
+ // the recipient, and the number of coverage-bearing legs it came from. Summed per-leg floors can trail the
222
+ // trade-level floor by up to one wei each, so the caller uses `legs` to size how much rounding to tolerate;
223
+ // only legs carrying a nonzero minimum count — a zero-min leg has no flooring error to forgive, so it must
224
+ // not pad the tolerance.
225
+ function directOutputCoverage(steps, recipient, outputTokenAddress) {
226
+ const target = outputTokenAddress.toLowerCase();
227
+ const credits = steps
228
+ .flatMap((step) => stepDirectOutputCredits(step, recipient))
229
+ .filter((credit) => credit.token !== undefined && credit.token.toLowerCase() === target);
230
+ return {
231
+ min: credits.reduce((total, credit) => total.add(credit.minAmount), ethers_1.BigNumber.from(0)),
232
+ legs: credits.filter((credit) => credit.minAmount.gt(0)).length,
233
+ };
234
+ }
235
+ function sumDirectOutputMin(steps, recipient, outputTokenAddress) {
236
+ return directOutputCoverage(steps, recipient, outputTokenAddress).min;
237
+ }
238
+ exports.sumDirectOutputMin = sumDirectOutputMin;
239
+ // The final SWEEP floor for a direct-transfer plan: netMin minus what the direct legs already guarantee to
240
+ // the recipient. Direct legs pay straight from the pools, so their credited minimums can sum a few wei
241
+ // below netMin — from independent integer flooring, and from routers that floor slippage in f64 — with no
242
+ // custody balance to cover the gap. A small tolerance forgives that sub-economic rounding so a fully
243
+ // covered direct plan doesn't revert; a larger, real coverage gap still enforces the full floor.
244
+ function directTransferSweepFloor(spec, netMin, swapSteps, outputTokenAddress) {
245
+ const { min: directOutputMin, legs } = directOutputCoverage(swapSteps, spec.recipient, outputTokenAddress);
246
+ const shortfall = netMin.sub(directOutputMin);
247
+ // flexibility tolerance: min(0.5bps of netMin, 1% of the slippage the user set). Headroom for a router's
248
+ // per-leg slippage math; scales to 0 as slippage -> 0 (and is 0 for exact-output, which has no
249
+ // output-side slippage), so an exact-price trade stays exact.
250
+ const slippageNumerator = ethers_1.BigNumber.from(spec.slippageTolerance.numerator.toString());
251
+ const slippageDenominator = ethers_1.BigNumber.from(spec.slippageTolerance.denominator.toString());
252
+ const outputSlippage = spec.tradeType === sdk_core_1.TradeType.EXACT_INPUT
253
+ ? ethers_1.BigNumber.from(spec.routing.quote.quotient.toString()).mul(slippageNumerator).div(slippageDenominator)
254
+ : ethers_1.BigNumber.from(0);
255
+ const halfBps = netMin.div(20000);
256
+ const onePercentOfSlippage = outputSlippage.div(100);
257
+ const flexibilityTolerance = halfBps.lt(onePercentOfSlippage) ? halfBps : onePercentOfSlippage;
258
+ // rounding tolerance: 2 wei per direct leg — inherent integer per-leg flooring, always allowed.
259
+ const roundingTolerance = ethers_1.BigNumber.from(legs * 2);
260
+ const toleratedShortfall = flexibilityTolerance.gt(roundingTolerance) ? flexibilityTolerance : roundingTolerance;
261
+ return shortfall.gt(toleratedShortfall) ? shortfall : ethers_1.BigNumber.from(0);
262
+ }
263
+ exports.directTransferSweepFloor = directTransferSweepFloor;
264
+ //# sourceMappingURL=directTransfers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directTransfers.js","sourceRoot":"","sources":["../../../../src/utils/directTransfers.ts"],"names":[],"mappings":"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"}
@@ -6,34 +6,34 @@ const constants_1 = require("./constants");
6
6
  const routerCommands_1 = require("./routerCommands");
7
7
  const encodeV4Action_1 = require("./encodeV4Action");
8
8
  const toV4URVersion_1 = require("./toV4URVersion");
9
- // V2/V3 swap params hardcode payerIsUser=false; encodeSwaps pulls funds into the router first via PERMIT2_TRANSFER_FROM
9
+ // payerIsUser defaults to false (router custody); validateEncodeSwaps gates when true is allowed
10
10
  function encodeSwapStep(planner, step, urVersion) {
11
11
  var _a, _b, _c, _d;
12
12
  const useV2_1_1 = (0, constants_1.isAtLeastV2_1_1)(urVersion);
13
13
  switch (step.type) {
14
14
  case 'V2_SWAP_EXACT_IN': {
15
- const params = [step.recipient, step.amountIn, step.amountOutMin, step.path, false];
15
+ const params = [step.recipient, step.amountIn, step.amountOutMin, step.path, step.payerIsUser === true];
16
16
  if (useV2_1_1)
17
17
  params.push((_a = step.minHopPriceX36) !== null && _a !== void 0 ? _a : []);
18
18
  planner.addCommand(routerCommands_1.CommandType.V2_SWAP_EXACT_IN, params, false, urVersion);
19
19
  return;
20
20
  }
21
21
  case 'V2_SWAP_EXACT_OUT': {
22
- const params = [step.recipient, step.amountOut, step.amountInMax, step.path, false];
22
+ const params = [step.recipient, step.amountOut, step.amountInMax, step.path, step.payerIsUser === true];
23
23
  if (useV2_1_1)
24
24
  params.push((_b = step.minHopPriceX36) !== null && _b !== void 0 ? _b : []);
25
25
  planner.addCommand(routerCommands_1.CommandType.V2_SWAP_EXACT_OUT, params, false, urVersion);
26
26
  return;
27
27
  }
28
28
  case 'V3_SWAP_EXACT_IN': {
29
- const params = [step.recipient, step.amountIn, step.amountOutMin, step.path, false];
29
+ const params = [step.recipient, step.amountIn, step.amountOutMin, step.path, step.payerIsUser === true];
30
30
  if (useV2_1_1)
31
31
  params.push((_c = step.minHopPriceX36) !== null && _c !== void 0 ? _c : []);
32
32
  planner.addCommand(routerCommands_1.CommandType.V3_SWAP_EXACT_IN, params, false, urVersion);
33
33
  return;
34
34
  }
35
35
  case 'V3_SWAP_EXACT_OUT': {
36
- const params = [step.recipient, step.amountOut, step.amountInMax, step.path, false];
36
+ const params = [step.recipient, step.amountOut, step.amountInMax, step.path, step.payerIsUser === true];
37
37
  if (useV2_1_1)
38
38
  params.push((_d = step.minHopPriceX36) !== null && _d !== void 0 ? _d : []);
39
39
  planner.addCommand(routerCommands_1.CommandType.V3_SWAP_EXACT_OUT, params, false, urVersion);