@uniswap/universal-router-sdk 5.2.0 → 5.4.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/README.md +81 -0
  2. package/dist/cjs/src/index.d.ts +3 -0
  3. package/dist/cjs/src/index.js +6 -1
  4. package/dist/cjs/src/index.js.map +1 -1
  5. package/dist/cjs/src/swapRouter.d.ts +17 -1
  6. package/dist/cjs/src/swapRouter.js +83 -8
  7. package/dist/cjs/src/swapRouter.js.map +1 -1
  8. package/dist/cjs/src/types/encodeSwaps.d.ts +149 -0
  9. package/dist/cjs/src/types/encodeSwaps.js +3 -0
  10. package/dist/cjs/src/types/encodeSwaps.js.map +1 -0
  11. package/dist/cjs/src/utils/computeEncodeSwapsAmounts.d.ts +8 -0
  12. package/dist/cjs/src/utils/computeEncodeSwapsAmounts.js +47 -0
  13. package/dist/cjs/src/utils/computeEncodeSwapsAmounts.js.map +1 -0
  14. package/dist/cjs/src/utils/constants.js +15 -0
  15. package/dist/cjs/src/utils/constants.js.map +1 -1
  16. package/dist/cjs/src/utils/encodeSwapStep.d.ts +4 -0
  17. package/dist/cjs/src/utils/encodeSwapStep.js +61 -0
  18. package/dist/cjs/src/utils/encodeSwapStep.js.map +1 -0
  19. package/dist/cjs/src/utils/encodeV4Action.d.ts +8 -0
  20. package/dist/cjs/src/utils/encodeV4Action.js +97 -0
  21. package/dist/cjs/src/utils/encodeV4Action.js.map +1 -0
  22. package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.d.ts +2 -0
  23. package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.js +18 -0
  24. package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.js.map +1 -0
  25. package/dist/cjs/src/utils/validateEncodeSwaps.d.ts +2 -0
  26. package/dist/cjs/src/utils/validateEncodeSwaps.js +135 -0
  27. package/dist/cjs/src/utils/validateEncodeSwaps.js.map +1 -0
  28. package/dist/esm/src/index.d.ts +3 -0
  29. package/dist/esm/src/index.js +3 -0
  30. package/dist/esm/src/index.js.map +1 -1
  31. package/dist/esm/src/swapRouter.d.ts +17 -1
  32. package/dist/esm/src/swapRouter.js +85 -10
  33. package/dist/esm/src/swapRouter.js.map +1 -1
  34. package/dist/esm/src/types/encodeSwaps.d.ts +149 -0
  35. package/dist/esm/src/types/encodeSwaps.js +2 -0
  36. package/dist/esm/src/types/encodeSwaps.js.map +1 -0
  37. package/dist/esm/src/utils/computeEncodeSwapsAmounts.d.ts +8 -0
  38. package/dist/esm/src/utils/computeEncodeSwapsAmounts.js +43 -0
  39. package/dist/esm/src/utils/computeEncodeSwapsAmounts.js.map +1 -0
  40. package/dist/esm/src/utils/constants.js +15 -0
  41. package/dist/esm/src/utils/constants.js.map +1 -1
  42. package/dist/esm/src/utils/encodeSwapStep.d.ts +4 -0
  43. package/dist/esm/src/utils/encodeSwapStep.js +57 -0
  44. package/dist/esm/src/utils/encodeSwapStep.js.map +1 -0
  45. package/dist/esm/src/utils/encodeV4Action.d.ts +8 -0
  46. package/dist/esm/src/utils/encodeV4Action.js +92 -0
  47. package/dist/esm/src/utils/encodeV4Action.js.map +1 -0
  48. package/dist/esm/src/utils/normalizeEncodeSwapsSpec.d.ts +2 -0
  49. package/dist/esm/src/utils/normalizeEncodeSwapsSpec.js +14 -0
  50. package/dist/esm/src/utils/normalizeEncodeSwapsSpec.js.map +1 -0
  51. package/dist/esm/src/utils/validateEncodeSwaps.d.ts +2 -0
  52. package/dist/esm/src/utils/validateEncodeSwaps.js +130 -0
  53. package/dist/esm/src/utils/validateEncodeSwaps.js.map +1 -0
  54. package/dist/types/src/index.d.ts +3 -0
  55. package/dist/types/src/swapRouter.d.ts +17 -1
  56. package/dist/types/src/types/encodeSwaps.d.ts +149 -0
  57. package/dist/types/src/utils/computeEncodeSwapsAmounts.d.ts +8 -0
  58. package/dist/types/src/utils/encodeSwapStep.d.ts +4 -0
  59. package/dist/types/src/utils/encodeV4Action.d.ts +8 -0
  60. package/dist/types/src/utils/normalizeEncodeSwapsSpec.d.ts +2 -0
  61. package/dist/types/src/utils/validateEncodeSwaps.d.ts +2 -0
  62. package/package.json +6 -6
