@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,339 @@
|
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
+
import invariant from 'tiny-invariant';
|
|
3
|
+
import { TradeType, WETH9 } from '@kittycorn-labs/sdk-core';
|
|
4
|
+
import { MAX_FEE_RECIPIENTS, TokenTransferMode } from '../entities/actions/uniswap.js';
|
|
5
|
+
import { MAX_UINT160, ROUTER_AS_RECIPIENT, SENDER_AS_RECIPIENT, UniversalRouterVersion, isAtLeastV2_1_1, ZERO_ADDRESS, ETH_ADDRESS, CONTRACT_BALANCE, } from './constants.js';
|
|
6
|
+
import { getCurrencyAddress } from './getCurrencyAddress.js';
|
|
7
|
+
import { getV3HopCount, hasUserPaidFlag, stepUserPaidPulls } from './directTransfers.js';
|
|
8
|
+
import { computeEncodeSwapsAmounts } from './computeEncodeSwapsAmounts.js';
|
|
9
|
+
import { isInputSettle, isInputSwap, stepSpendAmount, stepSpendsToken, v4SwapAmountIn } from './routerBalanceSteps.js';
|
|
10
|
+
import { toFeeList } from './normalizeEncodeSwapsSpec.js';
|
|
11
|
+
function hasPortionFee(spec) {
|
|
12
|
+
return toFeeList(spec.fee).some((fee) => fee.kind === 'portion');
|
|
13
|
+
}
|
|
14
|
+
function hasV4MinHopPriceX36(action) {
|
|
15
|
+
switch (action.action) {
|
|
16
|
+
case 'SWAP_EXACT_IN':
|
|
17
|
+
case 'SWAP_EXACT_OUT':
|
|
18
|
+
case 'SWAP_EXACT_IN_SINGLE':
|
|
19
|
+
case 'SWAP_EXACT_OUT_SINGLE':
|
|
20
|
+
return action.minHopPriceX36 !== undefined;
|
|
21
|
+
default:
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function validateV4HopCounts(actions) {
|
|
26
|
+
for (const action of actions) {
|
|
27
|
+
switch (action.action) {
|
|
28
|
+
case 'SWAP_EXACT_IN':
|
|
29
|
+
case 'SWAP_EXACT_OUT':
|
|
30
|
+
invariant(!action.minHopPriceX36 || action.minHopPriceX36.length === action.path.length, 'V4_MIN_HOP_PRICE_X36_LENGTH_MISMATCH');
|
|
31
|
+
break;
|
|
32
|
+
default:
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function assertRouterRecipient(recipient) {
|
|
38
|
+
invariant(recipient === ROUTER_AS_RECIPIENT, 'STEP_RECIPIENT_MUST_BE_ROUTER');
|
|
39
|
+
}
|
|
40
|
+
// `routerOnlyError` is the surface's legacy flag-off code (steps vs v4 actions)
|
|
41
|
+
function checkRecipient(spec, recipient, routerOnlyError) {
|
|
42
|
+
invariant(typeof recipient === 'string', routerOnlyError);
|
|
43
|
+
if (recipient === ROUTER_AS_RECIPIENT)
|
|
44
|
+
return;
|
|
45
|
+
invariant(spec.allowDirectTransfers, routerOnlyError);
|
|
46
|
+
invariant(!hasPortionFee(spec), 'PORTION_FEE_REQUIRES_ROUTER_CUSTODY');
|
|
47
|
+
invariant(recipient.toLowerCase() === spec.recipient.toLowerCase(), 'STEP_RECIPIENT_NOT_ALLOWED');
|
|
48
|
+
}
|
|
49
|
+
function validateV4Recipients(actions, spec) {
|
|
50
|
+
for (const action of actions) {
|
|
51
|
+
switch (action.action) {
|
|
52
|
+
case 'TAKE':
|
|
53
|
+
case 'TAKE_PORTION':
|
|
54
|
+
// fees are sdk-authored (the envelope's PAY_PORTION); a step-level TAKE_PORTION never pays the fee recipient
|
|
55
|
+
checkRecipient(spec, action.recipient, 'V4_ACTION_RECIPIENT_MUST_BE_ROUTER');
|
|
56
|
+
break;
|
|
57
|
+
case 'TAKE_ALL':
|
|
58
|
+
// TAKE_ALL pays msgSender on-chain; any other spec recipient would be the
|
|
59
|
+
// wrong payee while still reducing their sweep floor.
|
|
60
|
+
invariant(spec.allowDirectTransfers, 'TAKE_ALL_REQUIRES_DIRECT_TRANSFERS');
|
|
61
|
+
invariant(!hasPortionFee(spec), 'PORTION_FEE_REQUIRES_ROUTER_CUSTODY');
|
|
62
|
+
// strict equality: the all-numeric sentinel has no checksum variant; anything else fails closed
|
|
63
|
+
invariant(spec.recipient === SENDER_AS_RECIPIENT, 'TAKE_ALL_REQUIRES_SENDER_RECIPIENT');
|
|
64
|
+
break;
|
|
65
|
+
default:
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const HEX_BYTES = /^0x([0-9a-fA-F]{2})*$/;
|
|
71
|
+
// ethers rejects non-hex hookData (e.g. '') deep inside abi encoding; fail loudly here instead
|
|
72
|
+
function validateV4HookData(actions) {
|
|
73
|
+
for (const action of actions) {
|
|
74
|
+
if (action.action === 'SWAP_EXACT_IN_SINGLE' || action.action === 'SWAP_EXACT_OUT_SINGLE') {
|
|
75
|
+
invariant(HEX_BYTES.test(action.hookData), 'V4_HOOK_DATA_INVALID');
|
|
76
|
+
}
|
|
77
|
+
if (action.action === 'SWAP_EXACT_IN' || action.action === 'SWAP_EXACT_OUT') {
|
|
78
|
+
for (const hop of action.path) {
|
|
79
|
+
invariant(HEX_BYTES.test(hop.hookData), 'V4_HOOK_DATA_INVALID');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export function validateEncodeSwaps(spec, swapSteps) {
|
|
85
|
+
var _a, _b;
|
|
86
|
+
invariant(swapSteps.length > 0, 'EMPTY_SWAP_STEPS');
|
|
87
|
+
const amountCurrency = spec.routing.amount.currency.wrapped;
|
|
88
|
+
const quoteCurrency = spec.routing.quote.currency.wrapped;
|
|
89
|
+
const inputCurrency = spec.routing.inputToken.wrapped;
|
|
90
|
+
const outputCurrency = spec.routing.outputToken.wrapped;
|
|
91
|
+
invariant(!spec.slippageTolerance.lessThan(0), 'SLIPPAGE_TOLERANCE');
|
|
92
|
+
invariant(spec.recipient !== ZERO_ADDRESS, 'RECIPIENT_CANNOT_BE_ZERO');
|
|
93
|
+
invariant(spec.recipient !== ROUTER_AS_RECIPIENT, 'RECIPIENT_CANNOT_BE_ROUTER');
|
|
94
|
+
// routing.amount is on the exact side of the trade; routing.quote is on the slippage side
|
|
95
|
+
if (spec.tradeType === TradeType.EXACT_INPUT) {
|
|
96
|
+
invariant(amountCurrency.equals(inputCurrency), 'INVALID_ROUTING_AMOUNT_CURRENCY');
|
|
97
|
+
invariant(quoteCurrency.equals(outputCurrency), 'INVALID_ROUTING_QUOTE_CURRENCY');
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
invariant(amountCurrency.equals(outputCurrency), 'INVALID_ROUTING_AMOUNT_CURRENCY');
|
|
101
|
+
invariant(quoteCurrency.equals(inputCurrency), 'INVALID_ROUTING_QUOTE_CURRENCY');
|
|
102
|
+
}
|
|
103
|
+
// ApproveProxy ingress lives upstream in the proxy contract: needs chain id, ERC20 input, no permit2, explicit recipient
|
|
104
|
+
if (spec.tokenTransferMode === TokenTransferMode.ApproveProxy) {
|
|
105
|
+
invariant(!!spec.chainId, 'PROXY_MISSING_CHAIN_ID');
|
|
106
|
+
invariant(!spec.routing.inputToken.isNative, 'PROXY_NATIVE_INPUT');
|
|
107
|
+
invariant(!spec.permit, 'PROXY_PERMIT_CONFLICT');
|
|
108
|
+
invariant(spec.recipient !== SENDER_AS_RECIPIENT, 'PROXY_EXPLICIT_RECIPIENT_REQUIRED');
|
|
109
|
+
}
|
|
110
|
+
// permit2 is ERC20-only; native input pays via msg.value
|
|
111
|
+
invariant(!(spec.routing.inputToken.isNative && spec.permit), 'NATIVE_INPUT_PERMIT');
|
|
112
|
+
// native-ERC20 gas-token input (e.g. Arc USDC): funded via msg.value, never via Permit2
|
|
113
|
+
if (spec.nativeErc20Input) {
|
|
114
|
+
invariant(!spec.routing.inputToken.isNative, 'NATIVE_ERC20_INPUT_NATIVE_TOKEN');
|
|
115
|
+
invariant(!spec.permit, 'NATIVE_ERC20_INPUT_PERMIT_CONFLICT');
|
|
116
|
+
invariant(spec.tokenTransferMode !== TokenTransferMode.ApproveProxy, 'NATIVE_ERC20_INPUT_PROXY_CONFLICT');
|
|
117
|
+
invariant(spec.routing.inputToken.decimals <= 18, 'NATIVE_ERC20_INPUT_DECIMALS');
|
|
118
|
+
}
|
|
119
|
+
// router-balance funding: no ingress, first hop spends CONTRACT_BALANCE. Mirrors the
|
|
120
|
+
// SwapOptions.routerBalanceInput guards; anything refused here would silently encode a
|
|
121
|
+
// fixed-amount wallet-funded swap instead.
|
|
122
|
+
if (spec.routerBalanceInput) {
|
|
123
|
+
invariant(spec.tradeType === TradeType.EXACT_INPUT, 'ROUTER_BALANCE_INPUT_EXACT_INPUT_ONLY');
|
|
124
|
+
invariant(!spec.nativeErc20Input, 'ROUTER_BALANCE_INPUT_NATIVE_ERC20_CONFLICT');
|
|
125
|
+
invariant(!spec.permit, 'ROUTER_BALANCE_INPUT_PERMIT_CONFLICT');
|
|
126
|
+
invariant(spec.tokenTransferMode !== TokenTransferMode.ApproveProxy, 'ROUTER_BALANCE_INPUT_PROXY_CONFLICT');
|
|
127
|
+
invariant(!spec.allowDirectTransfers, 'ROUTER_BALANCE_INPUT_DIRECT_TRANSFERS_CONFLICT');
|
|
128
|
+
// SENDER_AS_RECIPIENT resolves to the caller of execute(), who in this flow is the
|
|
129
|
+
// funder (a bridge filler), not the swapper.
|
|
130
|
+
invariant(spec.recipient !== SENDER_AS_RECIPIENT, 'ROUTER_BALANCE_INPUT_EXPLICIT_RECIPIENT_REQUIRED');
|
|
131
|
+
if (spec.routerBalanceInput.minimumAmount !== undefined) {
|
|
132
|
+
// BALANCE_CHECK_ERC20 reads `owner` verbatim, so the router's real address is needed
|
|
133
|
+
invariant(!!spec.chainId, 'ROUTER_BALANCE_INPUT_MINIMUM_REQUIRES_CHAIN_ID');
|
|
134
|
+
}
|
|
135
|
+
const nativeBalanceInput = spec.routing.inputToken.isNative;
|
|
136
|
+
// Native input is funded as msg.value on execute() (raw transfers to the router
|
|
137
|
+
// revert) and must be wrapped in full before anything spends it, so the plan has to
|
|
138
|
+
// lead with a WRAP_ETH; the spender checks below then run against the wrapped token.
|
|
139
|
+
if (nativeBalanceInput) {
|
|
140
|
+
invariant(((_a = swapSteps[0]) === null || _a === void 0 ? void 0 : _a.type) === 'WRAP_ETH', 'ROUTER_BALANCE_INPUT_NATIVE_REQUIRES_WRAP');
|
|
141
|
+
}
|
|
142
|
+
// At least one step must spend the (wrapped) input token. Splits are
|
|
143
|
+
// allowed: the transform keeps every spender's quoted amount except the
|
|
144
|
+
// largest, which is rewritten to CONTRACT_BALANCE and moved last among the
|
|
145
|
+
// spenders (a v4 leg's spend is read from its input settle or swaps).
|
|
146
|
+
const balanceInputTokenAddress = nativeBalanceInput
|
|
147
|
+
? spec.routing.inputToken.wrapped.address
|
|
148
|
+
: getCurrencyAddress(spec.routing.inputToken);
|
|
149
|
+
const spendableSteps = nativeBalanceInput ? swapSteps.slice(1) : swapSteps;
|
|
150
|
+
const unwrapIndex = swapSteps.findIndex((step) => step.type === 'UNWRAP_WETH');
|
|
151
|
+
const unwrapDrainsInput = unwrapIndex >= 0 &&
|
|
152
|
+
!nativeBalanceInput &&
|
|
153
|
+
balanceInputTokenAddress.toLowerCase() === ((_b = WETH9[spec.routing.inputToken.chainId]) === null || _b === void 0 ? void 0 : _b.address.toLowerCase());
|
|
154
|
+
const spenderIndexes = spendableSteps
|
|
155
|
+
.map((step, index) => (stepSpendsToken(step, balanceInputTokenAddress) ? index : -1))
|
|
156
|
+
.filter((index) => index >= 0);
|
|
157
|
+
invariant(spenderIndexes.length > 0, 'ROUTER_BALANCE_INPUT_SPLIT_ROUTE');
|
|
158
|
+
// Shapes the rewrite cannot express. Checked here so both encode paths get a typed
|
|
159
|
+
// refusal; the transform keeps the same assertions as a backstop.
|
|
160
|
+
if (unwrapDrainsInput) {
|
|
161
|
+
const nativeSpenders = swapSteps.filter((step, index) => index > unwrapIndex && stepSpendsToken(step, ETH_ADDRESS));
|
|
162
|
+
invariant(nativeSpenders.length > 0, 'ROUTER_BALANCE_INPUT_UNWRAP_WITHOUT_NATIVE_LEG');
|
|
163
|
+
invariant(nativeSpenders.length === 1, 'ROUTER_BALANCE_INPUT_UNWRAP_MULTIPLE_NATIVE_LEGS');
|
|
164
|
+
}
|
|
165
|
+
// A split needs a comparable amount on every leg to pick the one that absorbs the
|
|
166
|
+
// variance; a sentinel or zero leg leaves the choice undefined.
|
|
167
|
+
const remainderCurrency = (unwrapDrainsInput ? ETH_ADDRESS : balanceInputTokenAddress).toLowerCase();
|
|
168
|
+
const remainderSpenders = swapSteps.filter((step) => stepSpendsToken(step, remainderCurrency));
|
|
169
|
+
if (remainderSpenders.length > 1) {
|
|
170
|
+
for (const step of remainderSpenders) {
|
|
171
|
+
const amount = stepSpendAmount(step, remainderCurrency);
|
|
172
|
+
invariant(amount.gt(0) && !amount.eq(CONTRACT_BALANCE), 'ROUTER_BALANCE_INPUT_SPLIT_LEG_AMOUNT_UNKNOWN');
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
for (const step of swapSteps) {
|
|
176
|
+
if (step.type !== 'V4_SWAP') {
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
const openDelta = step.v4Actions.filter((action) => isInputSwap(action, remainderCurrency) && v4SwapAmountIn(action).isZero());
|
|
180
|
+
invariant(openDelta.length <= 1, 'ROUTER_BALANCE_INPUT_MULTIPLE_OPEN_DELTA_SWAPS');
|
|
181
|
+
}
|
|
182
|
+
swapSteps.forEach((step, index) => {
|
|
183
|
+
invariant(step.type !== 'V2_SWAP_EXACT_OUT' && step.type !== 'V3_SWAP_EXACT_OUT', 'ROUTER_BALANCE_INPUT_EXACT_INPUT_ONLY');
|
|
184
|
+
// An exact-out action draws from the same settled balance but is invisible to the
|
|
185
|
+
// open-delta ordering, so the greedy leg can run first and starve it.
|
|
186
|
+
invariant(step.type !== 'V4_SWAP' ||
|
|
187
|
+
!step.v4Actions.some((action) => action.action === 'SWAP_EXACT_OUT' || action.action === 'SWAP_EXACT_OUT_SINGLE'), 'ROUTER_BALANCE_INPUT_EXACT_INPUT_ONLY');
|
|
188
|
+
// A wrap at hop 0 of an ERC20 plan means the plan expects native input. Wraps later
|
|
189
|
+
// in the plan are routers wrapping intermediate ETH (a v4 leg paid out native and the
|
|
190
|
+
// next leg wants WETH) and only touch what that leg produced.
|
|
191
|
+
invariant(step.type !== 'WRAP_ETH' || index > 0 || nativeBalanceInput, 'ROUTER_BALANCE_INPUT_NATIVE_INPUT');
|
|
192
|
+
// Native mode wraps the whole balance at hop 0, so a later leg that still expects raw
|
|
193
|
+
// ETH (routers can feed v4 pools native directly) would find nothing to spend.
|
|
194
|
+
invariant(!nativeBalanceInput || index === 0 || !stepSpendsToken(step, ETH_ADDRESS), 'ROUTER_BALANCE_INPUT_NATIVE_LEG_UNSUPPORTED');
|
|
195
|
+
// With WETH delivered, the unwrap is the greedy claim, so an input-token spender
|
|
196
|
+
// after it would find an empty balance.
|
|
197
|
+
invariant(!unwrapDrainsInput || index <= unwrapIndex || !stepSpendsToken(step, balanceInputTokenAddress), 'ROUTER_BALANCE_INPUT_WETH_LEG_AFTER_UNWRAP');
|
|
198
|
+
// The rewrite keeps the caller's v4 action order and turns the input settle into
|
|
199
|
+
// SETTLE(CONTRACT_BALANCE) with the swap on the open delta. A swap that runs before
|
|
200
|
+
// that settle has nothing to spend and reverts on-chain, so require settle first.
|
|
201
|
+
// (A step with no input settle gets one prepended by the rewrite.)
|
|
202
|
+
if (step.type === 'V4_SWAP' && stepSpendsToken(step, balanceInputTokenAddress)) {
|
|
203
|
+
const token = balanceInputTokenAddress.toLowerCase();
|
|
204
|
+
const settleIndex = step.v4Actions.findIndex((action) => isInputSettle(action, token));
|
|
205
|
+
const swapIndex = step.v4Actions.findIndex((action) => isInputSwap(action, token));
|
|
206
|
+
invariant(settleIndex < 0 || swapIndex < 0 || settleIndex < swapIndex, 'ROUTER_BALANCE_INPUT_V4_SETTLE_BEFORE_SWAP');
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
// An empty array is rejected rather than read as "no fee": silently paying nobody is the failure to prevent.
|
|
211
|
+
// Fee checks throw plain Errors, not tiny-invariant: invariant strips the
|
|
212
|
+
// message in production builds, and callers classify these by message.
|
|
213
|
+
const fees = toFeeList(spec.fee);
|
|
214
|
+
if (Array.isArray(spec.fee)) {
|
|
215
|
+
if (fees.length === 0)
|
|
216
|
+
throw new Error('AT_LEAST_ONE_FEE_RECIPIENT_REQUIRED');
|
|
217
|
+
if (fees.length > MAX_FEE_RECIPIENTS)
|
|
218
|
+
throw new Error('TOO_MANY_FEE_RECIPIENTS');
|
|
219
|
+
}
|
|
220
|
+
// Each portion fee means a fraction of the *gross* output, so later entries are rescaled
|
|
221
|
+
// against the router's shrinking balance at encode time. The rescaled portions are fractional
|
|
222
|
+
// bips, which only PAY_PORTION_FULL_PRECISION (>= v2.1.1) can represent, so multiple portion
|
|
223
|
+
// fees are therefore rejected on older router versions.
|
|
224
|
+
if (fees.filter((fee) => fee.kind === 'portion').length > 1 && !isAtLeastV2_1_1(spec.urVersion)) {
|
|
225
|
+
throw new Error('MULTIPLE_FEE_RECIPIENTS_REQUIRE_UR_V2_1_1');
|
|
226
|
+
}
|
|
227
|
+
// Per entry, so one bad entry is never averaged away, and a mixed portion/flat array trips one of these.
|
|
228
|
+
let flatFeeTotal = BigNumber.from(0);
|
|
229
|
+
for (const fee of fees) {
|
|
230
|
+
// portion fees pair with exact-input (% of variable output); flat fees pair with exact-output (fixed deduction from the target)
|
|
231
|
+
if (fee.kind === 'portion' && spec.tradeType !== TradeType.EXACT_INPUT) {
|
|
232
|
+
throw new Error('INVALID_PORTION_FEE_TRADE_TYPE');
|
|
233
|
+
}
|
|
234
|
+
if (fee.kind === 'flat' && spec.tradeType !== TradeType.EXACT_OUTPUT) {
|
|
235
|
+
throw new Error('INVALID_FLAT_FEE_TRADE_TYPE');
|
|
236
|
+
}
|
|
237
|
+
if (fee.kind === 'flat') {
|
|
238
|
+
flatFeeTotal = flatFeeTotal.add(BigNumber.from(fee.amount));
|
|
239
|
+
}
|
|
240
|
+
// v2.0 PAY_PORTION takes whole bps; fractional bps need >=v2.1.1's PAY_PORTION_FULL_PRECISION
|
|
241
|
+
// Any pre-2.1.1 version lacks PAY_PORTION_FULL_PRECISION, not just 2.0.
|
|
242
|
+
if (fee.kind === 'portion' && !isAtLeastV2_1_1(spec.urVersion) && !fee.fee.multiply(10000).remainder.equalTo(0)) {
|
|
243
|
+
throw new Error('FRACTIONAL_BPS_PORTION_FEE_UNSUPPORTED_ON_V2_0');
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// Each flat transfer is paid in full from the same balance, so it is the total that must fit.
|
|
247
|
+
if (flatFeeTotal.gt(BigNumber.from(spec.routing.amount.quotient.toString()))) {
|
|
248
|
+
throw new Error('FLAT_FEE_GT_AMOUNT');
|
|
249
|
+
}
|
|
250
|
+
// per-step: capability-gate by UR version, recipients must be router custody (or the spec
|
|
251
|
+
// recipient under allowDirectTransfers), per-hop arrays must match hop counts
|
|
252
|
+
// Router-balance funding rewrites the spender legs and clears any payerIsUser flag a
|
|
253
|
+
// wallet-mode router plan carried, so the flag is tolerated only on those legs.
|
|
254
|
+
const balanceInputAddress = spec.routerBalanceInput
|
|
255
|
+
? spec.routing.inputToken.isNative
|
|
256
|
+
? spec.routing.inputToken.wrapped.address
|
|
257
|
+
: getCurrencyAddress(spec.routing.inputToken)
|
|
258
|
+
: undefined;
|
|
259
|
+
for (const step of swapSteps) {
|
|
260
|
+
if (!spec.allowDirectTransfers) {
|
|
261
|
+
// The router-balance rewrite clears payerIsUser on the spender steps, so a flag a
|
|
262
|
+
// wallet-mode plan carried there is tolerated. The waiver is per-PULL, not
|
|
263
|
+
// per-step: a spender step may also carry a settle in some other currency, which
|
|
264
|
+
// the rewrite has no business funding, and excusing the whole step would let that
|
|
265
|
+
// settle reach the chain and pull the executing filler's balance via Permit2.
|
|
266
|
+
const rewrittenPulls = balanceInputAddress !== undefined &&
|
|
267
|
+
stepSpendsToken(step, balanceInputAddress) &&
|
|
268
|
+
stepUserPaidPulls(step).every((pull) => { var _a; return ((_a = pull.token) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === balanceInputAddress.toLowerCase(); });
|
|
269
|
+
invariant(!hasUserPaidFlag(step) || rewrittenPulls, 'PAYER_IS_USER_REQUIRES_DIRECT_TRANSFERS');
|
|
270
|
+
if (step.type === 'V4_SWAP') {
|
|
271
|
+
for (const action of step.v4Actions) {
|
|
272
|
+
invariant(action.action !== 'SETTLE_ALL', 'SETTLE_ALL_REQUIRES_DIRECT_TRANSFERS');
|
|
273
|
+
invariant(action.action !== 'TAKE_ALL', 'TAKE_ALL_REQUIRES_DIRECT_TRANSFERS');
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (spec.urVersion === UniversalRouterVersion.V2_0) {
|
|
278
|
+
invariant(!('minHopPriceX36' in step) || step.minHopPriceX36 === undefined, 'MIN_HOP_PRICE_X36_UNSUPPORTED_ON_V2_0');
|
|
279
|
+
invariant(!(step.type === 'V4_SWAP' && step.v4Actions.some(hasV4MinHopPriceX36)), 'MIN_HOP_PRICE_X36_UNSUPPORTED_ON_V2_0');
|
|
280
|
+
}
|
|
281
|
+
switch (step.type) {
|
|
282
|
+
case 'V2_SWAP_EXACT_IN':
|
|
283
|
+
case 'V2_SWAP_EXACT_OUT':
|
|
284
|
+
checkRecipient(spec, step.recipient, 'STEP_RECIPIENT_MUST_BE_ROUTER');
|
|
285
|
+
invariant(!step.minHopPriceX36 || step.minHopPriceX36.length === step.path.length - 1, 'V2_MIN_HOP_PRICE_X36_LENGTH_MISMATCH');
|
|
286
|
+
break;
|
|
287
|
+
case 'V3_SWAP_EXACT_IN':
|
|
288
|
+
case 'V3_SWAP_EXACT_OUT': {
|
|
289
|
+
checkRecipient(spec, step.recipient, 'STEP_RECIPIENT_MUST_BE_ROUTER');
|
|
290
|
+
const hopCount = getV3HopCount(step.path);
|
|
291
|
+
invariant(hopCount === undefined || !step.minHopPriceX36 || step.minHopPriceX36.length === hopCount, 'V3_MIN_HOP_PRICE_X36_LENGTH_MISMATCH');
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
case 'WRAP_ETH':
|
|
295
|
+
// router-only in both regimes: this is the input-side transition, not an outbound payout
|
|
296
|
+
assertRouterRecipient(step.recipient);
|
|
297
|
+
break;
|
|
298
|
+
case 'UNWRAP_WETH':
|
|
299
|
+
checkRecipient(spec, step.recipient, 'STEP_RECIPIENT_MUST_BE_ROUTER');
|
|
300
|
+
break;
|
|
301
|
+
case 'V4_SWAP':
|
|
302
|
+
validateV4HopCounts(step.v4Actions);
|
|
303
|
+
validateV4HookData(step.v4Actions);
|
|
304
|
+
validateV4Recipients(step.v4Actions, spec);
|
|
305
|
+
break;
|
|
306
|
+
default:
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
// inbound budget: user-paid pulls must be concrete input-token amounts whose combined
|
|
311
|
+
// maxima fit within exactOrMaxAmountIn; the encoder then ingresses only the remainder,
|
|
312
|
+
// so total user outflow can never exceed the spec's input
|
|
313
|
+
if (spec.allowDirectTransfers && swapSteps.some((step) => stepUserPaidPulls(step).length > 0)) {
|
|
314
|
+
// permit2-based direct pulls need a plain ERC20 input owned by the tx sender
|
|
315
|
+
invariant(!spec.routing.inputToken.isNative, 'DIRECT_TRANSFERS_NATIVE_INPUT');
|
|
316
|
+
invariant(!spec.nativeErc20Input, 'DIRECT_TRANSFERS_NATIVE_ERC20_INPUT');
|
|
317
|
+
invariant(spec.tokenTransferMode === TokenTransferMode.Permit2, 'DIRECT_TRANSFERS_REQUIRES_PERMIT2');
|
|
318
|
+
const { exactOrMaxAmountIn } = computeEncodeSwapsAmounts(spec);
|
|
319
|
+
const inputTokenAddress = getCurrencyAddress(spec.routing.inputToken).toLowerCase();
|
|
320
|
+
let userPaidTotal = BigNumber.from(0);
|
|
321
|
+
swapSteps.forEach((step, stepIndex) => {
|
|
322
|
+
for (const pull of stepUserPaidPulls(step)) {
|
|
323
|
+
// concrete amounts only: bans ALREADY_PAID/OPEN_DELTA (0), CONTRACT_BALANCE (2^255),
|
|
324
|
+
// and anything permit2's uint160 cannot move
|
|
325
|
+
invariant(pull.maxAmount.gt(0) && pull.maxAmount.lte(MAX_UINT160), `USER_PAID_AMOUNT_OUT_OF_RANGE (step ${stepIndex})`);
|
|
326
|
+
invariant(typeof pull.token === 'string', `USER_PAID_MALFORMED_PATH (step ${stepIndex})`);
|
|
327
|
+
invariant(pull.token.toLowerCase() === inputTokenAddress, `USER_PAID_INPUT_TOKEN_MISMATCH (step ${stepIndex})`);
|
|
328
|
+
userPaidTotal = userPaidTotal.add(pull.maxAmount);
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
invariant(userPaidTotal.lte(exactOrMaxAmountIn), 'USER_PAID_EXCEEDS_MAX_INPUT');
|
|
332
|
+
// keeps the permit2 allowance an on-chain outer ceiling equal to the budget
|
|
333
|
+
if (spec.permit) {
|
|
334
|
+
invariant(spec.permit.details.token.toLowerCase() === inputTokenAddress, 'PERMIT_TOKEN_MISMATCH');
|
|
335
|
+
invariant(BigNumber.from(spec.permit.details.amount).gte(exactOrMaxAmountIn), 'PERMIT_AMOUNT_INSUFFICIENT');
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=validateEncodeSwaps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateEncodeSwaps.js","sourceRoot":"","sources":["../../../../src/utils/validateEncodeSwaps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { RoutePlanner } from '../utils/routerCommands';
|
|
2
|
+
export type TradeConfig = {
|
|
3
|
+
allowRevert: boolean;
|
|
4
|
+
};
|
|
5
|
+
export declare enum RouterActionType {
|
|
6
|
+
UniswapTrade = "UniswapTrade",
|
|
7
|
+
UnwrapWETH = "UnwrapWETH"
|
|
8
|
+
}
|
|
9
|
+
export interface Command {
|
|
10
|
+
tradeType: RouterActionType;
|
|
11
|
+
encode(planner: RoutePlanner, config: TradeConfig): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=Command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../../src/entities/Command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,oBAAY,gBAAgB;IAC1B,YAAY,iBAAiB;IAC7B,UAAU,eAAe;CAC1B;AAGD,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,gBAAgB,CAAA;IAC3B,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CACzD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BigNumberish } from '@ethersproject/bignumber';
|
|
2
|
+
/**
|
|
3
|
+
* Parameters for Across V4 Deposit V3 command
|
|
4
|
+
* Used for cross-chain bridging via Across Protocol V3 SpokePool
|
|
5
|
+
*/
|
|
6
|
+
export type AcrossV4DepositV3Params = {
|
|
7
|
+
depositor: string;
|
|
8
|
+
recipient: string;
|
|
9
|
+
inputToken: string;
|
|
10
|
+
outputToken: string;
|
|
11
|
+
inputAmount: BigNumberish;
|
|
12
|
+
outputAmount: BigNumberish;
|
|
13
|
+
destinationChainId: number;
|
|
14
|
+
exclusiveRelayer: string;
|
|
15
|
+
quoteTimestamp: number;
|
|
16
|
+
fillDeadline: number;
|
|
17
|
+
exclusivityDeadline: number;
|
|
18
|
+
message: string;
|
|
19
|
+
useNative: boolean;
|
|
20
|
+
};
|
|
21
|
+
export { CONTRACT_BALANCE } from '../../utils/constants';
|
|
22
|
+
//# sourceMappingURL=across.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"across.d.ts","sourceRoot":"","sources":["../../../../../src/entities/actions/across.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,YAAY,CAAA;IACzB,YAAY,EAAE,YAAY,CAAA;IAC1B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAGD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/entities/actions/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { RoutePlanner } from '../../utils/routerCommands';
|
|
2
|
+
import { FeeOptions } from '@kittycorn-labs/v3-sdk';
|
|
3
|
+
import { Trade as RouterTrade, SwapOptions as RouterSwapOptions } from '@kittycorn-labs/router-sdk';
|
|
4
|
+
import { Permit2Permit } from '../../utils/inputTokens';
|
|
5
|
+
import { Currency, TradeType } from '@kittycorn-labs/sdk-core';
|
|
6
|
+
import { Command, RouterActionType, TradeConfig } from '../Command';
|
|
7
|
+
import { UniversalRouterVersion } from '../../utils/constants';
|
|
8
|
+
import { BigNumberish } from '@ethersproject/bignumber';
|
|
9
|
+
export type FlatFeeOptions = {
|
|
10
|
+
amount: BigNumberish;
|
|
11
|
+
recipient: string;
|
|
12
|
+
};
|
|
13
|
+
export declare const MAX_FEE_RECIPIENTS = 4;
|
|
14
|
+
export declare enum TokenTransferMode {
|
|
15
|
+
Permit2 = "Permit2",
|
|
16
|
+
ApproveProxy = "ApproveProxy"
|
|
17
|
+
}
|
|
18
|
+
export type RouterBalanceInput = {
|
|
19
|
+
/**
|
|
20
|
+
* Optional floor on the router's input-token balance, enforced by a `BALANCE_CHECK_ERC20`
|
|
21
|
+
* command before any swap runs, so an under-funded router reverts up front rather than
|
|
22
|
+
* swapping a short amount. Use when the funding amount is guaranteed by the caller.
|
|
23
|
+
*
|
|
24
|
+
* This is a distinct guarantee from `slippageTolerance`: the trade-level minimum output
|
|
25
|
+
* only catches a shortfall large enough to breach it, so a wide tolerance can let an
|
|
26
|
+
* under-delivery through. This bounds the input side directly.
|
|
27
|
+
*/
|
|
28
|
+
minimumAmount?: BigNumberish;
|
|
29
|
+
};
|
|
30
|
+
export type SwapOptions = Omit<RouterSwapOptions, 'inputTokenPermit' | 'fee'> & {
|
|
31
|
+
/** Each entry's fee is a fraction of the GROSS output (the SDK rescales later entries); >1 entry needs urVersion >= V2_1_1, and flatFee is mutually exclusive. */
|
|
32
|
+
fee?: FeeOptions | FeeOptions[];
|
|
33
|
+
useRouterBalance?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* The input Token is the chain's native gas token exposed via an ERC20 predeploy whose balance
|
|
36
|
+
* mirrors the native balance (e.g. USDC on Arc). The swap is funded by attaching
|
|
37
|
+
* msg.value = maximumAmountIn * 10^(18 - token.decimals) instead of pulling via Permit2:
|
|
38
|
+
* the router self-funds (payerIsUser = false) and unused input is swept back to the recipient
|
|
39
|
+
* on exact-output / partial-fill-risk trades. No ERC20 approval or permit is ever needed.
|
|
40
|
+
* Incompatible with native input, inputTokenPermit, and TokenTransferMode.ApproveProxy.
|
|
41
|
+
*/
|
|
42
|
+
nativeErc20Input?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Fund the swap from the Universal Router's own balance of the input token, spending
|
|
45
|
+
* whatever it holds at execution time rather than pulling a fixed amount from a payer
|
|
46
|
+
* (`payerIsUser = false`, first hop encoded as `CONTRACT_BALANCE`).
|
|
47
|
+
*
|
|
48
|
+
* This is for flows where the router is funded by a third party in the same transaction
|
|
49
|
+
* and the delivered amount is not known when the calldata is built, e.g. a bridge filler
|
|
50
|
+
* that deposits into the router and swaps atomically. Distinct from `useRouterBalance`,
|
|
51
|
+
* which keeps the fixed quoted `amountIn`.
|
|
52
|
+
*
|
|
53
|
+
* Requires an explicit `recipient` (the caller of `execute()` is not the beneficiary)
|
|
54
|
+
* and `TradeType.EXACT_INPUT` on a single (non-split) route. Supported for v2, v3, v4
|
|
55
|
+
* and mixed routes. A native input is funded by attaching msg.value to `execute()`
|
|
56
|
+
* (raw transfers to the router revert) and is wrapped in full via
|
|
57
|
+
* `WRAP_ETH(CONTRACT_BALANCE)`, with a trailing ETH dust sweep to the recipient; it
|
|
58
|
+
* requires a route that wraps, so pure-native v4 routes are unsupported.
|
|
59
|
+
* Incompatible with `inputTokenPermit`, `nativeErc20Input`, and
|
|
60
|
+
* `TokenTransferMode.ApproveProxy`.
|
|
61
|
+
*/
|
|
62
|
+
routerBalanceInput?: RouterBalanceInput;
|
|
63
|
+
/**
|
|
64
|
+
* Hook addresses whose pools need the swap input already in the PoolManager when the
|
|
65
|
+
* hook runs, e.g. ERC-4626 wrapper hooks that `take` the input inside `beforeSwap` to
|
|
66
|
+
* deposit it into a vault. A v4 route through any of these hooks is encoded as
|
|
67
|
+
* `SETTLE(amountIn)` then a swap on the open delta, the order mixed-route v4 sections
|
|
68
|
+
* already use, instead of settling after the swap. The swap spends what actually arrived,
|
|
69
|
+
* so an input token whose transfers round down cannot leave an unsettled delta.
|
|
70
|
+
* Exact-input only: an exact-output route through one of these hooks is refused.
|
|
71
|
+
* Matching is case-insensitive.
|
|
72
|
+
*/
|
|
73
|
+
settleBeforeSwapHooks?: string[];
|
|
74
|
+
inputTokenPermit?: Permit2Permit;
|
|
75
|
+
flatFee?: FlatFeeOptions;
|
|
76
|
+
safeMode?: boolean;
|
|
77
|
+
urVersion?: UniversalRouterVersion;
|
|
78
|
+
tokenTransferMode?: TokenTransferMode;
|
|
79
|
+
chainId?: number;
|
|
80
|
+
};
|
|
81
|
+
export declare class UniswapTrade implements Command {
|
|
82
|
+
trade: RouterTrade<Currency, Currency, TradeType>;
|
|
83
|
+
options: SwapOptions;
|
|
84
|
+
readonly tradeType: RouterActionType;
|
|
85
|
+
readonly payerIsUser: boolean;
|
|
86
|
+
constructor(trade: RouterTrade<Currency, Currency, TradeType>, options: SwapOptions);
|
|
87
|
+
get isAllV4(): boolean;
|
|
88
|
+
get inputRequiresWrap(): boolean;
|
|
89
|
+
get inputRequiresUnwrap(): boolean;
|
|
90
|
+
get outputRequiresWrap(): boolean;
|
|
91
|
+
get outputRequiresUnwrap(): boolean;
|
|
92
|
+
get outputRequiresTransition(): boolean;
|
|
93
|
+
encode(planner: RoutePlanner, _config: TradeConfig): void;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=uniswap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uniswap.d.ts","sourceRoot":"","sources":["../../../../../src/entities/actions/uniswap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAe,MAAM,4BAA4B,CAAA;AAEtE,OAAO,EAAuD,UAAU,EAAE,MAAM,wBAAwB,CAAA;AASxG,OAAO,EACL,KAAK,IAAI,WAAW,EAQpB,WAAW,IAAI,iBAAiB,EAIjC,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAGvD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAkC,MAAM,0BAA0B,CAAA;AAC9F,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EAKL,sBAAsB,EAGvB,MAAM,uBAAuB,CAAA;AAI9B,OAAO,EAAa,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGlE,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAGD,eAAO,MAAM,kBAAkB,IAAI,CAAA;AAMnC,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,YAAY,iBAAiB;CAC9B;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,YAAY,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,GAAG,KAAK,CAAC,GAAG;IAC9E,kKAAkK;IAClK,GAAG,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAA;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;;;;;;;;;;;;;;;OAkBG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC;;;;;;;;;OASG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;IAChC,gBAAgB,CAAC,EAAE,aAAa,CAAA;IAChC,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,sBAAsB,CAAA;IAClC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAoBD,qBAAa,YAAa,YAAW,OAAO;IAIvB,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;IAAS,OAAO,EAAE,WAAW;IAHjG,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAgC;IACpE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;gBAEV,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAS,OAAO,EAAE,WAAW;IAgHjG,IAAI,OAAO,IAAI,OAAO,CAMrB;IASD,IAAI,iBAAiB,IAAI,OAAO,CAc/B;IAED,IAAI,mBAAmB,IAAI,OAAO,CAcjC;IAED,IAAI,kBAAkB,IAAI,OAAO,CA8BhC;IAED,IAAI,oBAAoB,IAAI,OAAO,CA2BlC;IAED,IAAI,wBAAwB,IAAI,OAAO,CAEtC;IAED,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;CAyN1D"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BigNumberish } from '@ethersproject/bignumber';
|
|
2
|
+
import { RoutePlanner } from '../../utils/routerCommands';
|
|
3
|
+
import { Permit2Permit } from '../../utils/inputTokens';
|
|
4
|
+
import { Command, RouterActionType, TradeConfig } from '../Command';
|
|
5
|
+
export declare class UnwrapWETH implements Command {
|
|
6
|
+
readonly tradeType: RouterActionType;
|
|
7
|
+
readonly permit2Data?: Permit2Permit;
|
|
8
|
+
readonly wethAddress: string;
|
|
9
|
+
readonly amount: BigNumberish;
|
|
10
|
+
constructor(amount: BigNumberish, chainId: number, permit2?: Permit2Permit);
|
|
11
|
+
encode(planner: RoutePlanner, _: TradeConfig): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=unwrapWETH.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unwrapWETH.d.ts","sourceRoot":"","sources":["../../../../../src/entities/actions/unwrapWETH.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAe,MAAM,4BAA4B,CAAA;AACtE,OAAO,EAA2B,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAChF,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGnE,qBAAa,UAAW,YAAW,OAAO;IACxC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAA8B;IAClE,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAA;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;gBAEjB,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa;IAc1E,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,GAAG,IAAI;CAUpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export { SwapRouter } from './swapRouter';
|
|
2
|
+
export type { MigrateV3ToV4Options, SignedRouteOptions, EIP712Payload } from './swapRouter';
|
|
3
|
+
export * from './types/encodeSwaps';
|
|
4
|
+
export * from './entities';
|
|
5
|
+
export * from './utils/routerTradeAdapter';
|
|
6
|
+
export { RoutePlanner, CommandType, COMMAND_DEFINITION, Parser, Subparser } from './utils/routerCommands';
|
|
7
|
+
export type { CommandDefinition, ParamType } from './utils/routerCommands';
|
|
8
|
+
export { UNIVERSAL_ROUTER_CREATION_BLOCK, UNIVERSAL_ROUTER_ADDRESS, SWAP_PROXY_ADDRESS, ROUTER_AS_RECIPIENT, WETH_ADDRESS, UniversalRouterVersion, isAtLeastV2_1_1, } from './utils/constants';
|
|
9
|
+
export { CommandParser, GenericCommandParser } from './utils/commandParser';
|
|
10
|
+
export type { UniversalRouterCommand, UniversalRouterCall, Param, CommandsDefinition } from './utils/commandParser';
|
|
11
|
+
export type { Permit2Permit } from './utils/inputTokens';
|
|
12
|
+
export { normalizeEncodeSwapsSpec } from './utils/normalizeEncodeSwapsSpec';
|
|
13
|
+
export { computeEncodeSwapsAmounts } from './utils/computeEncodeSwapsAmounts';
|
|
14
|
+
export type { EncodeSwapsAmounts } from './utils/computeEncodeSwapsAmounts';
|
|
15
|
+
export { validateEncodeSwaps } from './utils/validateEncodeSwaps';
|
|
16
|
+
export { scalePortionFees, simulatePortionFeeDeduction } from './utils/portionFees';
|
|
17
|
+
export type { ScaledPortionFee } from './utils/portionFees';
|
|
18
|
+
export { NONCE_SKIP_CHECK, generateNonce, EXECUTE_SIGNED_TYPES, getUniversalRouterDomain } from './utils/eip712';
|
|
19
|
+
export * from "./kittycorn";
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC3F,cAAc,qBAAqB,CAAA;AACnC,cAAc,YAAY,CAAA;AAC1B,cAAc,4BAA4B,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACzG,YAAY,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,sBAAsB,EACtB,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC3E,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACnH,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,YAAY,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AACnF,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AAEhH,cAAc,aAAa,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Currency, TradeType } from '@kittycorn-labs/sdk-core';
|
|
2
|
+
import { Trade, KittycornSwapOptions, KittycornMethodParameters } from '@kittycorn-labs/router-sdk';
|
|
3
|
+
/** Base Sepolia's Kittycorn extension. The Universal Router address is supplied after deployment. */
|
|
4
|
+
export type KittycornUniversalSwapOptions = KittycornSwapOptions & {
|
|
5
|
+
universalRouter: string;
|
|
6
|
+
deadline: number;
|
|
7
|
+
};
|
|
8
|
+
/** Wrap the same V4 action plan in Permit2 funding and an on-chain deadline. */
|
|
9
|
+
export declare function buildKittycornUniversalMethodParameters(trade: Trade<Currency, Currency, TradeType>, options: KittycornUniversalSwapOptions, chainId: number): KittycornMethodParameters;
|
|
10
|
+
//# sourceMappingURL=kittycorn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kittycorn.d.ts","sourceRoot":"","sources":["../../../src/kittycorn.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EACL,KAAK,EAEL,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4BAA4B,CAAA;AAEnC,qGAAqG;AACrG,MAAM,MAAM,6BAA6B,GAAG,oBAAoB,GAAG;IACjE,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,gFAAgF;AAChF,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAC3C,OAAO,EAAE,6BAA6B,EACtC,OAAO,EAAE,MAAM,GACd,yBAAyB,CAoB3B"}
|