@uniswap/universal-router-sdk 5.1.0 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -62
- package/dist/cjs/src/entities/actions/uniswap.js +19 -19
- package/dist/cjs/src/index.d.ts +3 -0
- package/dist/cjs/src/index.js +6 -1
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/swapRouter.d.ts +17 -1
- package/dist/cjs/src/swapRouter.js +83 -8
- package/dist/cjs/src/swapRouter.js.map +1 -1
- package/dist/cjs/src/types/encodeSwaps.d.ts +149 -0
- package/dist/cjs/src/types/encodeSwaps.js +3 -0
- package/dist/cjs/src/types/encodeSwaps.js.map +1 -0
- package/dist/cjs/src/utils/computeEncodeSwapsAmounts.d.ts +8 -0
- package/dist/cjs/src/utils/computeEncodeSwapsAmounts.js +47 -0
- package/dist/cjs/src/utils/computeEncodeSwapsAmounts.js.map +1 -0
- package/dist/cjs/src/utils/encodeSwapStep.d.ts +4 -0
- package/dist/cjs/src/utils/encodeSwapStep.js +61 -0
- package/dist/cjs/src/utils/encodeSwapStep.js.map +1 -0
- package/dist/cjs/src/utils/encodeV4Action.d.ts +8 -0
- package/dist/cjs/src/utils/encodeV4Action.js +97 -0
- package/dist/cjs/src/utils/encodeV4Action.js.map +1 -0
- package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.d.ts +2 -0
- package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.js +18 -0
- package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.js.map +1 -0
- package/dist/cjs/src/utils/routerCommands.js +5 -5
- package/dist/cjs/src/utils/validateEncodeSwaps.d.ts +2 -0
- package/dist/cjs/src/utils/validateEncodeSwaps.js +135 -0
- package/dist/cjs/src/utils/validateEncodeSwaps.js.map +1 -0
- package/dist/esm/src/entities/actions/uniswap.js +19 -19
- package/dist/esm/src/index.d.ts +3 -0
- package/dist/esm/src/index.js +3 -0
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/swapRouter.d.ts +17 -1
- package/dist/esm/src/swapRouter.js +85 -10
- package/dist/esm/src/swapRouter.js.map +1 -1
- package/dist/esm/src/types/encodeSwaps.d.ts +149 -0
- package/dist/esm/src/types/encodeSwaps.js +2 -0
- package/dist/esm/src/types/encodeSwaps.js.map +1 -0
- package/dist/esm/src/utils/computeEncodeSwapsAmounts.d.ts +8 -0
- package/dist/esm/src/utils/computeEncodeSwapsAmounts.js +43 -0
- package/dist/esm/src/utils/computeEncodeSwapsAmounts.js.map +1 -0
- package/dist/esm/src/utils/encodeSwapStep.d.ts +4 -0
- package/dist/esm/src/utils/encodeSwapStep.js +57 -0
- package/dist/esm/src/utils/encodeSwapStep.js.map +1 -0
- package/dist/esm/src/utils/encodeV4Action.d.ts +8 -0
- package/dist/esm/src/utils/encodeV4Action.js +92 -0
- package/dist/esm/src/utils/encodeV4Action.js.map +1 -0
- package/dist/esm/src/utils/normalizeEncodeSwapsSpec.d.ts +2 -0
- package/dist/esm/src/utils/normalizeEncodeSwapsSpec.js +14 -0
- package/dist/esm/src/utils/normalizeEncodeSwapsSpec.js.map +1 -0
- package/dist/esm/src/utils/routerCommands.js +5 -5
- package/dist/esm/src/utils/validateEncodeSwaps.d.ts +2 -0
- package/dist/esm/src/utils/validateEncodeSwaps.js +130 -0
- package/dist/esm/src/utils/validateEncodeSwaps.js.map +1 -0
- package/dist/types/src/index.d.ts +3 -0
- package/dist/types/src/swapRouter.d.ts +17 -1
- package/dist/types/src/types/encodeSwaps.d.ts +149 -0
- package/dist/types/src/utils/computeEncodeSwapsAmounts.d.ts +8 -0
- package/dist/types/src/utils/encodeSwapStep.d.ts +4 -0
- package/dist/types/src/utils/encodeV4Action.d.ts +8 -0
- package/dist/types/src/utils/normalizeEncodeSwapsSpec.d.ts +2 -0
- package/dist/types/src/utils/validateEncodeSwaps.d.ts +2 -0
- package/package.json +3 -3
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,88 +44,82 @@ forge install
|
|
|
39
44
|
yarn test:forge
|
|
40
45
|
```
|
|
41
46
|
|
|
42
|
-
##
|
|
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.
|
|
43
50
|
|
|
44
|
-
|
|
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`.
|
|
45
52
|
|
|
46
|
-
###
|
|
53
|
+
### Swap Step Types
|
|
47
54
|
|
|
48
|
-
|
|
55
|
+
Each `SwapStep` is a 1:1 representation of a Universal Router command:
|
|
49
56
|
|
|
50
|
-
|
|
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
|
|
51
65
|
|
|
52
66
|
```typescript
|
|
53
|
-
import { SwapRouter } from '@uniswap/universal-router-sdk'
|
|
54
|
-
import {
|
|
55
|
-
import { URVersion } from '@uniswap/v4-sdk'
|
|
56
|
-
import { Percent, TradeType } from '@uniswap/sdk-core'
|
|
67
|
+
import { SwapRouter, ROUTER_AS_RECIPIENT } from '@uniswap/universal-router-sdk'
|
|
68
|
+
import { CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core'
|
|
57
69
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
+
[
|
|
61
83
|
{
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
BigInt('1010000000000000000'), // Hop 0: USDC→DAI, max price 1.01
|
|
68
|
-
BigInt('2500000000000000000000'), // Hop 1: DAI→WETH, max price 2500
|
|
69
|
-
],
|
|
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
|
|
70
89
|
},
|
|
71
|
-
]
|
|
72
|
-
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
// 2. Encode with V2.1.1 ABI
|
|
76
|
-
const { calldata, value } = SwapRouter.swapCallParameters(trade, {
|
|
77
|
-
slippageTolerance: new Percent(50, 10000), // 0.5% overall slippage
|
|
78
|
-
recipient: '0x...',
|
|
79
|
-
urVersion: URVersion.V2_1_1, // required for per-hop encoding
|
|
80
|
-
})
|
|
90
|
+
]
|
|
91
|
+
)
|
|
81
92
|
```
|
|
82
93
|
|
|
83
|
-
###
|
|
94
|
+
### What the SDK adds around `swapSteps`
|
|
84
95
|
|
|
85
|
-
|
|
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`.
|
|
86
101
|
|
|
87
|
-
|
|
102
|
+
### Constraints
|
|
88
103
|
|
|
89
|
-
|
|
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`.
|
|
90
108
|
|
|
91
|
-
###
|
|
109
|
+
### Per-Hop Slippage
|
|
92
110
|
|
|
93
|
-
|
|
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.
|
|
94
114
|
|
|
95
115
|
```typescript
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
outputAmount,
|
|
102
|
-
maxHopSlippage: [
|
|
103
|
-
BigInt('1010000000000000000'), // Hop 0 (V3 section)
|
|
104
|
-
BigInt('2500000000000000000000'), // Hop 1 (V3 section)
|
|
105
|
-
BigInt('1005000000000000000'), // Hop 2 (V2 section)
|
|
106
|
-
],
|
|
107
|
-
},
|
|
108
|
-
],
|
|
109
|
-
tradeType: TradeType.EXACT_INPUT,
|
|
110
|
-
})
|
|
116
|
+
{
|
|
117
|
+
type: 'V3_SWAP_EXACT_IN',
|
|
118
|
+
// ...
|
|
119
|
+
minHopPriceX36: ['995000000000000000000000000000000000', ...], // one per hop
|
|
120
|
+
}
|
|
111
121
|
```
|
|
112
122
|
|
|
113
|
-
### Benefits
|
|
114
|
-
|
|
115
|
-
1. **MEV Protection**: Prevents sandwich attacks on individual pool hops
|
|
116
|
-
2. **Route Quality**: Ensures each segment of a multi-hop route meets price expectations
|
|
117
|
-
3. **Granular Control**: Different slippage tolerances for different pairs (e.g. tighter bounds on stablecoin hops)
|
|
118
|
-
|
|
119
|
-
### Backward Compatibility
|
|
120
|
-
|
|
121
|
-
- If `maxHopSlippage` is omitted or is an empty array, only the overall trade-level slippage is checked
|
|
122
|
-
- If `urVersion` is not set (defaults to V2.0), commands use the standard ABI without `maxHopSlippage`
|
|
123
|
-
|
|
124
123
|
## Signed Routes (Universal Router v2.1)
|
|
125
124
|
|
|
126
125
|
Universal Router v2.1 supports EIP712-signed route execution, enabling gasless transactions and intent-based trading.
|
|
@@ -289,9 +289,9 @@ class UniswapTrade {
|
|
|
289
289
|
}
|
|
290
290
|
exports.UniswapTrade = UniswapTrade;
|
|
291
291
|
// encode a uniswap v2 swap
|
|
292
|
-
function addV2Swap(planner, { route, inputAmount, outputAmount,
|
|
293
|
-
if ((
|
|
294
|
-
throw new Error(`
|
|
292
|
+
function addV2Swap(planner, { route, inputAmount, outputAmount, minHopPriceX36 }, tradeType, options, payerIsUser, routerMustCustody) {
|
|
293
|
+
if ((minHopPriceX36 === null || minHopPriceX36 === void 0 ? void 0 : minHopPriceX36.length) && minHopPriceX36.length !== route.pools.length) {
|
|
294
|
+
throw new Error(`minHopPriceX36 length (${minHopPriceX36.length}) must equal route.pools.length (${route.pools.length})`);
|
|
295
295
|
}
|
|
296
296
|
const trade = new v2_sdk_1.Trade(route, tradeType == sdk_core_1.TradeType.EXACT_INPUT ? inputAmount : outputAmount, tradeType);
|
|
297
297
|
const useV2_1_1 = (0, constants_1.isAtLeastV2_1_1)(options.urVersion);
|
|
@@ -306,7 +306,7 @@ function addV2Swap(planner, { route, inputAmount, outputAmount, maxHopSlippage }
|
|
|
306
306
|
payerIsUser,
|
|
307
307
|
];
|
|
308
308
|
if (useV2_1_1)
|
|
309
|
-
params.push(
|
|
309
|
+
params.push(minHopPriceX36 !== null && minHopPriceX36 !== void 0 ? minHopPriceX36 : []);
|
|
310
310
|
planner.addCommand(routerCommands_1.CommandType.V2_SWAP_EXACT_IN, params, false, options.urVersion);
|
|
311
311
|
}
|
|
312
312
|
else if (tradeType == sdk_core_1.TradeType.EXACT_OUTPUT) {
|
|
@@ -318,14 +318,14 @@ function addV2Swap(planner, { route, inputAmount, outputAmount, maxHopSlippage }
|
|
|
318
318
|
payerIsUser,
|
|
319
319
|
];
|
|
320
320
|
if (useV2_1_1)
|
|
321
|
-
params.push(
|
|
321
|
+
params.push(minHopPriceX36 !== null && minHopPriceX36 !== void 0 ? minHopPriceX36 : []);
|
|
322
322
|
planner.addCommand(routerCommands_1.CommandType.V2_SWAP_EXACT_OUT, params, false, options.urVersion);
|
|
323
323
|
}
|
|
324
324
|
}
|
|
325
325
|
// encode a uniswap v3 swap
|
|
326
|
-
function addV3Swap(planner, { route, inputAmount, outputAmount,
|
|
327
|
-
if ((
|
|
328
|
-
throw new Error(`
|
|
326
|
+
function addV3Swap(planner, { route, inputAmount, outputAmount, minHopPriceX36 }, tradeType, options, payerIsUser, routerMustCustody) {
|
|
327
|
+
if ((minHopPriceX36 === null || minHopPriceX36 === void 0 ? void 0 : minHopPriceX36.length) && minHopPriceX36.length !== route.pools.length) {
|
|
328
|
+
throw new Error(`minHopPriceX36 length (${minHopPriceX36.length}) must equal route.pools.length (${route.pools.length})`);
|
|
329
329
|
}
|
|
330
330
|
const trade = v3_sdk_1.Trade.createUncheckedTrade({
|
|
331
331
|
route: route,
|
|
@@ -344,7 +344,7 @@ function addV3Swap(planner, { route, inputAmount, outputAmount, maxHopSlippage }
|
|
|
344
344
|
payerIsUser,
|
|
345
345
|
];
|
|
346
346
|
if (useV2_1_1)
|
|
347
|
-
params.push(
|
|
347
|
+
params.push(minHopPriceX36 !== null && minHopPriceX36 !== void 0 ? minHopPriceX36 : []);
|
|
348
348
|
planner.addCommand(routerCommands_1.CommandType.V3_SWAP_EXACT_IN, params, false, options.urVersion);
|
|
349
349
|
}
|
|
350
350
|
else if (tradeType == sdk_core_1.TradeType.EXACT_OUTPUT) {
|
|
@@ -356,14 +356,14 @@ function addV3Swap(planner, { route, inputAmount, outputAmount, maxHopSlippage }
|
|
|
356
356
|
payerIsUser,
|
|
357
357
|
];
|
|
358
358
|
if (useV2_1_1)
|
|
359
|
-
params.push(
|
|
359
|
+
params.push(minHopPriceX36 !== null && minHopPriceX36 !== void 0 ? minHopPriceX36 : []);
|
|
360
360
|
planner.addCommand(routerCommands_1.CommandType.V3_SWAP_EXACT_OUT, params, false, options.urVersion);
|
|
361
361
|
}
|
|
362
362
|
}
|
|
363
|
-
function addV4Swap(planner, { inputAmount, outputAmount, route,
|
|
363
|
+
function addV4Swap(planner, { inputAmount, outputAmount, route, minHopPriceX36 }, tradeType, options, payerIsUser, routerMustCustody) {
|
|
364
364
|
var _a, _b;
|
|
365
|
-
if ((
|
|
366
|
-
throw new Error(`
|
|
365
|
+
if ((minHopPriceX36 === null || minHopPriceX36 === void 0 ? void 0 : minHopPriceX36.length) && minHopPriceX36.length !== route.pools.length) {
|
|
366
|
+
throw new Error(`minHopPriceX36 length (${minHopPriceX36.length}) must equal route.pools.length (${route.pools.length})`);
|
|
367
367
|
}
|
|
368
368
|
// create a deep copy of pools since v4Planner encoding tampers with array
|
|
369
369
|
const pools = route.pools.map((p) => p);
|
|
@@ -375,7 +375,7 @@ function addV4Swap(planner, { inputAmount, outputAmount, route, maxHopSlippage }
|
|
|
375
375
|
tradeType,
|
|
376
376
|
});
|
|
377
377
|
const slippageToleranceOnSwap = routerMustCustody && tradeType == sdk_core_1.TradeType.EXACT_INPUT ? undefined : options.slippageTolerance;
|
|
378
|
-
const perHopSlippage = (_a =
|
|
378
|
+
const perHopSlippage = (_a = minHopPriceX36 === null || minHopPriceX36 === void 0 ? void 0 : minHopPriceX36.map((s) => ethers_1.BigNumber.from(s))) !== null && _a !== void 0 ? _a : [];
|
|
379
379
|
const v4Planner = new v4_sdk_1.V4Planner();
|
|
380
380
|
v4Planner.addTrade(trade, slippageToleranceOnSwap, perHopSlippage, toURVersion(options.urVersion));
|
|
381
381
|
v4Planner.addSettle(trade.route.pathInput, payerIsUser);
|
|
@@ -402,8 +402,8 @@ function addV4Swap(planner, { inputAmount, outputAmount, route, maxHopSlippage }
|
|
|
402
402
|
function addMixedSwap(planner, swap, tradeType, options, payerIsUser, routerMustCustody) {
|
|
403
403
|
var _a, _b, _c, _d;
|
|
404
404
|
const route = swap.route;
|
|
405
|
-
if (((_a = swap.
|
|
406
|
-
throw new Error(`
|
|
405
|
+
if (((_a = swap.minHopPriceX36) === null || _a === void 0 ? void 0 : _a.length) && swap.minHopPriceX36.length !== route.pools.length) {
|
|
406
|
+
throw new Error(`minHopPriceX36 length (${swap.minHopPriceX36.length}) must equal route.pools.length (${route.pools.length})`);
|
|
407
407
|
}
|
|
408
408
|
const inputAmount = swap.inputAmount;
|
|
409
409
|
const outputAmount = swap.outputAmount;
|
|
@@ -447,8 +447,8 @@ function addMixedSwap(planner, swap, tradeType, options, payerIsUser, routerMust
|
|
|
447
447
|
const routePool = section[0];
|
|
448
448
|
const outputToken = (0, router_sdk_1.getOutputOfPools)(section, inputToken);
|
|
449
449
|
const subRoute = new router_sdk_1.MixedRoute(new router_sdk_1.MixedRouteSDK([...section], inputToken, outputToken));
|
|
450
|
-
// Slice this section's portion of
|
|
451
|
-
const sectionHopSlippage = (_c = swap.
|
|
450
|
+
// Slice this section's portion of minHopPriceX36 from the flat array
|
|
451
|
+
const sectionHopSlippage = (_c = swap.minHopPriceX36) === null || _c === void 0 ? void 0 : _c.slice(hopOffset, hopOffset + section.length);
|
|
452
452
|
let nextInputToken;
|
|
453
453
|
let swapRecipient;
|
|
454
454
|
if (isLastSectionInRoute(i)) {
|
|
@@ -470,7 +470,7 @@ function addMixedSwap(planner, swap, tradeType, options, payerIsUser, routerMust
|
|
|
470
470
|
{
|
|
471
471
|
currencyIn: inputToken.isNative ? constants_1.ETH_ADDRESS : inputToken.address,
|
|
472
472
|
path: (0, v4_sdk_1.encodeRouteToPath)(v4SubRoute),
|
|
473
|
-
|
|
473
|
+
minHopPriceX36: v4SectionSlippage,
|
|
474
474
|
amountIn: 0,
|
|
475
475
|
amountOutMinimum: !isLastSectionInRoute(i) ? 0 : amountOut,
|
|
476
476
|
},
|
package/dist/cjs/src/index.d.ts
CHANGED
|
@@ -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';
|
package/dist/cjs/src/index.js
CHANGED
|
@@ -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
|
-
*
|
|
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
|
-
*
|
|
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)(
|
|
242
|
-
const
|
|
243
|
-
|
|
244
|
-
|
|
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
|
-
|
|
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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"}
|