package/README.md CHANGED
@@ -22,6 +22,11 @@ const routerTrade = new RouterTrade({ v2Routes, v3Routes, mixedRoutes, tradeType
22
22
  const { calldata, value } = SwapRouter.swapCallParameters(routerTrade, options)
23
23
  ```
24
24
 
25
+ This SDK has two entry points for encoding swap calldata:
26
+
27
+ - **`SwapRouter.swapCallParameters(trade, options)`** — builds calldata from a high-level `RouterTrade` (shown above). Best when your swap fits as one or more independent linear routes through pools.
28
+ - **`SwapRouter.encodeSwaps(spec, swapSteps)`** — takes Universal Router commands directly, with the SDK adding ingress, fee, and settlement calldata around them. Best for topologies that don't fit a Trade, routing-service integrations, or advanced V4 compositions. See [Encoding Router-Provided Swap Steps](#encoding-router-provided-swap-steps-encodeswaps).
29
+
25
30
  ## Running this package
26
31
 
27
32
  Make sure you are running `node v18`
@@ -39,6 +44,82 @@ forge install
39
44
  yarn test:forge
40
45
  ```
41
46
 
47
+ ## Encoding Router-Provided Swap Steps (`encodeSwaps`)
48
+
49
+ `SwapRouter.encodeSwaps(spec, swapSteps)` is an alternative entry point for callers that already produce explicit `SwapStep[]` plans (e.g. routing services) and want the SDK to wrap them in a safety envelope. It decouples route topology from SDK trade construction.
50
+
51
+ The router owns `swapSteps` (V2/V3/V4 swaps + any `WRAP_ETH` / `UNWRAP_WETH`). The SDK owns ingress, fees, final settlement, exact-output refund, and optional `safeMode`.
52
+
53
+ ### Swap Step Types
54
+
55
+ Each `SwapStep` is a 1:1 representation of a Universal Router command:
56
+
57
+ - `V2_SWAP_EXACT_IN` / `V2_SWAP_EXACT_OUT` — V2 swap (multi-hop via `path: address[]`)
58
+ - `V3_SWAP_EXACT_IN` / `V3_SWAP_EXACT_OUT` — V3 swap (multi-hop via packed `path: bytes`)
59
+ - `V4_SWAP` — wraps a sequence of V4 actions (`SWAP_EXACT_IN`, `SETTLE`, `TAKE`, etc.) for the V4 router module
60
+ - `WRAP_ETH` / `UNWRAP_WETH` — required when the route bridges native ETH and WETH
61
+
62
+ Routers compose these to express any supported route topology. The SDK does not infer wrap/unwrap commands — routers must include them when their route depends on it.
63
+
64
+ ### Basic Usage
65
+
66
+ ```typescript
67
+ import { SwapRouter, ROUTER_AS_RECIPIENT } from '@uniswap/universal-router-sdk'
68
+ import { CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core'
69
+
70
+ const { calldata, value } = SwapRouter.encodeSwaps(
71
+ {
72
+ tradeType: TradeType.EXACT_INPUT,
73
+ routing: {
74
+ inputToken: USDC,
75
+ outputToken: WETH,
76
+ amount: CurrencyAmount.fromRawAmount(USDC, '1000000000'),
77
+ quote: CurrencyAmount.fromRawAmount(WETH, '500000000000000000'),
78
+ },
79
+ slippageTolerance: new Percent(50, 10000), // 0.5%
80
+ recipient: '0x...',
81
+ },
82
+ [
83
+ {
84
+ type: 'V3_SWAP_EXACT_IN',
85
+ recipient: ROUTER_AS_RECIPIENT,
86
+ amountIn: '1000000000',
87
+ amountOutMin: '0', // SDK enforces final slippage via the trailing SWEEP
88
+ path: '0x...', // packed V3 path
89
+ },
90
+ ]
91
+ )
92
+ ```
93
+
94
+ ### What the SDK adds around `swapSteps`
95
+
96
+ 1. **Ingress**: `PERMIT2_TRANSFER_FROM` for ERC20 input, or `proxy.execute()` wrapping for `ApproveProxy`. Native input flows through `msg.value`.
97
+ 2. **Fee deduction** before settlement: portion (`PAY_PORTION` / `PAY_PORTION_FULL_PRECISION`) on exact-input, flat (`TRANSFER`) on exact-output.
98
+ 3. **Final SWEEP** of `outputToken` to recipient with the slippage-bounded floor.
99
+ 4. **Exact-output refund**: SWEEPs unused input back to recipient.
100
+ 5. **safeMode** (optional): trailing zero-min ETH SWEEP to recover dust or unintended `msg.value`.
101
+
102
+ ### Constraints
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`.
106
+ - Routers must end with output in `routing.outputToken`. For exact-output, unused input must end in `routing.inputToken`.
107
+ - The final top-level `SWEEP` is appended by the SDK — don't include it in `swapSteps`.
108
+
109
+ ### Per-Hop Slippage
110
+
111
+ Per-hop bounds require Universal Router v2.1.1+ — set `urVersion: UniversalRouterVersion.V2_1_1` on `spec` to enable.
112
+
113
+ `encodeSwaps` accepts per-hop bounds as `minHopPriceX36` on each swap step, matching the contract parameter name. The value is a 1e36-scaled price floor.
114
+
115
+ ```typescript
116
+ {
117
+ type: 'V3_SWAP_EXACT_IN',
118
+ // ...
119
+ minHopPriceX36: ['995000000000000000000000000000000000', ...], // one per hop
120
+ }
121
+ ```
122
+
42
123
  ## Signed Routes (Universal Router v2.1)
43
124
 
44
125
  Universal Router v2.1 supports EIP712-signed route execution, enabling gasless transactions and intent-based trading.
@@ -1,5 +1,6 @@
1
1
  export { SwapRouter } from './swapRouter';
2
2
  export type { MigrateV3ToV4Options, SignedRouteOptions, EIP712Payload } from './swapRouter';
3
+ export * from './types/encodeSwaps';
3
4
  export * from './entities';
4
5
  export * from './utils/routerTradeAdapter';
5
6
  export { RoutePlanner, CommandType, COMMAND_DEFINITION, Parser, Subparser } from './utils/routerCommands';
@@ -8,4 +9,6 @@ export { UNIVERSAL_ROUTER_CREATION_BLOCK, UNIVERSAL_ROUTER_ADDRESS, SWAP_PROXY_A
8
9
  export { CommandParser, GenericCommandParser } from './utils/commandParser';
9
10
  export type { UniversalRouterCommand, UniversalRouterCall, Param, CommandsDefinition } from './utils/commandParser';
10
11
  export type { Permit2Permit } from './utils/inputTokens';
12
+ export { normalizeEncodeSwapsSpec } from './utils/normalizeEncodeSwapsSpec';
13
+ export { validateEncodeSwaps } from './utils/validateEncodeSwaps';
11
14
  export { NONCE_SKIP_CHECK, generateNonce, EXECUTE_SIGNED_TYPES, getUniversalRouterDomain } from './utils/eip712';
@@ -1,9 +1,10 @@
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.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.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; } });
7
+ tslib_1.__exportStar(require("./types/encodeSwaps"), exports);
7
8
  tslib_1.__exportStar(require("./entities"), exports);
8
9
  tslib_1.__exportStar(require("./utils/routerTradeAdapter"), exports);
9
10
  var routerCommands_1 = require("./utils/routerCommands");
@@ -23,6 +24,10 @@ Object.defineProperty(exports, "isAtLeastV2_1_1", { enumerable: true, get: funct
23
24
  var commandParser_1 = require("./utils/commandParser");
24
25
  Object.defineProperty(exports, "CommandParser", { enumerable: true, get: function () { return commandParser_1.CommandParser; } });
25
26
  Object.defineProperty(exports, "GenericCommandParser", { enumerable: true, get: function () { return commandParser_1.GenericCommandParser; } });
27
+ var normalizeEncodeSwapsSpec_1 = require("./utils/normalizeEncodeSwapsSpec");
28
+ Object.defineProperty(exports, "normalizeEncodeSwapsSpec", { enumerable: true, get: function () { return normalizeEncodeSwapsSpec_1.normalizeEncodeSwapsSpec; } });
29
+ var validateEncodeSwaps_1 = require("./utils/validateEncodeSwaps");
30
+ Object.defineProperty(exports, "validateEncodeSwaps", { enumerable: true, get: function () { return validateEncodeSwaps_1.validateEncodeSwaps; } });
26
31
  var eip712_1 = require("./utils/eip712");
27
32
  Object.defineProperty(exports, "NONCE_SKIP_CHECK", { enumerable: true, get: function () { return eip712_1.NONCE_SKIP_CHECK; } });
28
33
  Object.defineProperty(exports, "generateNonce", { enumerable: true, get: function () { return eip712_1.generateNonce; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;;AAAA,2CAAyC;AAAhC,wGAAA,UAAU,OAAA;AAEnB,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,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,mEAAiE;AAAxD,0HAAA,mBAAmB,OAAA;AAC5B,yCAAgH;AAAvG,0GAAA,gBAAgB,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAAE,kHAAA,wBAAwB,OAAA"}
@@ -6,6 +6,7 @@ import { Trade as RouterTrade } from '@uniswap/router-sdk';
6
6
  import { Currency, TradeType } from '@uniswap/sdk-core';
7
7
  import { SwapOptions } from './entities/actions/uniswap';
8
8
  import { AcrossV4DepositV3Params } from './entities/actions/across';
9
+ import { SwapSpecification, SwapStep } from './types/encodeSwaps';
9
10
  import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer';
10
11
  export type SwapRouterConfig = {
11
12
  sender?: string;
@@ -40,6 +41,20 @@ export declare abstract class SwapRouter {
40
41
  static INTERFACE: Interface;
41
42
  static PROXY_INTERFACE: Interface;
42
43
  static swapCallParameters(trades: RouterTrade<Currency, Currency, TradeType>, options: SwapOptions, bridgeOptions?: AcrossV4DepositV3Params[]): MethodParameters;
44
+ /**
45
+ * Encodes router-provided swap steps inside the SDK safety envelope.
46
+ *
47
+ * Routers own `swapSteps` (V2/V3/V4 swaps, plus any `WRAP_ETH` / `UNWRAP_WETH` required by the route).
48
+ * The SDK owns ingress, fees, final settlement, exact-output refund, and optional `safeMode`.
49
+ *
50
+ * Router contract: end with final output in `spec.routing.outputToken`; for `EXACT_OUTPUT`, unused input
51
+ * must end in `spec.routing.inputToken`. Don't include a top-level `SWEEP` — the SDK appends settlement,
52
+ * 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
+ */
57
+ static encodeSwaps(spec: SwapSpecification, swapSteps: SwapStep[]): MethodParameters;
43
58
  /**
44
59
  * Generate EIP712 payload for signed execution (no signing performed)
45
60
  * Decodes existing execute() calldata and prepares it for signing
@@ -80,8 +95,9 @@ export declare abstract class SwapRouter {
80
95
  */
81
96
  private static encodePlan;
82
97
  /**
83
- * Encodes a planned route into calldata targeting the SwapProxy contract.
98
+ * Wraps an inner UR plan in calldata targeting the SwapProxy contract.
84
99
  * The proxy pulls ERC20 tokens from the user into the UR, then executes commands.
85
100
  */
86
101
  private static encodeProxyPlan;
102
+ private static encodeProxyCall;
87
103
  }
@@ -13,7 +13,14 @@ const uniswap_1 = require("./entities/actions/uniswap");
13
13
  const routerCommands_1 = require("./utils/routerCommands");
14
14
  const inputTokens_1 = require("./utils/inputTokens");
15
15
  const constants_1 = require("./utils/constants");
16
+ const getCurrencyAddress_1 = require("./utils/getCurrencyAddress");
17
+ const numbers_1 = require("./utils/numbers");
18
+ const encodeSwapStep_1 = require("./utils/encodeSwapStep");
19
+ const computeEncodeSwapsAmounts_1 = require("./utils/computeEncodeSwapsAmounts");
20
+ const normalizeEncodeSwapsSpec_1 = require("./utils/normalizeEncodeSwapsSpec");
21
+ const validateEncodeSwaps_1 = require("./utils/validateEncodeSwaps");
16
22
  const eip712_1 = require("./utils/eip712");
23
+ const DEFAULT_PROXY_DEADLINE_BUFFER_SECONDS = 30 * 60;
17
24
  function isMint(options) {
18
25
  return Object.keys(options).some((k) => k === 'recipient');
19
26
  }
@@ -52,6 +59,73 @@ class SwapRouter {
52
59
  deadline: options.deadlineOrPreviousBlockhash ? ethers_1.BigNumber.from(options.deadlineOrPreviousBlockhash) : undefined,
53
60
  });
54
61
  }
62
+ /**
63
+ * Encodes router-provided swap steps inside the SDK safety envelope.
64
+ *
65
+ * Routers own `swapSteps` (V2/V3/V4 swaps, plus any `WRAP_ETH` / `UNWRAP_WETH` required by the route).
66
+ * The SDK owns ingress, fees, final settlement, exact-output refund, and optional `safeMode`.
67
+ *
68
+ * Router contract: end with final output in `spec.routing.outputToken`; for `EXACT_OUTPUT`, unused input
69
+ * must end in `spec.routing.inputToken`. Don't include a top-level `SWEEP` — the SDK appends settlement,
70
+ * refund, and safeMode sweeps itself.
71
+ *
72
+ * Router custody with `payerIsUser = false` is deliberate for safety, even if it costs an extra command
73
+ * or transfer; the SDK does not infer route topology on behalf of routers.
74
+ */
75
+ static encodeSwaps(spec, swapSteps) {
76
+ var _a, _b;
77
+ const normalizedSpec = (0, normalizeEncodeSwapsSpec_1.normalizeEncodeSwapsSpec)(spec);
78
+ const planner = new routerCommands_1.RoutePlanner();
79
+ (0, validateEncodeSwaps_1.validateEncodeSwaps)(normalizedSpec, swapSteps);
80
+ const { exactOrMaxAmountIn, netMinOrExactAmountOut } = (0, computeEncodeSwapsAmounts_1.computeEncodeSwapsAmounts)(normalizedSpec);
81
+ const { routing: { inputToken, outputToken }, } = normalizedSpec;
82
+ // Ingress: pull funds into the router. Native input is paid as msg.value at the bottom
83
+ // instead of via Permit2; ApproveProxy ingress is handled by the outer wrapper at the end.
84
+ if (normalizedSpec.tokenTransferMode === uniswap_1.TokenTransferMode.Permit2) {
85
+ if (normalizedSpec.permit) {
86
+ (0, inputTokens_1.encodePermit)(planner, normalizedSpec.permit);
87
+ }
88
+ if (!inputToken.isNative) {
89
+ planner.addCommand(routerCommands_1.CommandType.PERMIT2_TRANSFER_FROM, [(0, getCurrencyAddress_1.getCurrencyAddress)(inputToken), constants_1.ROUTER_AS_RECIPIENT, exactOrMaxAmountIn], false, normalizedSpec.urVersion);
90
+ }
91
+ }
92
+ for (const step of swapSteps) {
93
+ (0, encodeSwapStep_1.encodeSwapStep)(planner, step, normalizedSpec.urVersion);
94
+ }
95
+ // Fee deducted from gross output before final settlement.
96
+ // Portion uses 1e18 precision on >=v2.1.1 and bps on v2.0; flat is a plain TRANSFER.
97
+ if (((_a = normalizedSpec.fee) === null || _a === void 0 ? void 0 : _a.kind) === 'portion') {
98
+ const feeCommandType = (0, constants_1.isAtLeastV2_1_1)(normalizedSpec.urVersion)
99
+ ? routerCommands_1.CommandType.PAY_PORTION_FULL_PRECISION
100
+ : routerCommands_1.CommandType.PAY_PORTION;
101
+ const encodedFee = (0, constants_1.isAtLeastV2_1_1)(normalizedSpec.urVersion)
102
+ ? (0, numbers_1.encodeFee1e18)(normalizedSpec.fee.fee)
103
+ : (0, numbers_1.encodeFeeBips)(normalizedSpec.fee.fee);
104
+ planner.addCommand(feeCommandType, [(0, getCurrencyAddress_1.getCurrencyAddress)(outputToken), normalizedSpec.fee.recipient, encodedFee], false, normalizedSpec.urVersion);
105
+ }
106
+ else if (((_b = normalizedSpec.fee) === null || _b === void 0 ? void 0 : _b.kind) === 'flat') {
107
+ planner.addCommand(routerCommands_1.CommandType.TRANSFER, [(0, getCurrencyAddress_1.getCurrencyAddress)(outputToken), normalizedSpec.fee.recipient, normalizedSpec.fee.amount], false, normalizedSpec.urVersion);
108
+ }
109
+ // Assumes routers already normalized final gross output into `routing.outputToken`.
110
+ planner.addCommand(routerCommands_1.CommandType.SWEEP, [(0, getCurrencyAddress_1.getCurrencyAddress)(outputToken), normalizedSpec.recipient, netMinOrExactAmountOut], false, normalizedSpec.urVersion);
111
+ // Assumes routers already normalized unused input into `routing.inputToken`.
112
+ // Exact-output uses max input, so any unused slippage padding is refunded to the recipient.
113
+ if (normalizedSpec.tradeType === sdk_core_1.TradeType.EXACT_OUTPUT) {
114
+ planner.addCommand(routerCommands_1.CommandType.SWEEP, [(0, getCurrencyAddress_1.getCurrencyAddress)(inputToken), normalizedSpec.recipient, 0], false, normalizedSpec.urVersion);
115
+ }
116
+ // safeMode: zero-min ETH sweep recovers any native funds left on the router (dust or unintended msg.value)
117
+ if (normalizedSpec.safeMode) {
118
+ planner.addCommand(routerCommands_1.CommandType.SWEEP, [constants_1.ETH_ADDRESS, normalizedSpec.recipient, 0], false, normalizedSpec.urVersion);
119
+ }
120
+ // ApproveProxy wraps the inner UR plan in an outer proxy.execute() that handles ingress upstream.
121
+ if (normalizedSpec.tokenTransferMode === uniswap_1.TokenTransferMode.ApproveProxy) {
122
+ return SwapRouter.encodeProxyCall(planner, (0, getCurrencyAddress_1.getCurrencyAddress)(inputToken), exactOrMaxAmountIn, normalizedSpec.chainId, normalizedSpec.urVersion, normalizedSpec.deadline);
123
+ }
124
+ // Native input pays via msg.value; ERC20 input is already in the router via Permit2.
125
+ return SwapRouter.encodePlan(planner, inputToken.isNative ? exactOrMaxAmountIn : ethers_1.BigNumber.from(0), {
126
+ deadline: normalizedSpec.deadline ? ethers_1.BigNumber.from(normalizedSpec.deadline) : undefined,
127
+ });
128
+ }
55
129
  /**
56
130
  * Generate EIP712 payload for signed execution (no signing performed)
57
131
  * Decodes existing execute() calldata and prepares it for signing
@@ -232,25 +306,26 @@ class SwapRouter {
232
306
  return { calldata, value: nativeCurrencyValue.toHexString() };
233
307
  }
234
308
  /**
235
- * Encodes a planned route into calldata targeting the SwapProxy contract.
309
+ * Wraps an inner UR plan in calldata targeting the SwapProxy contract.
236
310
  * The proxy pulls ERC20 tokens from the user into the UR, then executes commands.
237
311
  */
238
312
  static encodeProxyPlan(planner, trade, options) {
239
313
  var _a;
314
+ return SwapRouter.encodeProxyCall(planner, trade.trade.inputAmount.currency.address, ethers_1.BigNumber.from(trade.trade.maximumAmountIn(options.slippageTolerance).quotient.toString()), options.chainId, (_a = options.urVersion) !== null && _a !== void 0 ? _a : constants_1.UniversalRouterVersion.V2_0, options.deadlineOrPreviousBlockhash ? ethers_1.BigNumber.from(options.deadlineOrPreviousBlockhash) : undefined);
315
+ }
316
+ static encodeProxyCall(planner, inputToken, inputAmount, chainId, urVersion, deadline) {
240
317
  const { commands, inputs } = planner;
241
- const routerAddress = (0, constants_1.UNIVERSAL_ROUTER_ADDRESS)((_a = options.urVersion) !== null && _a !== void 0 ? _a : constants_1.UniversalRouterVersion.V2_0, options.chainId);
242
- const inputToken = trade.trade.inputAmount.currency.address;
243
- const inputAmount = ethers_1.BigNumber.from(trade.trade.maximumAmountIn(options.slippageTolerance).quotient.toString());
244
- const deadline = options.deadlineOrPreviousBlockhash
245
- ? ethers_1.BigNumber.from(options.deadlineOrPreviousBlockhash)
246
- : ethers_1.BigNumber.from(Math.floor(Date.now() / 1000) + 1800); // 30 min default
318
+ const routerAddress = (0, constants_1.UNIVERSAL_ROUTER_ADDRESS)(urVersion, chainId);
319
+ const resolvedDeadline = deadline
320
+ ? ethers_1.BigNumber.from(deadline)
321
+ : ethers_1.BigNumber.from(Math.floor(Date.now() / 1000) + DEFAULT_PROXY_DEADLINE_BUFFER_SECONDS); // 30 min default
247
322
  const calldata = SwapRouter.PROXY_INTERFACE.encodeFunctionData('execute', [
248
323
  routerAddress,
249
324
  inputToken,
250
325
  inputAmount,
251
326
  commands,
252
327
  inputs,
253
- deadline,
328
+ resolvedDeadline,
254
329
  ]);
255
330
  return { calldata, value: ethers_1.BigNumber.from(0).toHexString() };
256
331
  }
@@ -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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"}
@@ -0,0 +1,149 @@
1
+ import { BigNumberish } from 'ethers';
2
+ import { Currency, CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core';
3
+ import { type PathKey, type PoolKey } from '@uniswap/v4-sdk';
4
+ import { TokenTransferMode } from '../entities/actions/uniswap';
5
+ import { Permit2Permit } from '../utils/inputTokens';
6
+ import { UniversalRouterVersion } from '../utils/constants';
7
+ export type { PathKey, PoolKey };
8
+ export type Fee = {
9
+ kind: 'portion';
10
+ recipient: string;
11
+ fee: Percent;
12
+ } | {
13
+ kind: 'flat';
14
+ recipient: string;
15
+ amount: BigNumberish;
16
+ };
17
+ export type SwapSpecification = {
18
+ tradeType: TradeType;
19
+ routing: {
20
+ inputToken: Currency;
21
+ outputToken: Currency;
22
+ amount: CurrencyAmount<Currency>;
23
+ quote: CurrencyAmount<Currency>;
24
+ };
25
+ slippageTolerance: Percent;
26
+ recipient?: string;
27
+ fee?: Fee;
28
+ tokenTransferMode?: TokenTransferMode;
29
+ permit?: Permit2Permit;
30
+ chainId?: number;
31
+ deadline?: BigNumberish;
32
+ urVersion?: UniversalRouterVersion;
33
+ safeMode?: boolean;
34
+ };
35
+ export type NormalizedSwapSpecification = Omit<SwapSpecification, 'recipient' | 'tokenTransferMode' | 'urVersion' | 'safeMode'> & {
36
+ recipient: string;
37
+ tokenTransferMode: TokenTransferMode;
38
+ urVersion: UniversalRouterVersion;
39
+ safeMode: boolean;
40
+ };
41
+ export type V2SwapExactIn = {
42
+ type: 'V2_SWAP_EXACT_IN';
43
+ recipient: string;
44
+ amountIn: BigNumberish;
45
+ amountOutMin: BigNumberish;
46
+ path: string[];
47
+ minHopPriceX36?: BigNumberish[];
48
+ };
49
+ export type V2SwapExactOut = {
50
+ type: 'V2_SWAP_EXACT_OUT';
51
+ recipient: string;
52
+ amountOut: BigNumberish;
53
+ amountInMax: BigNumberish;
54
+ path: string[];
55
+ minHopPriceX36?: BigNumberish[];
56
+ };
57
+ export type V3SwapExactIn = {
58
+ type: 'V3_SWAP_EXACT_IN';
59
+ recipient: string;
60
+ amountIn: BigNumberish;
61
+ amountOutMin: BigNumberish;
62
+ path: string;
63
+ minHopPriceX36?: BigNumberish[];
64
+ };
65
+ export type V3SwapExactOut = {
66
+ type: 'V3_SWAP_EXACT_OUT';
67
+ recipient: string;
68
+ amountOut: BigNumberish;
69
+ amountInMax: BigNumberish;
70
+ path: string;
71
+ minHopPriceX36?: BigNumberish[];
72
+ };
73
+ export type V4Swap = {
74
+ type: 'V4_SWAP';
75
+ v4Actions: V4Action[];
76
+ };
77
+ export type WrapEth = {
78
+ type: 'WRAP_ETH';
79
+ recipient: string;
80
+ amount: BigNumberish;
81
+ };
82
+ export type UnwrapWeth = {
83
+ type: 'UNWRAP_WETH';
84
+ recipient: string;
85
+ amountMin: BigNumberish;
86
+ };
87
+ export type SwapStep = V2SwapExactIn | V2SwapExactOut | V3SwapExactIn | V3SwapExactOut | V4Swap | WrapEth | UnwrapWeth;
88
+ export type V4SwapExactIn = {
89
+ action: 'SWAP_EXACT_IN';
90
+ currencyIn: string;
91
+ path: PathKey[];
92
+ amountIn: BigNumberish;
93
+ amountOutMinimum: BigNumberish;
94
+ minHopPriceX36?: BigNumberish[];
95
+ };
96
+ export type V4SwapExactInSingle = {
97
+ action: 'SWAP_EXACT_IN_SINGLE';
98
+ poolKey: PoolKey;
99
+ zeroForOne: boolean;
100
+ amountIn: BigNumberish;
101
+ amountOutMinimum: BigNumberish;
102
+ minHopPriceX36?: BigNumberish;
103
+ hookData: string;
104
+ };
105
+ export type V4SwapExactOut = {
106
+ action: 'SWAP_EXACT_OUT';
107
+ currencyOut: string;
108
+ path: PathKey[];
109
+ amountOut: BigNumberish;
110
+ amountInMaximum: BigNumberish;
111
+ minHopPriceX36?: BigNumberish[];
112
+ };
113
+ export type V4SwapExactOutSingle = {
114
+ action: 'SWAP_EXACT_OUT_SINGLE';
115
+ poolKey: PoolKey;
116
+ zeroForOne: boolean;
117
+ amountOut: BigNumberish;
118
+ amountInMaximum: BigNumberish;
119
+ minHopPriceX36?: BigNumberish;
120
+ hookData: string;
121
+ };
122
+ export type V4Settle = {
123
+ action: 'SETTLE';
124
+ currency: string;
125
+ amount: BigNumberish;
126
+ };
127
+ export type V4SettleAll = {
128
+ action: 'SETTLE_ALL';
129
+ currency: string;
130
+ maxAmount: BigNumberish;
131
+ };
132
+ export type V4Take = {
133
+ action: 'TAKE';
134
+ currency: string;
135
+ recipient: string;
136
+ amount: BigNumberish;
137
+ };
138
+ export type V4TakeAll = {
139
+ action: 'TAKE_ALL';
140
+ currency: string;
141
+ minAmount: BigNumberish;
142
+ };
143
+ export type V4TakePortion = {
144
+ action: 'TAKE_PORTION';
145
+ currency: string;
146
+ recipient: string;
147
+ bips: BigNumberish;
148
+ };
149
+ export type V4Action = V4SwapExactIn | V4SwapExactInSingle | V4SwapExactOut | V4SwapExactOutSingle | V4Settle | V4SettleAll | V4Take | V4TakeAll | V4TakePortion;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=encodeSwaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encodeSwaps.js","sourceRoot":"","sources":["../../../../src/types/encodeSwaps.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { BigNumber } from 'ethers';
2
+ import { NormalizedSwapSpecification } from '../types/encodeSwaps';
3
+ export type EncodeSwapsAmounts = {
4
+ exactOrMaxAmountIn: BigNumber;
5
+ grossMinOrExactAmountOut: BigNumber;
6
+ netMinOrExactAmountOut: BigNumber;
7
+ };
8
+ export declare function computeEncodeSwapsAmounts(spec: NormalizedSwapSpecification): EncodeSwapsAmounts;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.computeEncodeSwapsAmounts = void 0;
4
+ const ethers_1 = require("ethers");
5
+ const sdk_core_1 = require("@uniswap/sdk-core");
6
+ const constants_1 = require("./constants");
7
+ const numbers_1 = require("./numbers");
8
+ // Slippage is applied to the quote: scaled down to a floor for exact-input output,
9
+ // scaled up to a ceiling for exact-output input. The unscaled side is the user's exact value.
10
+ // Portion fees pair with exact-input (1e18 precision on >=v2.1.1, bps on v2.0); flat fees pair with exact-output.
11
+ function computeEncodeSwapsAmounts(spec) {
12
+ var _a, _b;
13
+ const routingAmount = ethers_1.BigNumber.from(spec.routing.amount.quotient.toString());
14
+ const routingQuote = ethers_1.BigNumber.from(spec.routing.quote.quotient.toString());
15
+ const slippageNumerator = ethers_1.BigNumber.from(spec.slippageTolerance.numerator.toString());
16
+ const slippageDenominator = ethers_1.BigNumber.from(spec.slippageTolerance.denominator.toString());
17
+ if (spec.tradeType === sdk_core_1.TradeType.EXACT_INPUT) {
18
+ const grossMinOrExactAmountOut = routingQuote
19
+ .mul(slippageDenominator)
20
+ .div(slippageDenominator.add(slippageNumerator));
21
+ if (((_a = spec.fee) === null || _a === void 0 ? void 0 : _a.kind) === 'portion') {
22
+ const feeAmount = (0, constants_1.isAtLeastV2_1_1)(spec.urVersion)
23
+ ? grossMinOrExactAmountOut.mul(ethers_1.BigNumber.from((0, numbers_1.encodeFee1e18)(spec.fee.fee))).div(ethers_1.BigNumber.from(10).pow(18))
24
+ : grossMinOrExactAmountOut.mul(ethers_1.BigNumber.from((0, numbers_1.encodeFeeBips)(spec.fee.fee))).div(10000);
25
+ return {
26
+ exactOrMaxAmountIn: routingAmount,
27
+ grossMinOrExactAmountOut,
28
+ netMinOrExactAmountOut: grossMinOrExactAmountOut.sub(feeAmount),
29
+ };
30
+ }
31
+ return {
32
+ exactOrMaxAmountIn: routingAmount,
33
+ grossMinOrExactAmountOut,
34
+ netMinOrExactAmountOut: grossMinOrExactAmountOut,
35
+ };
36
+ }
37
+ const exactOrMaxAmountIn = routingQuote.mul(slippageDenominator.add(slippageNumerator)).div(slippageDenominator);
38
+ const grossMinOrExactAmountOut = routingAmount;
39
+ const netMinOrExactAmountOut = ((_b = spec.fee) === null || _b === void 0 ? void 0 : _b.kind) === 'flat' ? grossMinOrExactAmountOut.sub(ethers_1.BigNumber.from(spec.fee.amount)) : grossMinOrExactAmountOut;
40
+ return {
41
+ exactOrMaxAmountIn,
42
+ grossMinOrExactAmountOut,
43
+ netMinOrExactAmountOut,
44
+ };
45
+ }
46
+ exports.computeEncodeSwapsAmounts = computeEncodeSwapsAmounts;
47
+ //# sourceMappingURL=computeEncodeSwapsAmounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeEncodeSwapsAmounts.js","sourceRoot":"","sources":["../../../../src/utils/computeEncodeSwapsAmounts.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAClC,gDAA6C;AAC7C,2CAA6C;AAC7C,uCAAwD;AAWxD,mFAAmF;AACnF,8FAA8F;AAC9F,kHAAkH;AAClH,SAAgB,yBAAyB,CAAC,IAAiC;;IACzE,MAAM,aAAa,GAAG,kBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC7E,MAAM,YAAY,GAAG,kBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC3E,MAAM,iBAAiB,GAAG,kBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;IACrF,MAAM,mBAAmB,GAAG,kBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEzF,IAAI,IAAI,CAAC,SAAS,KAAK,oBAAS,CAAC,WAAW,EAAE;QAC5C,MAAM,wBAAwB,GAAG,YAAY;aAC1C,GAAG,CAAC,mBAAmB,CAAC;aACxB,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAA;QAElD,IAAI,CAAA,MAAA,IAAI,CAAC,GAAG,0CAAE,IAAI,MAAK,SAAS,EAAE;YAChC,MAAM,SAAS,GAAG,IAAA,2BAAe,EAAC,IAAI,CAAC,SAAS,CAAC;gBAC/C,CAAC,CAAC,wBAAwB,CAAC,GAAG,CAAC,kBAAS,CAAC,IAAI,CAAC,IAAA,uBAAa,EAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC3G,CAAC,CAAC,wBAAwB,CAAC,GAAG,CAAC,kBAAS,CAAC,IAAI,CAAC,IAAA,uBAAa,EAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAM,CAAC,CAAA;YAEzF,OAAO;gBACL,kBAAkB,EAAE,aAAa;gBACjC,wBAAwB;gBACxB,sBAAsB,EAAE,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC;aAChE,CAAA;SACF;QAED,OAAO;YACL,kBAAkB,EAAE,aAAa;YACjC,wBAAwB;YACxB,sBAAsB,EAAE,wBAAwB;SACjD,CAAA;KACF;IAED,MAAM,kBAAkB,GAAG,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAChH,MAAM,wBAAwB,GAAG,aAAa,CAAA;IAC9C,MAAM,sBAAsB,GAC1B,CAAA,MAAA,IAAI,CAAC,GAAG,0CAAE,IAAI,MAAK,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,GAAG,CAAC,kBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAA;IAEtH,OAAO;QACL,kBAAkB;QAClB,wBAAwB;QACxB,sBAAsB;KACvB,CAAA;AACH,CAAC;AAxCD,8DAwCC"}
@@ -488,6 +488,21 @@ exports.CHAIN_CONFIGS = {
488
488
  },
489
489
  swapProxy: SWAP_PROXY_DEPLOY_ADDRESS,
490
490
  },
491
+ // megaeth
492
+ [4326]: {
493
+ weth: '0x4200000000000000000000000000000000000006',
494
+ routerConfigs: {
495
+ [UniversalRouterVersion.V2_0]: {
496
+ address: '0x48fd03529d2a91be835f07f6b72f53b4aad6093d',
497
+ creationBlock: 7009661,
498
+ },
499
+ [UniversalRouterVersion.V2_1_1]: {
500
+ address: '0x47837eb80db5908eabba9105626d9b348bea7b02',
501
+ creationBlock: 7009661,
502
+ },
503
+ },
504
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS,
505
+ },
491
506
  // xlayer
492
507
  [196]: {
493
508
  weth: '0xe538905cf8410324e03A5A23C1c177a474D59b2b',