@kittycorn-labs/universal-router-sdk 1.4.42 → 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 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/utils/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
+
import { NormalizedSwapSpecification, SwapStep } from '../types/encodeSwaps';
|
|
3
|
+
export type UserPaidPull = {
|
|
4
|
+
token: string | undefined;
|
|
5
|
+
maxAmount: BigNumber;
|
|
6
|
+
};
|
|
7
|
+
export declare function getV3HopCount(path: string): number | undefined;
|
|
8
|
+
export declare function v3PathFirstToken(path: string): string | undefined;
|
|
9
|
+
export declare function v3PathLastToken(path: string): string | undefined;
|
|
10
|
+
export declare function isSettlementSweepRedundant(spec: NormalizedSwapSpecification, swapSteps: SwapStep[], sweepFloor: BigNumber): boolean;
|
|
11
|
+
export declare function hasUserPaidFlag(step: SwapStep): boolean;
|
|
12
|
+
export declare function stepUserPaidPulls(step: SwapStep): UserPaidPull[];
|
|
13
|
+
export declare function sumUserPaidMax(steps: SwapStep[]): BigNumber;
|
|
14
|
+
export declare function sumDirectOutputMin(steps: SwapStep[], recipient: string, outputTokenAddress: string): BigNumber;
|
|
15
|
+
export declare function directTransferSweepFloor(spec: NormalizedSwapSpecification, netMin: BigNumber, swapSteps: SwapStep[], outputTokenAddress: string): BigNumber;
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
+
import { TradeType } from '@kittycorn-labs/sdk-core';
|
|
3
|
+
import { CONTRACT_BALANCE, ETH_ADDRESS, CHAIN_CONFIGS, ROUTER_AS_RECIPIENT, SENDER_AS_RECIPIENT, UNIVERSAL_ROUTER_ADDRESS, WETH_ADDRESS, ZERO_ADDRESS, } from './constants.js';
|
|
4
|
+
import { getCurrencyAddress } from './getCurrencyAddress.js';
|
|
5
|
+
import { toFeeList } from './normalizeEncodeSwapsSpec.js';
|
|
6
|
+
// V3 path: 20-byte address + N × (3-byte fee + 20-byte address); minimum is 43 bytes (single hop, N=1)
|
|
7
|
+
// Returns N or undefined if malformed
|
|
8
|
+
export function getV3HopCount(path) {
|
|
9
|
+
if (!path.startsWith('0x'))
|
|
10
|
+
return undefined;
|
|
11
|
+
const byteLength = (path.length - 2) / 2;
|
|
12
|
+
if (byteLength < 43)
|
|
13
|
+
return undefined;
|
|
14
|
+
const variableSegmentLength = byteLength - 20;
|
|
15
|
+
if (variableSegmentLength < 23 || variableSegmentLength % 23 !== 0)
|
|
16
|
+
return undefined;
|
|
17
|
+
return variableSegmentLength / 23;
|
|
18
|
+
}
|
|
19
|
+
function v3PathTokens(path) {
|
|
20
|
+
const hops = getV3HopCount(path);
|
|
21
|
+
if (hops === undefined)
|
|
22
|
+
return undefined;
|
|
23
|
+
const tokens = [];
|
|
24
|
+
for (let i = 0; i <= hops; i++) {
|
|
25
|
+
const start = 2 + i * 46;
|
|
26
|
+
tokens.push('0x' + path.slice(start, start + 40));
|
|
27
|
+
}
|
|
28
|
+
return tokens;
|
|
29
|
+
}
|
|
30
|
+
export function v3PathFirstToken(path) {
|
|
31
|
+
var _a;
|
|
32
|
+
return (_a = v3PathTokens(path)) === null || _a === void 0 ? void 0 : _a[0];
|
|
33
|
+
}
|
|
34
|
+
export function v3PathLastToken(path) {
|
|
35
|
+
const tokens = v3PathTokens(path);
|
|
36
|
+
return tokens === null || tokens === void 0 ? void 0 : tokens[tokens.length - 1];
|
|
37
|
+
}
|
|
38
|
+
export function isSettlementSweepRedundant(spec, swapSteps, sweepFloor) {
|
|
39
|
+
var _a;
|
|
40
|
+
if (spec.omitRedundantSettlementSweep !== true ||
|
|
41
|
+
spec.allowDirectTransfers !== true ||
|
|
42
|
+
spec.tradeType !== TradeType.EXACT_INPUT ||
|
|
43
|
+
toFeeList(spec.fee).length !== 0 ||
|
|
44
|
+
spec.routerBalanceInput !== undefined ||
|
|
45
|
+
!sweepFloor.isZero() ||
|
|
46
|
+
spec.nativeErc20Input ||
|
|
47
|
+
spec.routing.inputToken.wrapped.equals(spec.routing.outputToken.wrapped)) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
const outputToken = spec.routing.outputToken;
|
|
51
|
+
const chainId = outputToken.chainId;
|
|
52
|
+
if (!(chainId in CHAIN_CONFIGS) || CHAIN_CONFIGS[chainId].nativeErc20BalanceAlias)
|
|
53
|
+
return false;
|
|
54
|
+
const settlementToken = getCurrencyAddress(outputToken).toLowerCase();
|
|
55
|
+
const recipient = spec.recipient.toLowerCase();
|
|
56
|
+
if (recipient === ROUTER_AS_RECIPIENT)
|
|
57
|
+
return false;
|
|
58
|
+
// A native SWEEP to the router reverts, so keeping it avoids leaving ETH on the router.
|
|
59
|
+
try {
|
|
60
|
+
if (UNIVERSAL_ROUTER_ADDRESS(spec.urVersion, chainId).toLowerCase() === recipient)
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
catch (_b) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
for (const step of swapSteps) {
|
|
67
|
+
switch (step.type) {
|
|
68
|
+
case 'V2_SWAP_EXACT_IN':
|
|
69
|
+
case 'V2_SWAP_EXACT_OUT': {
|
|
70
|
+
const tokens = step.path.map((token) => token.toLowerCase());
|
|
71
|
+
if (tokens.length === 0)
|
|
72
|
+
return false;
|
|
73
|
+
const outputIndex = tokens.length - 1;
|
|
74
|
+
if (tokens.some((token, index) => index !== outputIndex && token === settlementToken))
|
|
75
|
+
return false;
|
|
76
|
+
if (tokens[outputIndex] === settlementToken && step.recipient.toLowerCase() !== recipient)
|
|
77
|
+
return false;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
case 'V3_SWAP_EXACT_IN':
|
|
81
|
+
case 'V3_SWAP_EXACT_OUT': {
|
|
82
|
+
const tokens = (_a = v3PathTokens(step.path)) === null || _a === void 0 ? void 0 : _a.map((token) => token.toLowerCase());
|
|
83
|
+
if (!tokens)
|
|
84
|
+
return false;
|
|
85
|
+
const outputIndex = step.type === 'V3_SWAP_EXACT_IN' ? tokens.length - 1 : 0;
|
|
86
|
+
if (tokens.some((token, index) => index !== outputIndex && token === settlementToken))
|
|
87
|
+
return false;
|
|
88
|
+
if (tokens[outputIndex] === settlementToken && step.recipient.toLowerCase() !== recipient)
|
|
89
|
+
return false;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
case 'WRAP_ETH':
|
|
93
|
+
try {
|
|
94
|
+
const wethAddress = WETH_ADDRESS(chainId);
|
|
95
|
+
if (!outputToken.isNative && wethAddress.toLowerCase() === settlementToken)
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
catch (_c) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
break;
|
|
102
|
+
case 'UNWRAP_WETH':
|
|
103
|
+
if (outputToken.isNative && step.recipient.toLowerCase() !== recipient)
|
|
104
|
+
return false;
|
|
105
|
+
break;
|
|
106
|
+
case 'V4_SWAP':
|
|
107
|
+
for (const action of step.v4Actions) {
|
|
108
|
+
switch (action.action) {
|
|
109
|
+
case 'SWAP_EXACT_IN_SINGLE':
|
|
110
|
+
case 'SWAP_EXACT_OUT_SINGLE':
|
|
111
|
+
if (action.poolKey.hooks.toLowerCase() !== ZERO_ADDRESS)
|
|
112
|
+
return false;
|
|
113
|
+
break;
|
|
114
|
+
case 'SWAP_EXACT_IN':
|
|
115
|
+
case 'SWAP_EXACT_OUT':
|
|
116
|
+
if (action.path.some((hop) => hop.hooks.toLowerCase() !== ZERO_ADDRESS))
|
|
117
|
+
return false;
|
|
118
|
+
break;
|
|
119
|
+
case 'TAKE':
|
|
120
|
+
case 'TAKE_PORTION':
|
|
121
|
+
if (action.currency.toLowerCase() === settlementToken && action.recipient.toLowerCase() !== recipient) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
break;
|
|
125
|
+
case 'TAKE_ALL':
|
|
126
|
+
if (action.currency.toLowerCase() === settlementToken && recipient !== SENDER_AS_RECIPIENT)
|
|
127
|
+
return false;
|
|
128
|
+
break;
|
|
129
|
+
case 'SETTLE':
|
|
130
|
+
case 'SETTLE_ALL':
|
|
131
|
+
break;
|
|
132
|
+
default:
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
break;
|
|
137
|
+
default:
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
// SETTLE_ALL / TAKE_ALL are intrinsically direct (no flag on-chain) and are gated separately
|
|
144
|
+
export function hasUserPaidFlag(step) {
|
|
145
|
+
switch (step.type) {
|
|
146
|
+
case 'V2_SWAP_EXACT_IN':
|
|
147
|
+
case 'V2_SWAP_EXACT_OUT':
|
|
148
|
+
case 'V3_SWAP_EXACT_IN':
|
|
149
|
+
case 'V3_SWAP_EXACT_OUT':
|
|
150
|
+
return step.payerIsUser === true;
|
|
151
|
+
case 'V4_SWAP':
|
|
152
|
+
return step.v4Actions.some((a) => a.action === 'SETTLE' && a.payerIsUser === true);
|
|
153
|
+
default:
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function v4UserPaidPulls(action) {
|
|
158
|
+
switch (action.action) {
|
|
159
|
+
case 'SETTLE':
|
|
160
|
+
return action.payerIsUser === true ? [{ token: action.currency, maxAmount: BigNumber.from(action.amount) }] : [];
|
|
161
|
+
case 'SETTLE_ALL':
|
|
162
|
+
// SETTLE_ALL always settles from msgSender (the user), bounded on-chain by maxAmount
|
|
163
|
+
return [{ token: action.currency, maxAmount: BigNumber.from(action.maxAmount) }];
|
|
164
|
+
default:
|
|
165
|
+
return [];
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// contract-enforced maxima: exact-in pulls exactly amountIn; exact-out reverts above amountInMax
|
|
169
|
+
export function stepUserPaidPulls(step) {
|
|
170
|
+
switch (step.type) {
|
|
171
|
+
case 'V2_SWAP_EXACT_IN':
|
|
172
|
+
return step.payerIsUser === true ? [{ token: step.path[0], maxAmount: BigNumber.from(step.amountIn) }] : [];
|
|
173
|
+
case 'V2_SWAP_EXACT_OUT':
|
|
174
|
+
return step.payerIsUser === true ? [{ token: step.path[0], maxAmount: BigNumber.from(step.amountInMax) }] : [];
|
|
175
|
+
case 'V3_SWAP_EXACT_IN':
|
|
176
|
+
return step.payerIsUser === true
|
|
177
|
+
? [{ token: v3PathFirstToken(step.path), maxAmount: BigNumber.from(step.amountIn) }]
|
|
178
|
+
: [];
|
|
179
|
+
case 'V3_SWAP_EXACT_OUT':
|
|
180
|
+
// exact-out paths are encoded output-first, so the input token is the path tail
|
|
181
|
+
return step.payerIsUser === true
|
|
182
|
+
? [{ token: v3PathLastToken(step.path), maxAmount: BigNumber.from(step.amountInMax) }]
|
|
183
|
+
: [];
|
|
184
|
+
case 'V4_SWAP':
|
|
185
|
+
return step.v4Actions.flatMap(v4UserPaidPulls);
|
|
186
|
+
default:
|
|
187
|
+
return [];
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// token-agnostic by design: validation binds every pull to the input token before this sum is
|
|
191
|
+
// used, so off-token pulls are rejected rather than filtered (unlike output credits below)
|
|
192
|
+
export function sumUserPaidMax(steps) {
|
|
193
|
+
return steps.flatMap(stepUserPaidPulls).reduce((total, pull) => total.add(pull.maxAmount), BigNumber.from(0));
|
|
194
|
+
}
|
|
195
|
+
// input/output currencies of a v4 swap action's delta within its command's lock
|
|
196
|
+
function v4SwapCurrencies(action) {
|
|
197
|
+
switch (action.action) {
|
|
198
|
+
case 'SWAP_EXACT_IN':
|
|
199
|
+
return action.path.length > 0
|
|
200
|
+
? { input: action.currencyIn, output: action.path[action.path.length - 1].intermediateCurrency }
|
|
201
|
+
: undefined;
|
|
202
|
+
case 'SWAP_EXACT_OUT':
|
|
203
|
+
// exact-out paths walk from the input side, so the first hop names the input currency
|
|
204
|
+
return action.path.length > 0
|
|
205
|
+
? { input: action.path[0].intermediateCurrency, output: action.currencyOut }
|
|
206
|
+
: undefined;
|
|
207
|
+
case 'SWAP_EXACT_IN_SINGLE':
|
|
208
|
+
case 'SWAP_EXACT_OUT_SINGLE':
|
|
209
|
+
return action.zeroForOne
|
|
210
|
+
? { input: action.poolKey.currency0, output: action.poolKey.currency1 }
|
|
211
|
+
: { input: action.poolKey.currency1, output: action.poolKey.currency0 };
|
|
212
|
+
default:
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// credits exact-in swap minimums that a single OPEN_DELTA take forwards to the recipient.
|
|
217
|
+
// sound because the v4 ledger must zero for the command to succeed: when a currency's only
|
|
218
|
+
// take is one OPEN_DELTA take to the recipient and nothing else in the block can consume that
|
|
219
|
+
// currency, any successful transaction paid the recipient everything the block's swaps produced
|
|
220
|
+
// of it — contract-enforced to be at least the exact-in swaps' summed amountOutMinimums
|
|
221
|
+
// (order-independent: an early take strands later credit and reverts the lock)
|
|
222
|
+
function v4OpenDeltaTakeCredits(actions, recipient) {
|
|
223
|
+
var _a, _b, _c;
|
|
224
|
+
const swapMins = new Map();
|
|
225
|
+
const takeCounts = new Map();
|
|
226
|
+
const soleOpenDeltaToRecipient = new Map();
|
|
227
|
+
const disqualified = new Set();
|
|
228
|
+
for (const action of actions) {
|
|
229
|
+
switch (action.action) {
|
|
230
|
+
case 'SWAP_EXACT_IN':
|
|
231
|
+
case 'SWAP_EXACT_OUT':
|
|
232
|
+
case 'SWAP_EXACT_IN_SINGLE':
|
|
233
|
+
case 'SWAP_EXACT_OUT_SINGLE': {
|
|
234
|
+
const currencies = v4SwapCurrencies(action);
|
|
235
|
+
if (currencies === undefined)
|
|
236
|
+
return []; // unparseable swap: cannot attribute deltas, credit nothing
|
|
237
|
+
disqualified.add(currencies.input.toLowerCase()); // the swap consumes this currency's delta
|
|
238
|
+
// only exact-in minimums are creditable: the action enforces them (V4TooLittleReceived).
|
|
239
|
+
// exact-out amounts are NOT asserted by the deployed v4 router — a price-limit partial
|
|
240
|
+
// fill succeeds with less — so exact-out swaps contribute zero (their actual output only
|
|
241
|
+
// adds on top of the credited exact-in minimums, keeping the credit a valid lower bound)
|
|
242
|
+
if (action.action === 'SWAP_EXACT_IN' || action.action === 'SWAP_EXACT_IN_SINGLE') {
|
|
243
|
+
const output = currencies.output.toLowerCase();
|
|
244
|
+
swapMins.set(output, ((_a = swapMins.get(output)) !== null && _a !== void 0 ? _a : BigNumber.from(0)).add(BigNumber.from(action.amountOutMinimum)));
|
|
245
|
+
}
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
case 'SETTLE':
|
|
249
|
+
case 'SETTLE_ALL':
|
|
250
|
+
disqualified.add(action.currency.toLowerCase());
|
|
251
|
+
break;
|
|
252
|
+
case 'TAKE': {
|
|
253
|
+
const currency = action.currency.toLowerCase();
|
|
254
|
+
takeCounts.set(currency, ((_b = takeCounts.get(currency)) !== null && _b !== void 0 ? _b : 0) + 1);
|
|
255
|
+
soleOpenDeltaToRecipient.set(currency, BigNumber.from(action.amount).isZero() && action.recipient.toLowerCase() === recipient.toLowerCase());
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
case 'TAKE_ALL':
|
|
259
|
+
case 'TAKE_PORTION': {
|
|
260
|
+
const currency = action.currency.toLowerCase();
|
|
261
|
+
takeCounts.set(currency, ((_c = takeCounts.get(currency)) !== null && _c !== void 0 ? _c : 0) + 1);
|
|
262
|
+
soleOpenDeltaToRecipient.set(currency, false);
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
default:
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
const credits = [];
|
|
270
|
+
for (const [currency, min] of swapMins) {
|
|
271
|
+
if (takeCounts.get(currency) === 1 && soleOpenDeltaToRecipient.get(currency) && !disqualified.has(currency)) {
|
|
272
|
+
credits.push({ token: currency, minAmount: min });
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return credits;
|
|
276
|
+
}
|
|
277
|
+
function v4DirectOutputCredits(action, recipient) {
|
|
278
|
+
switch (action.action) {
|
|
279
|
+
case 'TAKE': {
|
|
280
|
+
if (action.recipient.toLowerCase() !== recipient.toLowerCase())
|
|
281
|
+
return [];
|
|
282
|
+
const amount = BigNumber.from(action.amount);
|
|
283
|
+
// OPEN_DELTA (0) / CONTRACT_BALANCE takes are runtime-sized: deliverable, but guarantee nothing
|
|
284
|
+
if (amount.lte(0) || amount.gte(CONTRACT_BALANCE))
|
|
285
|
+
return [];
|
|
286
|
+
return [{ token: action.currency, minAmount: amount }];
|
|
287
|
+
}
|
|
288
|
+
case 'TAKE_ALL':
|
|
289
|
+
// pays msgSender on-chain: counts only when the spec recipient IS the sender sentinel
|
|
290
|
+
return recipient === SENDER_AS_RECIPIENT
|
|
291
|
+
? [{ token: action.currency, minAmount: BigNumber.from(action.minAmount) }]
|
|
292
|
+
: [];
|
|
293
|
+
default:
|
|
294
|
+
return [];
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
// contract-guaranteed amounts a step delivers directly to `recipient`
|
|
298
|
+
function stepDirectOutputCredits(step, recipient) {
|
|
299
|
+
const isDirect = 'recipient' in step && step.recipient.toLowerCase() === recipient.toLowerCase();
|
|
300
|
+
switch (step.type) {
|
|
301
|
+
case 'V2_SWAP_EXACT_IN':
|
|
302
|
+
return isDirect ? [{ token: step.path[step.path.length - 1], minAmount: BigNumber.from(step.amountOutMin) }] : [];
|
|
303
|
+
case 'V2_SWAP_EXACT_OUT':
|
|
304
|
+
// not creditable: v2SwapExactOutput only bounds amountIn (<= amountInMaximum) and never asserts
|
|
305
|
+
// amountOut was produced — unlike V3 exact-out (V3InvalidAmountOut) or v4 exact-out (concrete TAKE /
|
|
306
|
+
// CurrencyNotSettled). So a fee-on-transfer input/intermediate makes the leg produce less than
|
|
307
|
+
// amountOut and still succeed; like v4 OPEN_DELTA exact-out, contribute zero.
|
|
308
|
+
return [];
|
|
309
|
+
case 'V3_SWAP_EXACT_IN':
|
|
310
|
+
return isDirect ? [{ token: v3PathLastToken(step.path), minAmount: BigNumber.from(step.amountOutMin) }] : [];
|
|
311
|
+
case 'V3_SWAP_EXACT_OUT':
|
|
312
|
+
// exact-out paths are encoded output-first, so the output token is the path head
|
|
313
|
+
return isDirect ? [{ token: v3PathFirstToken(step.path), minAmount: BigNumber.from(step.amountOut) }] : [];
|
|
314
|
+
case 'UNWRAP_WETH':
|
|
315
|
+
return isDirect ? [{ token: ETH_ADDRESS, minAmount: BigNumber.from(step.amountMin) }] : [];
|
|
316
|
+
case 'V4_SWAP':
|
|
317
|
+
// per-action concrete credits and the block-level OPEN_DELTA rule are disjoint:
|
|
318
|
+
// an OPEN_DELTA take never produces a per-action credit
|
|
319
|
+
return [
|
|
320
|
+
...step.v4Actions.flatMap((action) => v4DirectOutputCredits(action, recipient)),
|
|
321
|
+
...v4OpenDeltaTakeCredits(step.v4Actions, recipient),
|
|
322
|
+
];
|
|
323
|
+
default:
|
|
324
|
+
return [];
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
// Direct-output coverage in the output token: the summed contract-enforced minimum delivered straight to
|
|
328
|
+
// the recipient, and the number of coverage-bearing legs it came from. Summed per-leg floors can trail the
|
|
329
|
+
// trade-level floor by up to one wei each, so the caller uses `legs` to size how much rounding to tolerate;
|
|
330
|
+
// only legs carrying a nonzero minimum count — a zero-min leg has no flooring error to forgive, so it must
|
|
331
|
+
// not pad the tolerance.
|
|
332
|
+
function directOutputCoverage(steps, recipient, outputTokenAddress) {
|
|
333
|
+
const target = outputTokenAddress.toLowerCase();
|
|
334
|
+
const credits = steps
|
|
335
|
+
.flatMap((step) => stepDirectOutputCredits(step, recipient))
|
|
336
|
+
.filter((credit) => credit.token !== undefined && credit.token.toLowerCase() === target);
|
|
337
|
+
return {
|
|
338
|
+
min: credits.reduce((total, credit) => total.add(credit.minAmount), BigNumber.from(0)),
|
|
339
|
+
legs: credits.filter((credit) => credit.minAmount.gt(0)).length,
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
export function sumDirectOutputMin(steps, recipient, outputTokenAddress) {
|
|
343
|
+
return directOutputCoverage(steps, recipient, outputTokenAddress).min;
|
|
344
|
+
}
|
|
345
|
+
// The final SWEEP floor for a direct-transfer plan: netMin minus what the direct legs already guarantee to
|
|
346
|
+
// the recipient. Direct legs pay straight from the pools, so their credited minimums can sum a few wei
|
|
347
|
+
// below netMin — from independent integer flooring, and from routers that floor slippage in f64 — with no
|
|
348
|
+
// custody balance to cover the gap. A small tolerance forgives that sub-economic rounding so a fully
|
|
349
|
+
// covered direct plan doesn't revert; a larger, real coverage gap still enforces the full floor.
|
|
350
|
+
export function directTransferSweepFloor(spec, netMin, swapSteps, outputTokenAddress) {
|
|
351
|
+
const { min: directOutputMin, legs } = directOutputCoverage(swapSteps, spec.recipient, outputTokenAddress);
|
|
352
|
+
const shortfall = netMin.sub(directOutputMin);
|
|
353
|
+
// flexibility tolerance: min(0.5bps of netMin, 1% of the slippage the user set). Headroom for a router's
|
|
354
|
+
// per-leg slippage math; scales to 0 as slippage -> 0 (and is 0 for exact-output, which has no
|
|
355
|
+
// output-side slippage), so an exact-price trade stays exact.
|
|
356
|
+
const slippageNumerator = BigNumber.from(spec.slippageTolerance.numerator.toString());
|
|
357
|
+
const slippageDenominator = BigNumber.from(spec.slippageTolerance.denominator.toString());
|
|
358
|
+
const outputSlippage = spec.tradeType === TradeType.EXACT_INPUT
|
|
359
|
+
? BigNumber.from(spec.routing.quote.quotient.toString()).mul(slippageNumerator).div(slippageDenominator)
|
|
360
|
+
: BigNumber.from(0);
|
|
361
|
+
const halfBps = netMin.div(20000);
|
|
362
|
+
const onePercentOfSlippage = outputSlippage.div(100);
|
|
363
|
+
const flexibilityTolerance = halfBps.lt(onePercentOfSlippage) ? halfBps : onePercentOfSlippage;
|
|
364
|
+
// rounding tolerance: 2 wei per direct leg — inherent integer per-leg flooring, always allowed.
|
|
365
|
+
const roundingTolerance = BigNumber.from(legs * 2);
|
|
366
|
+
const toleratedShortfall = flexibilityTolerance.gt(roundingTolerance) ? flexibilityTolerance : roundingTolerance;
|
|
367
|
+
return shortfall.gt(toleratedShortfall) ? shortfall : BigNumber.from(0);
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=directTransfers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directTransfers.js","sourceRoot":"","sources":["../../../../src/utils/directTransfers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer';
|
|
2
|
+
export declare const EIP712_DOMAIN_NAME = "UniversalRouter";
|
|
3
|
+
export declare const EIP712_DOMAIN_VERSION = "2";
|
|
4
|
+
export declare const EXECUTE_SIGNED_TYPES: Record<string, TypedDataField[]>;
|
|
5
|
+
/**
|
|
6
|
+
* Generate EIP712 domain for Universal Router
|
|
7
|
+
*/
|
|
8
|
+
export declare function getUniversalRouterDomain(chainId: number, verifyingContract: string): TypedDataDomain;
|
|
9
|
+
/**
|
|
10
|
+
* Generate a random nonce for signed execution
|
|
11
|
+
* Uses secureRandomBytes for secure randomness
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateNonce(): string;
|
|
14
|
+
/**
|
|
15
|
+
* Sentinel value to skip nonce checking (allows signature replay)
|
|
16
|
+
*/
|
|
17
|
+
export declare const NONCE_SKIP_CHECK: string;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { hexlify } from '@ethersproject/bytes';
|
|
2
|
+
import { randomBytes as secureRandomBytes } from '@ethersproject/random';
|
|
3
|
+
export const EIP712_DOMAIN_NAME = 'UniversalRouter';
|
|
4
|
+
export const EIP712_DOMAIN_VERSION = '2';
|
|
5
|
+
export const EXECUTE_SIGNED_TYPES = {
|
|
6
|
+
ExecuteSigned: [
|
|
7
|
+
{ name: 'commands', type: 'bytes' },
|
|
8
|
+
{ name: 'inputs', type: 'bytes[]' },
|
|
9
|
+
{ name: 'intent', type: 'bytes32' },
|
|
10
|
+
{ name: 'data', type: 'bytes32' },
|
|
11
|
+
{ name: 'sender', type: 'address' },
|
|
12
|
+
{ name: 'nonce', type: 'bytes32' },
|
|
13
|
+
{ name: 'deadline', type: 'uint256' },
|
|
14
|
+
],
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Generate EIP712 domain for Universal Router
|
|
18
|
+
*/
|
|
19
|
+
export function getUniversalRouterDomain(chainId, verifyingContract) {
|
|
20
|
+
return {
|
|
21
|
+
name: EIP712_DOMAIN_NAME,
|
|
22
|
+
version: EIP712_DOMAIN_VERSION,
|
|
23
|
+
chainId,
|
|
24
|
+
verifyingContract,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Generate a random nonce for signed execution
|
|
29
|
+
* Uses secureRandomBytes for secure randomness
|
|
30
|
+
*/
|
|
31
|
+
export function generateNonce() {
|
|
32
|
+
const randomBytes = secureRandomBytes(32);
|
|
33
|
+
return hexlify(randomBytes);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Sentinel value to skip nonce checking (allows signature replay)
|
|
37
|
+
*/
|
|
38
|
+
export const NONCE_SKIP_CHECK = '0x' + 'f'.repeat(64); // bytes32(type(uint256).max)
|
|
39
|
+
//# sourceMappingURL=eip712.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eip712.js","sourceRoot":"","sources":["../../../../src/utils/eip712.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAExE,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CAAA;AACnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;AAExC,MAAM,CAAC,MAAM,oBAAoB,GAAqC;IACpE,aAAa,EAAE;QACb,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE;QACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;QACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;QACnC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;QACjC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;QACnC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;QAClC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;KACtC;CACF,CAAA;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe,EAAE,iBAAyB;IACjF,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,qBAAqB;QAC9B,OAAO;QACP,iBAAiB;KAClB,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,WAAW,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAA;IACzC,OAAO,OAAO,CAAC,WAAW,CAAC,CAAA;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA,CAAC,6BAA6B"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { UniversalRouterVersion } from './constants';
|
|
2
|
+
import { RoutePlanner } from './routerCommands';
|
|
3
|
+
import { SwapStep } from '../types/encodeSwaps';
|
|
4
|
+
export declare function encodeSwapStep(planner: RoutePlanner, step: SwapStep, urVersion?: UniversalRouterVersion): void;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { V4Planner } from '@kittycorn-labs/v4-sdk';
|
|
2
|
+
import { isAtLeastV2_1_1 } from './constants.js';
|
|
3
|
+
import { CommandType } from './routerCommands.js';
|
|
4
|
+
import { encodeV4Action } from './encodeV4Action.js';
|
|
5
|
+
import { toV4URVersion } from './toV4URVersion.js';
|
|
6
|
+
// payerIsUser defaults to false (router custody); validateEncodeSwaps gates when true is allowed
|
|
7
|
+
export function encodeSwapStep(planner, step, urVersion) {
|
|
8
|
+
var _a, _b, _c, _d;
|
|
9
|
+
const useV2_1_1 = isAtLeastV2_1_1(urVersion);
|
|
10
|
+
switch (step.type) {
|
|
11
|
+
case 'V2_SWAP_EXACT_IN': {
|
|
12
|
+
const params = [step.recipient, step.amountIn, step.amountOutMin, step.path, step.payerIsUser === true];
|
|
13
|
+
if (useV2_1_1)
|
|
14
|
+
params.push((_a = step.minHopPriceX36) !== null && _a !== void 0 ? _a : []);
|
|
15
|
+
planner.addCommand(CommandType.V2_SWAP_EXACT_IN, params, false, urVersion);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
case 'V2_SWAP_EXACT_OUT': {
|
|
19
|
+
const params = [step.recipient, step.amountOut, step.amountInMax, step.path, step.payerIsUser === true];
|
|
20
|
+
if (useV2_1_1)
|
|
21
|
+
params.push((_b = step.minHopPriceX36) !== null && _b !== void 0 ? _b : []);
|
|
22
|
+
planner.addCommand(CommandType.V2_SWAP_EXACT_OUT, params, false, urVersion);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
case 'V3_SWAP_EXACT_IN': {
|
|
26
|
+
const params = [step.recipient, step.amountIn, step.amountOutMin, step.path, step.payerIsUser === true];
|
|
27
|
+
if (useV2_1_1)
|
|
28
|
+
params.push((_c = step.minHopPriceX36) !== null && _c !== void 0 ? _c : []);
|
|
29
|
+
planner.addCommand(CommandType.V3_SWAP_EXACT_IN, params, false, urVersion);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
case 'V3_SWAP_EXACT_OUT': {
|
|
33
|
+
const params = [step.recipient, step.amountOut, step.amountInMax, step.path, step.payerIsUser === true];
|
|
34
|
+
if (useV2_1_1)
|
|
35
|
+
params.push((_d = step.minHopPriceX36) !== null && _d !== void 0 ? _d : []);
|
|
36
|
+
planner.addCommand(CommandType.V3_SWAP_EXACT_OUT, params, false, urVersion);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
case 'V4_SWAP': {
|
|
40
|
+
const v4Planner = new V4Planner();
|
|
41
|
+
for (const v4Action of step.v4Actions) {
|
|
42
|
+
const encoded = encodeV4Action(v4Action, urVersion);
|
|
43
|
+
v4Planner.addAction(encoded.action, encoded.params, toV4URVersion(urVersion));
|
|
44
|
+
}
|
|
45
|
+
planner.addCommand(CommandType.V4_SWAP, [v4Planner.finalize()], false, urVersion);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
case 'WRAP_ETH':
|
|
49
|
+
planner.addCommand(CommandType.WRAP_ETH, [step.recipient, step.amount], false, urVersion);
|
|
50
|
+
return;
|
|
51
|
+
case 'UNWRAP_WETH':
|
|
52
|
+
planner.addCommand(CommandType.UNWRAP_WETH, [step.recipient, step.amountMin], false, urVersion);
|
|
53
|
+
return;
|
|
54
|
+
default:
|
|
55
|
+
throw new Error(`Unknown swap step type: ${step.type}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=encodeSwapStep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encodeSwapStep.js","sourceRoot":"","sources":["../../../../src/utils/encodeSwapStep.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Actions } from '@kittycorn-labs/v4-sdk';
|
|
2
|
+
import { UniversalRouterVersion } from './constants';
|
|
3
|
+
import { V4Action } from '../types/encodeSwaps';
|
|
4
|
+
export declare function encodeV4Action(v4Action: V4Action, urVersion?: UniversalRouterVersion): {
|
|
5
|
+
action: Actions;
|
|
6
|
+
params: any[];
|
|
7
|
+
};
|