@kittycorn-labs/universal-router-sdk 1.4.43 → 2.0.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 +312 -0
- package/dist/cjs/src/abis/UniversalRouter.json +740 -0
- package/dist/{entities → cjs/src/entities}/Command.d.ts +12 -12
- package/dist/cjs/src/entities/Command.js +9 -0
- package/dist/cjs/src/entities/Command.js.map +1 -0
- package/dist/cjs/src/entities/actions/across.d.ts +21 -0
- package/dist/cjs/src/entities/actions/across.js +7 -0
- package/dist/cjs/src/entities/actions/across.js.map +1 -0
- package/dist/{entities → cjs/src/entities}/actions/index.d.ts +3 -2
- package/dist/cjs/src/entities/actions/index.js +7 -0
- package/dist/cjs/src/entities/actions/index.js.map +1 -0
- package/dist/cjs/src/entities/actions/uniswap.d.ts +94 -0
- package/dist/cjs/src/entities/actions/uniswap.js +740 -0
- package/dist/cjs/src/entities/actions/uniswap.js.map +1 -0
- package/dist/{entities → cjs/src/entities}/actions/unwrapWETH.d.ts +12 -12
- package/dist/cjs/src/entities/actions/unwrapWETH.js +33 -0
- package/dist/cjs/src/entities/actions/unwrapWETH.js.map +1 -0
- package/dist/{entities → cjs/src/entities}/index.d.ts +2 -2
- package/dist/cjs/src/entities/index.js +6 -0
- package/dist/cjs/src/entities/index.js.map +1 -0
- package/dist/cjs/src/index.d.ts +19 -0
- package/dist/cjs/src/index.js +43 -0
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/src/kittycorn.d.ts +9 -0
- package/dist/cjs/src/kittycorn.js +26 -0
- package/dist/cjs/src/kittycorn.js.map +1 -0
- package/dist/cjs/src/swapRouter.d.ts +123 -0
- package/dist/cjs/src/swapRouter.js +445 -0
- package/dist/cjs/src/swapRouter.js.map +1 -0
- package/dist/cjs/src/types/encodeSwaps.d.ts +197 -0
- package/dist/cjs/src/types/encodeSwaps.js +3 -0
- package/dist/cjs/src/types/encodeSwaps.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/commandParser.d.ts +36 -34
- package/dist/cjs/src/utils/commandParser.js +154 -0
- package/dist/cjs/src/utils/commandParser.js.map +1 -0
- package/dist/cjs/src/utils/computeEncodeSwapsAmounts.d.ts +8 -0
- package/dist/cjs/src/utils/computeEncodeSwapsAmounts.js +46 -0
- package/dist/cjs/src/utils/computeEncodeSwapsAmounts.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/constants.d.ts +46 -30
- package/dist/cjs/src/utils/constants.js +777 -0
- package/dist/cjs/src/utils/constants.js.map +1 -0
- package/dist/cjs/src/utils/directTransfers.d.ts +15 -0
- package/dist/cjs/src/utils/directTransfers.js +381 -0
- package/dist/cjs/src/utils/directTransfers.js.map +1 -0
- package/dist/cjs/src/utils/eip712.d.ts +17 -0
- package/dist/cjs/src/utils/eip712.js +44 -0
- package/dist/cjs/src/utils/eip712.js.map +1 -0
- package/dist/cjs/src/utils/encodeSwapStep.d.ts +4 -0
- package/dist/cjs/src/utils/encodeSwapStep.js +62 -0
- package/dist/cjs/src/utils/encodeSwapStep.js.map +1 -0
- package/dist/cjs/src/utils/encodeV4Action.d.ts +7 -0
- package/dist/cjs/src/utils/encodeV4Action.js +84 -0
- package/dist/cjs/src/utils/encodeV4Action.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/getCurrencyAddress.d.ts +2 -2
- package/dist/cjs/src/utils/getCurrencyAddress.js +9 -0
- package/dist/cjs/src/utils/getCurrencyAddress.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/inputTokens.d.ts +23 -23
- package/dist/cjs/src/utils/inputTokens.js +58 -0
- package/dist/cjs/src/utils/inputTokens.js.map +1 -0
- package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.d.ts +6 -0
- package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.js +34 -0
- package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/numbers.d.ts +7 -6
- package/dist/cjs/src/utils/numbers.js +27 -0
- package/dist/cjs/src/utils/numbers.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/pathCurrency.d.ts +3 -3
- package/dist/cjs/src/utils/pathCurrency.js +27 -0
- package/dist/cjs/src/utils/pathCurrency.js.map +1 -0
- package/dist/cjs/src/utils/portionFees.d.ts +14 -0
- package/dist/cjs/src/utils/portionFees.js +40 -0
- package/dist/cjs/src/utils/portionFees.js.map +1 -0
- package/dist/cjs/src/utils/routerBalanceSteps.d.ts +31 -0
- package/dist/cjs/src/utils/routerBalanceSteps.js +293 -0
- package/dist/cjs/src/utils/routerBalanceSteps.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/routerCommands.d.ts +77 -64
- package/dist/cjs/src/utils/routerCommands.js +331 -0
- package/dist/cjs/src/utils/routerCommands.js.map +1 -0
- package/dist/{utils → cjs/src/utils}/routerTradeAdapter.d.ts +73 -73
- package/dist/cjs/src/utils/routerTradeAdapter.js +139 -0
- package/dist/cjs/src/utils/routerTradeAdapter.js.map +1 -0
- package/dist/cjs/src/utils/toV4URVersion.d.ts +3 -0
- package/dist/cjs/src/utils/toV4URVersion.js +17 -0
- package/dist/cjs/src/utils/toV4URVersion.js.map +1 -0
- package/dist/cjs/src/utils/validateEncodeSwaps.d.ts +2 -0
- package/dist/cjs/src/utils/validateEncodeSwaps.js +344 -0
- package/dist/cjs/src/utils/validateEncodeSwaps.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/src/abis/UniversalRouter.json +740 -0
- package/dist/esm/src/entities/Command.d.ts +12 -0
- package/dist/esm/src/entities/Command.js +6 -0
- package/dist/esm/src/entities/Command.js.map +1 -0
- package/dist/esm/src/entities/actions/across.d.ts +21 -0
- package/dist/esm/src/entities/actions/across.js +3 -0
- package/dist/esm/src/entities/actions/across.js.map +1 -0
- package/dist/esm/src/entities/actions/index.d.ts +3 -0
- package/dist/esm/src/entities/actions/index.js +4 -0
- package/dist/esm/src/entities/actions/index.js.map +1 -0
- package/dist/esm/src/entities/actions/uniswap.d.ts +94 -0
- package/dist/esm/src/entities/actions/uniswap.js +735 -0
- package/dist/esm/src/entities/actions/uniswap.js.map +1 -0
- package/dist/esm/src/entities/actions/unwrapWETH.d.ts +12 -0
- package/dist/esm/src/entities/actions/unwrapWETH.js +28 -0
- package/dist/esm/src/entities/actions/unwrapWETH.js.map +1 -0
- package/dist/esm/src/entities/index.d.ts +2 -0
- package/dist/esm/src/entities/index.js +3 -0
- package/dist/esm/src/entities/index.js.map +1 -0
- package/dist/esm/src/index.d.ts +19 -0
- package/dist/esm/src/index.js +15 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/kittycorn.d.ts +9 -0
- package/dist/esm/src/kittycorn.js +22 -0
- package/dist/esm/src/kittycorn.js.map +1 -0
- package/dist/esm/src/swapRouter.d.ts +123 -0
- package/dist/esm/src/swapRouter.js +440 -0
- package/dist/esm/src/swapRouter.js.map +1 -0
- package/dist/esm/src/types/encodeSwaps.d.ts +197 -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/commandParser.d.ts +36 -0
- package/dist/esm/src/utils/commandParser.js +146 -0
- package/dist/esm/src/utils/commandParser.js.map +1 -0
- package/dist/esm/src/utils/computeEncodeSwapsAmounts.d.ts +8 -0
- package/dist/esm/src/utils/computeEncodeSwapsAmounts.js +41 -0
- package/dist/esm/src/utils/computeEncodeSwapsAmounts.js.map +1 -0
- package/dist/esm/src/utils/constants.d.ts +46 -0
- package/dist/esm/src/utils/constants.js +768 -0
- package/dist/esm/src/utils/constants.js.map +1 -0
- package/dist/esm/src/utils/directTransfers.d.ts +15 -0
- package/dist/esm/src/utils/directTransfers.js +369 -0
- package/dist/esm/src/utils/directTransfers.js.map +1 -0
- package/dist/esm/src/utils/eip712.d.ts +17 -0
- package/dist/esm/src/utils/eip712.js +39 -0
- package/dist/esm/src/utils/eip712.js.map +1 -0
- package/dist/esm/src/utils/encodeSwapStep.d.ts +4 -0
- package/dist/esm/src/utils/encodeSwapStep.js +58 -0
- package/dist/esm/src/utils/encodeSwapStep.js.map +1 -0
- package/dist/esm/src/utils/encodeV4Action.d.ts +7 -0
- package/dist/esm/src/utils/encodeV4Action.js +80 -0
- package/dist/esm/src/utils/encodeV4Action.js.map +1 -0
- package/dist/esm/src/utils/getCurrencyAddress.d.ts +2 -0
- package/dist/esm/src/utils/getCurrencyAddress.js +5 -0
- package/dist/esm/src/utils/getCurrencyAddress.js.map +1 -0
- package/dist/esm/src/utils/inputTokens.d.ts +23 -0
- package/dist/esm/src/utils/inputTokens.js +51 -0
- package/dist/esm/src/utils/inputTokens.js.map +1 -0
- package/dist/esm/src/utils/normalizeEncodeSwapsSpec.d.ts +6 -0
- package/dist/esm/src/utils/normalizeEncodeSwapsSpec.js +27 -0
- package/dist/esm/src/utils/normalizeEncodeSwapsSpec.js.map +1 -0
- package/dist/esm/src/utils/numbers.d.ts +7 -0
- package/dist/esm/src/utils/numbers.js +19 -0
- package/dist/esm/src/utils/numbers.js.map +1 -0
- package/dist/esm/src/utils/pathCurrency.d.ts +3 -0
- package/dist/esm/src/utils/pathCurrency.js +23 -0
- package/dist/esm/src/utils/pathCurrency.js.map +1 -0
- package/dist/esm/src/utils/portionFees.d.ts +14 -0
- package/dist/esm/src/utils/portionFees.js +35 -0
- package/dist/esm/src/utils/portionFees.js.map +1 -0
- package/dist/esm/src/utils/routerBalanceSteps.d.ts +31 -0
- package/dist/esm/src/utils/routerBalanceSteps.js +282 -0
- package/dist/esm/src/utils/routerBalanceSteps.js.map +1 -0
- package/dist/esm/src/utils/routerCommands.d.ts +77 -0
- package/dist/esm/src/utils/routerCommands.js +326 -0
- package/dist/esm/src/utils/routerCommands.js.map +1 -0
- package/dist/esm/src/utils/routerTradeAdapter.d.ts +73 -0
- package/dist/esm/src/utils/routerTradeAdapter.js +134 -0
- package/dist/esm/src/utils/routerTradeAdapter.js.map +1 -0
- package/dist/esm/src/utils/toV4URVersion.d.ts +3 -0
- package/dist/esm/src/utils/toV4URVersion.js +13 -0
- package/dist/esm/src/utils/toV4URVersion.js.map +1 -0
- package/dist/esm/src/utils/validateEncodeSwaps.d.ts +2 -0
- package/dist/esm/src/utils/validateEncodeSwaps.js +339 -0
- package/dist/esm/src/utils/validateEncodeSwaps.js.map +1 -0
- package/dist/types/src/entities/Command.d.ts +13 -0
- package/dist/types/src/entities/Command.d.ts.map +1 -0
- package/dist/types/src/entities/actions/across.d.ts +22 -0
- package/dist/types/src/entities/actions/across.d.ts.map +1 -0
- package/dist/types/src/entities/actions/index.d.ts +4 -0
- package/dist/types/src/entities/actions/index.d.ts.map +1 -0
- package/dist/types/src/entities/actions/uniswap.d.ts +95 -0
- package/dist/types/src/entities/actions/uniswap.d.ts.map +1 -0
- package/dist/types/src/entities/actions/unwrapWETH.d.ts +13 -0
- package/dist/types/src/entities/actions/unwrapWETH.d.ts.map +1 -0
- package/dist/types/src/entities/index.d.ts +3 -0
- package/dist/types/src/entities/index.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +20 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/kittycorn.d.ts +10 -0
- package/dist/types/src/kittycorn.d.ts.map +1 -0
- package/dist/types/src/swapRouter.d.ts +124 -0
- package/dist/types/src/swapRouter.d.ts.map +1 -0
- package/dist/types/src/types/encodeSwaps.d.ts +198 -0
- package/dist/types/src/types/encodeSwaps.d.ts.map +1 -0
- package/dist/types/src/utils/commandParser.d.ts +37 -0
- package/dist/types/src/utils/commandParser.d.ts.map +1 -0
- package/dist/types/src/utils/computeEncodeSwapsAmounts.d.ts +9 -0
- package/dist/types/src/utils/computeEncodeSwapsAmounts.d.ts.map +1 -0
- package/dist/types/src/utils/constants.d.ts +47 -0
- package/dist/types/src/utils/constants.d.ts.map +1 -0
- package/dist/types/src/utils/directTransfers.d.ts +16 -0
- package/dist/types/src/utils/directTransfers.d.ts.map +1 -0
- package/dist/types/src/utils/eip712.d.ts +18 -0
- package/dist/types/src/utils/eip712.d.ts.map +1 -0
- package/dist/types/src/utils/encodeSwapStep.d.ts +5 -0
- package/dist/types/src/utils/encodeSwapStep.d.ts.map +1 -0
- package/dist/types/src/utils/encodeV4Action.d.ts +8 -0
- package/dist/types/src/utils/encodeV4Action.d.ts.map +1 -0
- package/dist/types/src/utils/getCurrencyAddress.d.ts +3 -0
- package/dist/types/src/utils/getCurrencyAddress.d.ts.map +1 -0
- package/dist/types/src/utils/inputTokens.d.ts +24 -0
- package/dist/types/src/utils/inputTokens.d.ts.map +1 -0
- package/dist/types/src/utils/normalizeEncodeSwapsSpec.d.ts +7 -0
- package/dist/types/src/utils/normalizeEncodeSwapsSpec.d.ts.map +1 -0
- package/dist/types/src/utils/numbers.d.ts +8 -0
- package/dist/types/src/utils/numbers.d.ts.map +1 -0
- package/dist/types/src/utils/pathCurrency.d.ts +4 -0
- package/dist/types/src/utils/pathCurrency.d.ts.map +1 -0
- package/dist/types/src/utils/portionFees.d.ts +15 -0
- package/dist/types/src/utils/portionFees.d.ts.map +1 -0
- package/dist/types/src/utils/routerBalanceSteps.d.ts +32 -0
- package/dist/types/src/utils/routerBalanceSteps.d.ts.map +1 -0
- package/dist/types/src/utils/routerCommands.d.ts +78 -0
- package/dist/types/src/utils/routerCommands.d.ts.map +1 -0
- package/dist/types/src/utils/routerTradeAdapter.d.ts +74 -0
- package/dist/types/src/utils/routerTradeAdapter.d.ts.map +1 -0
- package/dist/types/src/utils/toV4URVersion.d.ts +4 -0
- package/dist/types/src/utils/toV4URVersion.d.ts.map +1 -0
- package/dist/types/src/utils/validateEncodeSwaps.d.ts +3 -0
- package/dist/types/src/utils/validateEncodeSwaps.d.ts.map +1 -0
- package/package.json +33 -52
- package/dist/entities/actions/uniswap.d.ts +0 -30
- package/dist/index.d.ts +0 -10
- package/dist/index.js +0 -8
- package/dist/swapRouter.d.ts +0 -37
- package/dist/test/forge/writeInterop.d.ts +0 -2
- package/dist/test/utils/addresses.d.ts +0 -5
- package/dist/test/utils/hexToDecimalString.d.ts +0 -2
- package/dist/test/utils/permit2.d.ts +0 -7
- package/dist/test/utils/uniswapData.d.ts +0 -25
- package/dist/universal-router-sdk.cjs.development.js +0 -1500
- package/dist/universal-router-sdk.cjs.development.js.map +0 -1
- package/dist/universal-router-sdk.cjs.production.min.js +0 -2
- package/dist/universal-router-sdk.cjs.production.min.js.map +0 -1
- package/dist/universal-router-sdk.esm.js +0 -1493
- package/dist/universal-router-sdk.esm.js.map +0 -1
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import invariant from 'tiny-invariant';
|
|
2
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
3
|
+
import { CONTRACT_BALANCE, ETH_ADDRESS } from './constants.js';
|
|
4
|
+
function v4ActionSpendsToken(action, tokenAddress) {
|
|
5
|
+
switch (action.action) {
|
|
6
|
+
case 'SETTLE':
|
|
7
|
+
case 'SETTLE_ALL':
|
|
8
|
+
return action.currency.toLowerCase() === tokenAddress;
|
|
9
|
+
case 'SWAP_EXACT_IN':
|
|
10
|
+
return action.currencyIn.toLowerCase() === tokenAddress;
|
|
11
|
+
case 'SWAP_EXACT_IN_SINGLE': {
|
|
12
|
+
const spent = action.zeroForOne ? action.poolKey.currency0 : action.poolKey.currency1;
|
|
13
|
+
return spent.toLowerCase() === tokenAddress;
|
|
14
|
+
}
|
|
15
|
+
default:
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// Whether a step draws the trade's input token, i.e. is a candidate first hop.
|
|
20
|
+
export function stepSpendsToken(step, inputTokenAddress) {
|
|
21
|
+
var _a;
|
|
22
|
+
const tokenAddress = inputTokenAddress.toLowerCase();
|
|
23
|
+
switch (step.type) {
|
|
24
|
+
case 'V2_SWAP_EXACT_IN':
|
|
25
|
+
return ((_a = step.path[0]) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === tokenAddress;
|
|
26
|
+
case 'V3_SWAP_EXACT_IN':
|
|
27
|
+
// v3 exact-in paths are encoded input-first: the first 20 bytes are the input token
|
|
28
|
+
return step.path.slice(0, 42).toLowerCase() === tokenAddress;
|
|
29
|
+
case 'V4_SWAP':
|
|
30
|
+
return step.v4Actions.some((action) => v4ActionSpendsToken(action, tokenAddress));
|
|
31
|
+
default:
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// The SETTLE that funds a v4 step's input-token swaps (SETTLE_ALL is refused upstream).
|
|
36
|
+
export function isInputSettle(action, tokenAddress) {
|
|
37
|
+
return action.action === 'SETTLE' && action.currency.toLowerCase() === tokenAddress;
|
|
38
|
+
}
|
|
39
|
+
export function isInputSwap(action, tokenAddress) {
|
|
40
|
+
return ((action.action === 'SWAP_EXACT_IN' && action.currencyIn.toLowerCase() === tokenAddress) ||
|
|
41
|
+
(action.action === 'SWAP_EXACT_IN_SINGLE' && v4ActionSpendsToken(action, tokenAddress)));
|
|
42
|
+
}
|
|
43
|
+
export function v4SwapAmountIn(action) {
|
|
44
|
+
return action.action === 'SWAP_EXACT_IN' || action.action === 'SWAP_EXACT_IN_SINGLE'
|
|
45
|
+
? BigNumber.from(action.amountIn)
|
|
46
|
+
: BigNumber.from(0);
|
|
47
|
+
}
|
|
48
|
+
// Sum of the fixed amounts the input-spending swaps take, or the settle amount when the
|
|
49
|
+
// plan funds them with a single concrete settle. Zero when nothing concrete is present
|
|
50
|
+
// (sentinels / open-delta), which the split logic treats as "not comparable".
|
|
51
|
+
function v4StepSpendAmount(actions, tokenAddress) {
|
|
52
|
+
const settle = actions.find((action) => isInputSettle(action, tokenAddress));
|
|
53
|
+
if (settle && settle.action === 'SETTLE') {
|
|
54
|
+
const amount = BigNumber.from(settle.amount);
|
|
55
|
+
if (amount.gt(0) && !amount.eq(CONTRACT_BALANCE)) {
|
|
56
|
+
return amount;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return actions
|
|
60
|
+
.filter((action) => isInputSwap(action, tokenAddress))
|
|
61
|
+
.reduce((total, action) => total.add(v4SwapAmountIn(action)), BigNumber.from(0));
|
|
62
|
+
}
|
|
63
|
+
function applyToV4Actions(actions, tokenAddress) {
|
|
64
|
+
var _a;
|
|
65
|
+
const hasInputSettle = actions.some((action) => isInputSettle(action, tokenAddress));
|
|
66
|
+
// The settle that funds the swaps now takes the router's whole balance. Caller order is
|
|
67
|
+
// preserved, so validateEncodeSwaps requires that settle to precede the input swaps.
|
|
68
|
+
const settled = actions.map((action) => isInputSettle(action, tokenAddress)
|
|
69
|
+
? { ...action, amount: CONTRACT_BALANCE.toString(), payerIsUser: false }
|
|
70
|
+
: action);
|
|
71
|
+
// Exactly one input swap may consume the open delta (amountIn 0). With several input
|
|
72
|
+
// swaps (a split inside the step) the others keep their quoted slices and the remainder
|
|
73
|
+
// moves after them, so it absorbs the delivery variance and the fixed slices are never
|
|
74
|
+
// starved. A plan that already nominates its remainder (GuideStar writes intermediate
|
|
75
|
+
// steps that way) keeps that one rather than gaining a second.
|
|
76
|
+
const swapIndexes = settled
|
|
77
|
+
.map((action, index) => (isInputSwap(action, tokenAddress) ? index : -1))
|
|
78
|
+
.filter((index) => index >= 0);
|
|
79
|
+
const openDeltaIndexes = swapIndexes.filter((index) => v4SwapAmountIn(settled[index]).isZero());
|
|
80
|
+
invariant(openDeltaIndexes.length <= 1, 'ROUTER_BALANCE_INPUT_MULTIPLE_OPEN_DELTA_SWAPS');
|
|
81
|
+
let transformed = settled;
|
|
82
|
+
if (swapIndexes.length === 1) {
|
|
83
|
+
transformed = settled.map((action, index) => (index === swapIndexes[0] ? { ...action, amountIn: 0 } : action));
|
|
84
|
+
}
|
|
85
|
+
else if (swapIndexes.length > 1) {
|
|
86
|
+
let remainderIndex = (_a = openDeltaIndexes[0]) !== null && _a !== void 0 ? _a : swapIndexes[0];
|
|
87
|
+
if (openDeltaIndexes.length === 0) {
|
|
88
|
+
for (const index of swapIndexes) {
|
|
89
|
+
if (v4SwapAmountIn(settled[index]).gt(v4SwapAmountIn(settled[remainderIndex]))) {
|
|
90
|
+
remainderIndex = index;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const remainder = { ...settled[remainderIndex], amountIn: 0 };
|
|
95
|
+
const lastSwapIndex = swapIndexes[swapIndexes.length - 1];
|
|
96
|
+
const reordered = [];
|
|
97
|
+
settled.forEach((action, index) => {
|
|
98
|
+
if (index === remainderIndex) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
reordered.push(action);
|
|
102
|
+
if (index === lastSwapIndex ||
|
|
103
|
+
(lastSwapIndex === remainderIndex && index === swapIndexes[swapIndexes.length - 2])) {
|
|
104
|
+
reordered.push(remainder);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
transformed = reordered;
|
|
108
|
+
}
|
|
109
|
+
const result = hasInputSettle
|
|
110
|
+
? transformed
|
|
111
|
+
: // No settle in the plan (addTrade-style shapes): fund the open delta explicitly.
|
|
112
|
+
[
|
|
113
|
+
{
|
|
114
|
+
action: 'SETTLE',
|
|
115
|
+
currency: tokenAddress,
|
|
116
|
+
amount: CONTRACT_BALANCE.toString(),
|
|
117
|
+
payerIsUser: false,
|
|
118
|
+
},
|
|
119
|
+
...transformed,
|
|
120
|
+
];
|
|
121
|
+
// Two swaps consuming the same open delta means the first takes it all and the second
|
|
122
|
+
// gets nothing, which encodes cleanly and reverts on chain.
|
|
123
|
+
invariant(result.filter((action) => isInputSwap(action, tokenAddress) && v4SwapAmountIn(action).isZero()).length === 1, 'ROUTER_BALANCE_INPUT_OPEN_DELTA_NOT_UNIQUE');
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
// The router holds the funds, so no leg of a spender step may pull from the user: a
|
|
127
|
+
// payerIsUser flag left over from a wallet-mode plan would encode as
|
|
128
|
+
// permit2.transferFrom(msg.sender) on-chain, and on this arm msg.sender is the filler,
|
|
129
|
+
// not the swapper. EVERY settle in the step is cleared, not just the one funding the
|
|
130
|
+
// input token: a v4 step can carry a second settle in an unrelated currency, which is
|
|
131
|
+
// not the input token and so was previously left holding its flag while the step-level
|
|
132
|
+
// validator waiver excused the whole step. Amounts are left untouched; this is used for
|
|
133
|
+
// the fixed legs of a split.
|
|
134
|
+
function clearPayerIsUser(step) {
|
|
135
|
+
switch (step.type) {
|
|
136
|
+
case 'V2_SWAP_EXACT_IN':
|
|
137
|
+
case 'V3_SWAP_EXACT_IN':
|
|
138
|
+
return { ...step, payerIsUser: false };
|
|
139
|
+
case 'V4_SWAP':
|
|
140
|
+
return {
|
|
141
|
+
...step,
|
|
142
|
+
v4Actions: step.v4Actions.map((action) => action.action === 'SETTLE' ? { ...action, payerIsUser: false } : action),
|
|
143
|
+
};
|
|
144
|
+
default:
|
|
145
|
+
// validateEncodeSwaps refuses exact-out and unexpected shapes before this runs
|
|
146
|
+
invariant(false, 'ROUTER_BALANCE_INPUT_UNSUPPORTED_STEP');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function rewriteSpendingStep(step, tokenAddress) {
|
|
150
|
+
const cleared = clearPayerIsUser(step);
|
|
151
|
+
switch (cleared.type) {
|
|
152
|
+
case 'V2_SWAP_EXACT_IN':
|
|
153
|
+
case 'V3_SWAP_EXACT_IN':
|
|
154
|
+
return { ...cleared, amountIn: CONTRACT_BALANCE.toString() };
|
|
155
|
+
case 'V4_SWAP':
|
|
156
|
+
return { ...cleared, v4Actions: applyToV4Actions(cleared.v4Actions, tokenAddress) };
|
|
157
|
+
default:
|
|
158
|
+
invariant(false, 'ROUTER_BALANCE_INPUT_UNSUPPORTED_STEP');
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// The remainder leg of a split: the largest spender by input amount, which absorbs all
|
|
162
|
+
// delivery variance. A v4 leg's spend is read from its input settle (or the sum of its
|
|
163
|
+
// input swaps); a leg with no concrete amount cannot be compared and is refused.
|
|
164
|
+
export function stepSpendAmount(step, tokenAddress) {
|
|
165
|
+
switch (step.type) {
|
|
166
|
+
case 'V2_SWAP_EXACT_IN':
|
|
167
|
+
case 'V3_SWAP_EXACT_IN':
|
|
168
|
+
return BigNumber.from(step.amountIn);
|
|
169
|
+
case 'V4_SWAP':
|
|
170
|
+
return v4StepSpendAmount(step.v4Actions, tokenAddress);
|
|
171
|
+
default:
|
|
172
|
+
return BigNumber.from(0);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function pickRemainderIndex(swapSteps, spenderIndexes, tokenAddress) {
|
|
176
|
+
let remainderIndex = spenderIndexes[0];
|
|
177
|
+
let remainderAmount = BigNumber.from(-1);
|
|
178
|
+
for (const index of spenderIndexes) {
|
|
179
|
+
const amount = stepSpendAmount(swapSteps[index], tokenAddress);
|
|
180
|
+
invariant(amount.gt(0) && !amount.eq(CONTRACT_BALANCE), 'ROUTER_BALANCE_INPUT_SPLIT_LEG_AMOUNT_UNKNOWN');
|
|
181
|
+
if (amount.gt(remainderAmount)) {
|
|
182
|
+
remainderAmount = amount;
|
|
183
|
+
remainderIndex = index;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return remainderIndex;
|
|
187
|
+
}
|
|
188
|
+
// The unwrap converts the delivered pot to ETH, so the greedy claim moves to the leg
|
|
189
|
+
// spending that ETH; the WETH legs keep their quoted amounts from router custody.
|
|
190
|
+
function applyUnwrapBoundaryRemainder(swapSteps, unwrapIndex, tokenAddress) {
|
|
191
|
+
const nativeSpenders = swapSteps
|
|
192
|
+
.map((step, index) => (index > unwrapIndex && stepSpendsToken(step, ETH_ADDRESS) ? index : -1))
|
|
193
|
+
.filter((index) => index >= 0);
|
|
194
|
+
invariant(nativeSpenders.length > 0, 'ROUTER_BALANCE_INPUT_UNWRAP_WITHOUT_NATIVE_LEG');
|
|
195
|
+
invariant(nativeSpenders.length === 1, 'ROUTER_BALANCE_INPUT_UNWRAP_MULTIPLE_NATIVE_LEGS');
|
|
196
|
+
return swapSteps.map((step, index) => {
|
|
197
|
+
if (index === nativeSpenders[0]) {
|
|
198
|
+
return rewriteSpendingStep(step, ETH_ADDRESS);
|
|
199
|
+
}
|
|
200
|
+
return stepSpendsToken(step, tokenAddress) ? clearPayerIsUser(step) : step;
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Rewrites a step plan to spend the router's entire input-token balance.
|
|
205
|
+
*
|
|
206
|
+
* Single spender: its v2/v3 exact-in amount becomes the CONTRACT_BALANCE
|
|
207
|
+
* sentinel (a v4 spender settles CONTRACT_BALANCE; one of its input swaps
|
|
208
|
+
* consumes the open delta while any others keep their quoted slices).
|
|
209
|
+
*
|
|
210
|
+
* Split routes (multiple spenders of the input token): every spender but the
|
|
211
|
+
* largest keeps its quoted amount, funded from router custody; the largest is
|
|
212
|
+
* rewritten to CONTRACT_BALANCE and MOVED after the other spenders, so it
|
|
213
|
+
* absorbs all delivery variance and the fill only reverts when delivery
|
|
214
|
+
* cannot cover the fixed legs.
|
|
215
|
+
*/
|
|
216
|
+
export function applyRouterBalanceInputToSteps(swapSteps, inputTokenAddress, wrappedNativeAddress) {
|
|
217
|
+
var _a;
|
|
218
|
+
const tokenAddress = inputTokenAddress.toLowerCase();
|
|
219
|
+
// UNWRAP_WETH takes the router's whole WETH balance, so with WETH delivered it is
|
|
220
|
+
// already the greedy claim and the legs before it stay fixed.
|
|
221
|
+
const unwrapIndex = swapSteps.findIndex((step) => step.type === 'UNWRAP_WETH');
|
|
222
|
+
if (unwrapIndex >= 0 && tokenAddress === (wrappedNativeAddress === null || wrappedNativeAddress === void 0 ? void 0 : wrappedNativeAddress.toLowerCase())) {
|
|
223
|
+
return applyUnwrapBoundaryRemainder(swapSteps, unwrapIndex, tokenAddress);
|
|
224
|
+
}
|
|
225
|
+
const spenderIndexes = swapSteps
|
|
226
|
+
.map((step, index) => (stepSpendsToken(step, tokenAddress) ? index : -1))
|
|
227
|
+
.filter((index) => index >= 0);
|
|
228
|
+
invariant(spenderIndexes.length > 0, 'ROUTER_BALANCE_INPUT_FIRST_STEP');
|
|
229
|
+
if (spenderIndexes.length === 1) {
|
|
230
|
+
return swapSteps.map((step, index) => index === spenderIndexes[0] ? rewriteSpendingStep(step, tokenAddress) : step);
|
|
231
|
+
}
|
|
232
|
+
const remainderIndex = pickRemainderIndex(swapSteps, spenderIndexes, tokenAddress);
|
|
233
|
+
const remainder = rewriteSpendingStep(swapSteps[remainderIndex], tokenAddress);
|
|
234
|
+
const lastSpenderIndex = spenderIndexes[spenderIndexes.length - 1];
|
|
235
|
+
const fixLeg = (step, index) => spenderIndexes.includes(index) ? clearPayerIsUser(step) : step;
|
|
236
|
+
// Already the last spender: nothing to move, and moving it would drag the
|
|
237
|
+
// trailing output-side steps along with it.
|
|
238
|
+
if (remainderIndex === lastSpenderIndex) {
|
|
239
|
+
return swapSteps.map((step, index) => (index === remainderIndex ? remainder : fixLeg(step, index)));
|
|
240
|
+
}
|
|
241
|
+
// A remainder that carries its own continuation hops cannot be placed by
|
|
242
|
+
// position: routers order steps either leg-by-leg or by token (every first hop,
|
|
243
|
+
// then everything downstream), and the two orderings want opposite insertion
|
|
244
|
+
// points. Refuse rather than guess and emit a fill that reverts.
|
|
245
|
+
const nextSpenderIndex = (_a = spenderIndexes.find((index) => index > remainderIndex)) !== null && _a !== void 0 ? _a : swapSteps.length;
|
|
246
|
+
invariant(nextSpenderIndex === remainderIndex + 1, 'ROUTER_BALANCE_INPUT_REMAINDER_LEG_NOT_REORDERABLE');
|
|
247
|
+
// So the remainder is a single step, and it moves to just after the last other
|
|
248
|
+
// spender: late enough to absorb delivery variance, early enough that the
|
|
249
|
+
// steps consuming what it produces still follow it.
|
|
250
|
+
const reordered = [];
|
|
251
|
+
swapSteps.forEach((step, index) => {
|
|
252
|
+
if (index === remainderIndex) {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
// fixed legs keep their quoted amounts but are funded from router custody too
|
|
256
|
+
reordered.push(fixLeg(step, index));
|
|
257
|
+
if (index === lastSpenderIndex) {
|
|
258
|
+
reordered.push(remainder);
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
return reordered;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Native-input variant: the plan leads with the route's WRAP_ETH, which is resized to wrap
|
|
265
|
+
* the router's entire native balance (attached msg.value plus any stray ETH, so no value
|
|
266
|
+
* is left behind — UR never refunds msg.value); the wrapped-token hop that follows then
|
|
267
|
+
* spends CONTRACT_BALANCE like an ERC20 balance swap.
|
|
268
|
+
*
|
|
269
|
+
* `validateEncodeSwaps` guarantees steps[0] is a router-recipient WRAP_ETH and exactly one
|
|
270
|
+
* later step spends the wrapped token.
|
|
271
|
+
*/
|
|
272
|
+
export function applyNativeRouterBalanceInputToSteps(swapSteps, wrappedTokenAddress) {
|
|
273
|
+
const wrap = swapSteps[0];
|
|
274
|
+
invariant(wrap !== undefined && wrap.type === 'WRAP_ETH', 'ROUTER_BALANCE_INPUT_NATIVE_REQUIRES_WRAP');
|
|
275
|
+
// After the full wrap, the plan is an ordinary (possibly split) balance swap
|
|
276
|
+
// of the wrapped token.
|
|
277
|
+
return [
|
|
278
|
+
{ ...wrap, amount: CONTRACT_BALANCE.toString() },
|
|
279
|
+
...applyRouterBalanceInputToSteps(swapSteps.slice(1), wrappedTokenAddress),
|
|
280
|
+
];
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=routerBalanceSteps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routerBalanceSteps.js","sourceRoot":"","sources":["../../../../src/utils/routerBalanceSteps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { UniversalRouterVersion } from './constants';
|
|
2
|
+
import { AcrossV4DepositV3Params } from '../entities/actions/across';
|
|
3
|
+
/**
|
|
4
|
+
* CommandTypes
|
|
5
|
+
* @description Flags that modify a command's execution
|
|
6
|
+
* @enum {number}
|
|
7
|
+
*/
|
|
8
|
+
export declare enum CommandType {
|
|
9
|
+
V3_SWAP_EXACT_IN = 0,
|
|
10
|
+
V3_SWAP_EXACT_OUT = 1,
|
|
11
|
+
PERMIT2_TRANSFER_FROM = 2,
|
|
12
|
+
PERMIT2_PERMIT_BATCH = 3,
|
|
13
|
+
SWEEP = 4,
|
|
14
|
+
TRANSFER = 5,
|
|
15
|
+
PAY_PORTION = 6,
|
|
16
|
+
PAY_PORTION_FULL_PRECISION = 7,
|
|
17
|
+
V2_SWAP_EXACT_IN = 8,
|
|
18
|
+
V2_SWAP_EXACT_OUT = 9,
|
|
19
|
+
PERMIT2_PERMIT = 10,
|
|
20
|
+
WRAP_ETH = 11,
|
|
21
|
+
UNWRAP_WETH = 12,
|
|
22
|
+
PERMIT2_TRANSFER_FROM_BATCH = 13,
|
|
23
|
+
BALANCE_CHECK_ERC20 = 14,
|
|
24
|
+
V4_SWAP = 16,
|
|
25
|
+
V3_POSITION_MANAGER_PERMIT = 17,
|
|
26
|
+
V3_POSITION_MANAGER_CALL = 18,
|
|
27
|
+
V4_INITIALIZE_POOL = 19,
|
|
28
|
+
V4_POSITION_MANAGER_CALL = 20,
|
|
29
|
+
EXECUTE_SUB_PLAN = 33,
|
|
30
|
+
ACROSS_V4_DEPOSIT_V3 = 64
|
|
31
|
+
}
|
|
32
|
+
export declare enum Subparser {
|
|
33
|
+
V3PathExactIn = 0,
|
|
34
|
+
V3PathExactOut = 1
|
|
35
|
+
}
|
|
36
|
+
export declare enum Parser {
|
|
37
|
+
Abi = 0,
|
|
38
|
+
V4Actions = 1,
|
|
39
|
+
V3Actions = 2
|
|
40
|
+
}
|
|
41
|
+
export type ParamType = {
|
|
42
|
+
readonly name: string;
|
|
43
|
+
readonly type: string;
|
|
44
|
+
readonly subparser?: Subparser;
|
|
45
|
+
};
|
|
46
|
+
export type CommandDefinition = {
|
|
47
|
+
parser: Parser.Abi;
|
|
48
|
+
params: ParamType[];
|
|
49
|
+
} | {
|
|
50
|
+
parser: Parser.V4Actions;
|
|
51
|
+
} | {
|
|
52
|
+
parser: Parser.V3Actions;
|
|
53
|
+
};
|
|
54
|
+
export declare const COMMAND_DEFINITION: {
|
|
55
|
+
[key in CommandType]: CommandDefinition;
|
|
56
|
+
};
|
|
57
|
+
export declare const V2V3_SWAP_COMMANDS_V2_1_1: {
|
|
58
|
+
[key: number]: CommandDefinition;
|
|
59
|
+
};
|
|
60
|
+
export declare class RoutePlanner {
|
|
61
|
+
commands: string;
|
|
62
|
+
inputs: string[];
|
|
63
|
+
constructor();
|
|
64
|
+
addSubPlan(subplan: RoutePlanner): RoutePlanner;
|
|
65
|
+
addCommand(type: CommandType, parameters: any[], allowRevert?: boolean, urVersion?: UniversalRouterVersion): RoutePlanner;
|
|
66
|
+
/**
|
|
67
|
+
* Add Across bridge deposit command for cross-chain bridging
|
|
68
|
+
* @param params AcrossV4DepositV3Params containing bridge parameters
|
|
69
|
+
* @returns RoutePlanner instance for chaining
|
|
70
|
+
*/
|
|
71
|
+
addAcrossBridge(params: AcrossV4DepositV3Params): RoutePlanner;
|
|
72
|
+
}
|
|
73
|
+
export type RouterCommand = {
|
|
74
|
+
type: CommandType;
|
|
75
|
+
encodedInput: string;
|
|
76
|
+
};
|
|
77
|
+
export declare function createCommand(type: CommandType, parameters: any[], urVersion?: UniversalRouterVersion): RouterCommand;
|