@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,80 @@
|
|
|
1
|
+
import { Actions } from '@kittycorn-labs/v4-sdk';
|
|
2
|
+
import { isAtLeastV2_1_1 } from './constants.js';
|
|
3
|
+
const ACTION_NAME_TO_ENUM = Object.fromEntries(Object.entries(Actions).filter(([key]) => isNaN(Number(key))));
|
|
4
|
+
export function encodeV4Action(v4Action, urVersion) {
|
|
5
|
+
var _a, _b, _c, _d;
|
|
6
|
+
const action = ACTION_NAME_TO_ENUM[v4Action.action];
|
|
7
|
+
if (action === undefined)
|
|
8
|
+
throw new Error(`Unknown V4 action: ${v4Action.action}`);
|
|
9
|
+
const useV2_1_1 = isAtLeastV2_1_1(urVersion);
|
|
10
|
+
switch (v4Action.action) {
|
|
11
|
+
case 'SWAP_EXACT_IN':
|
|
12
|
+
return {
|
|
13
|
+
action,
|
|
14
|
+
params: [
|
|
15
|
+
{
|
|
16
|
+
currencyIn: v4Action.currencyIn,
|
|
17
|
+
path: v4Action.path,
|
|
18
|
+
...(useV2_1_1 && { minHopPriceX36: (_a = v4Action.minHopPriceX36) !== null && _a !== void 0 ? _a : [] }),
|
|
19
|
+
amountIn: v4Action.amountIn,
|
|
20
|
+
amountOutMinimum: v4Action.amountOutMinimum,
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
};
|
|
24
|
+
case 'SWAP_EXACT_IN_SINGLE':
|
|
25
|
+
return {
|
|
26
|
+
action,
|
|
27
|
+
params: [
|
|
28
|
+
{
|
|
29
|
+
poolKey: v4Action.poolKey,
|
|
30
|
+
zeroForOne: v4Action.zeroForOne,
|
|
31
|
+
amountIn: v4Action.amountIn,
|
|
32
|
+
amountOutMinimum: v4Action.amountOutMinimum,
|
|
33
|
+
...(useV2_1_1 && { minHopPriceX36: (_b = v4Action.minHopPriceX36) !== null && _b !== void 0 ? _b : 0 }),
|
|
34
|
+
hookData: v4Action.hookData,
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
};
|
|
38
|
+
case 'SWAP_EXACT_OUT':
|
|
39
|
+
return {
|
|
40
|
+
action,
|
|
41
|
+
params: [
|
|
42
|
+
{
|
|
43
|
+
currencyOut: v4Action.currencyOut,
|
|
44
|
+
path: v4Action.path,
|
|
45
|
+
...(useV2_1_1 && { minHopPriceX36: (_c = v4Action.minHopPriceX36) !== null && _c !== void 0 ? _c : [] }),
|
|
46
|
+
amountOut: v4Action.amountOut,
|
|
47
|
+
amountInMaximum: v4Action.amountInMaximum,
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
};
|
|
51
|
+
case 'SWAP_EXACT_OUT_SINGLE':
|
|
52
|
+
return {
|
|
53
|
+
action,
|
|
54
|
+
params: [
|
|
55
|
+
{
|
|
56
|
+
poolKey: v4Action.poolKey,
|
|
57
|
+
zeroForOne: v4Action.zeroForOne,
|
|
58
|
+
amountOut: v4Action.amountOut,
|
|
59
|
+
amountInMaximum: v4Action.amountInMaximum,
|
|
60
|
+
...(useV2_1_1 && { minHopPriceX36: (_d = v4Action.minHopPriceX36) !== null && _d !== void 0 ? _d : 0 }),
|
|
61
|
+
hookData: v4Action.hookData,
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
};
|
|
65
|
+
case 'SETTLE':
|
|
66
|
+
// payerIsUser defaults to false (router custody); validateEncodeSwaps gates when true is allowed
|
|
67
|
+
return { action, params: [v4Action.currency, v4Action.amount, v4Action.payerIsUser === true] };
|
|
68
|
+
case 'SETTLE_ALL':
|
|
69
|
+
return { action, params: [v4Action.currency, v4Action.maxAmount] };
|
|
70
|
+
case 'TAKE':
|
|
71
|
+
return { action, params: [v4Action.currency, v4Action.recipient, v4Action.amount] };
|
|
72
|
+
case 'TAKE_ALL':
|
|
73
|
+
return { action, params: [v4Action.currency, v4Action.minAmount] };
|
|
74
|
+
case 'TAKE_PORTION':
|
|
75
|
+
return { action, params: [v4Action.currency, v4Action.recipient, v4Action.bips] };
|
|
76
|
+
default:
|
|
77
|
+
throw new Error(`Unhandled V4 action: ${v4Action.action}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=encodeV4Action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encodeV4Action.js","sourceRoot":"","sources":["../../../../src/utils/encodeV4Action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCurrencyAddress.js","sourceRoot":"","sources":["../../../../src/utils/getCurrencyAddress.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,UAAU,kBAAkB,CAAC,QAAkB;IACnD,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAA;AACnE,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BigintIsh } from '@kittycorn-labs/sdk-core';
|
|
2
|
+
import { NFTPermitOptions } from '@kittycorn-labs/v3-sdk';
|
|
3
|
+
import { PermitSingle } from '@uniswap/permit2-sdk';
|
|
4
|
+
import { RoutePlanner } from './routerCommands';
|
|
5
|
+
export interface Permit2Permit extends PermitSingle {
|
|
6
|
+
signature: string;
|
|
7
|
+
}
|
|
8
|
+
export type ApproveProtocol = {
|
|
9
|
+
token: string;
|
|
10
|
+
protocol: string;
|
|
11
|
+
};
|
|
12
|
+
export type Permit2TransferFrom = {
|
|
13
|
+
token: string;
|
|
14
|
+
amount: string;
|
|
15
|
+
recipient?: string;
|
|
16
|
+
};
|
|
17
|
+
export type InputTokenOptions = {
|
|
18
|
+
permit2Permit?: Permit2Permit;
|
|
19
|
+
permit2TransferFrom?: Permit2TransferFrom;
|
|
20
|
+
};
|
|
21
|
+
export declare function encodePermit(planner: RoutePlanner, permit2: Permit2Permit): void;
|
|
22
|
+
export declare function encodeV3PositionPermit(planner: RoutePlanner, permit: NFTPermitOptions, tokenId: BigintIsh): void;
|
|
23
|
+
export declare function encodeInputTokenOptions(planner: RoutePlanner, options: InputTokenOptions): void;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import invariant from 'tiny-invariant';
|
|
2
|
+
import { arrayify, joinSignature, splitSignature } from '@ethersproject/bytes';
|
|
3
|
+
import { validateAndParseAddress } from '@kittycorn-labs/sdk-core';
|
|
4
|
+
import { NonfungiblePositionManager } from '@kittycorn-labs/v3-sdk';
|
|
5
|
+
import { CommandType } from './routerCommands.js';
|
|
6
|
+
import { ROUTER_AS_RECIPIENT } from './constants.js';
|
|
7
|
+
const SIGNATURE_LENGTH = 65;
|
|
8
|
+
const EIP_2098_SIGNATURE_LENGTH = 64;
|
|
9
|
+
export function encodePermit(planner, permit2) {
|
|
10
|
+
let signature = permit2.signature;
|
|
11
|
+
const length = arrayify(permit2.signature).length;
|
|
12
|
+
// signature data provided for EIP-1271 may have length different from ECDSA signature
|
|
13
|
+
if (length === SIGNATURE_LENGTH || length === EIP_2098_SIGNATURE_LENGTH) {
|
|
14
|
+
// sanitizes signature to cover edge cases of malformed EIP-2098 sigs and v used as recovery id
|
|
15
|
+
signature = joinSignature(splitSignature(permit2.signature));
|
|
16
|
+
}
|
|
17
|
+
planner.addCommand(CommandType.PERMIT2_PERMIT, [permit2, signature]);
|
|
18
|
+
}
|
|
19
|
+
export function encodeV3PositionPermit(planner, permit, tokenId) {
|
|
20
|
+
const calldata = NonfungiblePositionManager.INTERFACE.encodeFunctionData('permit', [
|
|
21
|
+
validateAndParseAddress(permit.spender),
|
|
22
|
+
tokenId,
|
|
23
|
+
permit.deadline,
|
|
24
|
+
permit.v,
|
|
25
|
+
permit.r,
|
|
26
|
+
permit.s,
|
|
27
|
+
]);
|
|
28
|
+
planner.addCommand(CommandType.V3_POSITION_MANAGER_PERMIT, [calldata]);
|
|
29
|
+
}
|
|
30
|
+
// Handles the encoding of commands needed to gather input tokens for a trade
|
|
31
|
+
// Approval: The router approving another address to take tokens.
|
|
32
|
+
// note: Only seaport and sudoswap support this action. Approvals are left open.
|
|
33
|
+
// Permit: A Permit2 signature-based Permit to allow the router to access a user's tokens
|
|
34
|
+
// Transfer: A Permit2 TransferFrom of tokens from a user to either the router or another address
|
|
35
|
+
export function encodeInputTokenOptions(planner, options) {
|
|
36
|
+
// first ensure that all tokens provided for encoding are the same
|
|
37
|
+
if (!!options.permit2TransferFrom && !!options.permit2Permit)
|
|
38
|
+
invariant(options.permit2TransferFrom.token === options.permit2Permit.details.token, `inconsistent token`);
|
|
39
|
+
// if this order has a options.permit2Permit, encode it
|
|
40
|
+
if (!!options.permit2Permit) {
|
|
41
|
+
encodePermit(planner, options.permit2Permit);
|
|
42
|
+
}
|
|
43
|
+
if (!!options.permit2TransferFrom) {
|
|
44
|
+
planner.addCommand(CommandType.PERMIT2_TRANSFER_FROM, [
|
|
45
|
+
options.permit2TransferFrom.token,
|
|
46
|
+
options.permit2TransferFrom.recipient ? options.permit2TransferFrom.recipient : ROUTER_AS_RECIPIENT,
|
|
47
|
+
options.permit2TransferFrom.amount,
|
|
48
|
+
]);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=inputTokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputTokens.js","sourceRoot":"","sources":["../../../../src/utils/inputTokens.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC9E,OAAO,EAAE,uBAAuB,EAAa,MAAM,0BAA0B,CAAA;AAC7E,OAAO,EAAoB,0BAA0B,EAAE,MAAM,wBAAwB,CAAA;AAErF,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAsBjD,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAC3B,MAAM,yBAAyB,GAAG,EAAE,CAAA;AAEpC,MAAM,UAAU,YAAY,CAAC,OAAqB,EAAE,OAAsB;IACxE,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IAEjC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAA;IACjD,sFAAsF;IACtF,IAAI,MAAM,KAAK,gBAAgB,IAAI,MAAM,KAAK,yBAAyB,EAAE;QACvE,+FAA+F;QAC/F,SAAS,GAAG,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;KAC7D;IAED,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;AACtE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAqB,EAAE,MAAwB,EAAE,OAAkB;IACxG,MAAM,QAAQ,GAAG,0BAA0B,CAAC,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE;QACjF,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC;QACvC,OAAO;QACP,MAAM,CAAC,QAAQ;QACf,MAAM,CAAC,CAAC;QACR,MAAM,CAAC,CAAC;QACR,MAAM,CAAC,CAAC;KACT,CAAC,CAAA;IAEF,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,0BAA0B,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;AACxE,CAAC;AAED,6EAA6E;AAC7E,iEAAiE;AACjE,kFAAkF;AAClF,yFAAyF;AACzF,iGAAiG;AACjG,MAAM,UAAU,uBAAuB,CAAC,OAAqB,EAAE,OAA0B;IACvF,kEAAkE;IAClE,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa;QAC1D,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,KAAK,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAA;IAE5G,uDAAuD;IACvD,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE;QAC3B,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;KAC7C;IAED,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE;QACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,qBAAqB,EAAE;YACpD,OAAO,CAAC,mBAAmB,CAAC,KAAK;YACjC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB;YACnG,OAAO,CAAC,mBAAmB,CAAC,MAAM;SACnC,CAAC,CAAA;KACH;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Fee, FlatFee, NormalizedSwapSpecification, PortionFee, SwapSpecification } from '../types/encodeSwaps';
|
|
2
|
+
export declare function normalizeEncodeSwapsSpec(spec: SwapSpecification): NormalizedSwapSpecification;
|
|
3
|
+
/** A lone `Fee` becomes a one-element list, so every read site handles multiple recipients by construction. */
|
|
4
|
+
export declare function toFeeList(fee: SwapSpecification['fee']): Fee[];
|
|
5
|
+
export declare function toPortionFeeList(fee: SwapSpecification['fee']): PortionFee[];
|
|
6
|
+
export declare function toFlatFeeList(fee: SwapSpecification['fee']): FlatFee[];
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { TokenTransferMode } from '../entities/actions/uniswap.js';
|
|
2
|
+
import { DEFAULT_UR_VERSION, SENDER_AS_RECIPIENT } from './constants.js';
|
|
3
|
+
// Fills the five optional fields that `validateEncodeSwaps` and `computeEncodeSwapsAmounts` require.
|
|
4
|
+
export function normalizeEncodeSwapsSpec(spec) {
|
|
5
|
+
var _a, _b, _c, _d, _e;
|
|
6
|
+
return {
|
|
7
|
+
...spec,
|
|
8
|
+
recipient: (_a = spec.recipient) !== null && _a !== void 0 ? _a : SENDER_AS_RECIPIENT,
|
|
9
|
+
tokenTransferMode: (_b = spec.tokenTransferMode) !== null && _b !== void 0 ? _b : TokenTransferMode.Permit2,
|
|
10
|
+
urVersion: (_c = spec.urVersion) !== null && _c !== void 0 ? _c : DEFAULT_UR_VERSION,
|
|
11
|
+
safeMode: (_d = spec.safeMode) !== null && _d !== void 0 ? _d : false,
|
|
12
|
+
allowDirectTransfers: (_e = spec.allowDirectTransfers) !== null && _e !== void 0 ? _e : false,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/** A lone `Fee` becomes a one-element list, so every read site handles multiple recipients by construction. */
|
|
16
|
+
export function toFeeList(fee) {
|
|
17
|
+
if (!fee)
|
|
18
|
+
return [];
|
|
19
|
+
return Array.isArray(fee) ? fee : [fee];
|
|
20
|
+
}
|
|
21
|
+
export function toPortionFeeList(fee) {
|
|
22
|
+
return toFeeList(fee).filter((entry) => entry.kind === 'portion');
|
|
23
|
+
}
|
|
24
|
+
export function toFlatFeeList(fee) {
|
|
25
|
+
return toFeeList(fee).filter((entry) => entry.kind === 'flat');
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=normalizeEncodeSwapsSpec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeEncodeSwapsSpec.js","sourceRoot":"","sources":["../../../../src/utils/normalizeEncodeSwapsSpec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAE/D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAErE,qGAAqG;AACrG,MAAM,UAAU,wBAAwB,CAAC,IAAuB;;IAC9D,OAAO;QACL,GAAG,IAAI;QACP,SAAS,EAAE,MAAA,IAAI,CAAC,SAAS,mCAAI,mBAAmB;QAChD,iBAAiB,EAAE,MAAA,IAAI,CAAC,iBAAiB,mCAAI,iBAAiB,CAAC,OAAO;QACtE,SAAS,EAAE,MAAA,IAAI,CAAC,SAAS,mCAAI,kBAAkB;QAC/C,QAAQ,EAAE,MAAA,IAAI,CAAC,QAAQ,mCAAI,KAAK;QAChC,oBAAoB,EAAE,MAAA,IAAI,CAAC,oBAAoB,mCAAI,KAAK;KACzD,CAAA;AACH,CAAC;AAED,+GAA+G;AAC/G,MAAM,UAAU,SAAS,CAAC,GAA6B;IACrD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAA;IACnB,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAA6B;IAC5D,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAuB,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;AACxF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAA6B;IACzD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAoB,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;AAClF,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
+
import JSBI from 'jsbi';
|
|
3
|
+
import { Percent } from '@kittycorn-labs/sdk-core';
|
|
4
|
+
export declare function expandTo18DecimalsBN(n: number): BigNumber;
|
|
5
|
+
export declare function expandTo18Decimals(n: number): JSBI;
|
|
6
|
+
export declare function encodeFeeBips(fee: Percent): string;
|
|
7
|
+
export declare function encodeFee1e18(fee: Percent): string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
+
import JSBI from 'jsbi';
|
|
3
|
+
import bn from 'bignumber.js';
|
|
4
|
+
import { toHex } from '@kittycorn-labs/v3-sdk';
|
|
5
|
+
export function expandTo18DecimalsBN(n) {
|
|
6
|
+
// use bn intermediately to allow decimals in intermediate calculations
|
|
7
|
+
return BigNumber.from(new bn(n).times(new bn(10).pow(18)).toFixed());
|
|
8
|
+
}
|
|
9
|
+
export function expandTo18Decimals(n) {
|
|
10
|
+
return JSBI.BigInt(BigNumber.from(n).mul(BigNumber.from(10).pow(18)).toString());
|
|
11
|
+
}
|
|
12
|
+
export function encodeFeeBips(fee) {
|
|
13
|
+
return toHex(fee.multiply(10000).quotient);
|
|
14
|
+
}
|
|
15
|
+
const FULL_PORTION_PRECISION = JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(18));
|
|
16
|
+
export function encodeFee1e18(fee) {
|
|
17
|
+
return toHex(fee.multiply(FULL_PORTION_PRECISION).quotient);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=numbers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbers.js","sourceRoot":"","sources":["../../../../src/utils/numbers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,cAAc,CAAA;AAE7B,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE9C,MAAM,UAAU,oBAAoB,CAAC,CAAS;IAC5C,uEAAuE;IACvE,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;AACtE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,CAAS;IAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;AAClF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAM,CAAC,CAAC,QAAQ,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,sBAAsB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;AAElF,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,CAAA;AAC7D,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Pool as V4Pool } from '@kittycorn-labs/v4-sdk';
|
|
2
|
+
export function getPathCurrency(currency, pool) {
|
|
3
|
+
// return currency if the currency matches a currency of the pool
|
|
4
|
+
if (pool.involvesToken(currency)) {
|
|
5
|
+
return currency;
|
|
6
|
+
// return if currency.wrapped if pool involves wrapped currency
|
|
7
|
+
}
|
|
8
|
+
else if (pool.involvesToken(currency.wrapped)) {
|
|
9
|
+
return currency.wrapped;
|
|
10
|
+
// return native currency if pool involves native version of wrapped currency (only applies to V4)
|
|
11
|
+
}
|
|
12
|
+
else if (pool instanceof V4Pool && pool.token0.wrapped.equals(currency)) {
|
|
13
|
+
return pool.token0;
|
|
14
|
+
}
|
|
15
|
+
else if (pool instanceof V4Pool && pool.token1.wrapped.equals(currency)) {
|
|
16
|
+
return pool.token1;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
throw new Error(`Expected currency ${currency.symbol} to be either ${pool.token0.symbol} or ${pool.token1.symbol}`);
|
|
20
|
+
}
|
|
21
|
+
return currency; // this line needed for typescript to compile
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=pathCurrency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathCurrency.js","sourceRoot":"","sources":["../../../../src/utils/pathCurrency.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAGvD,MAAM,UAAU,eAAe,CAAC,QAAkB,EAAE,IAAW;IAC7D,iEAAiE;IACjE,IAAI,IAAI,CAAC,aAAa,CAAC,QAAiB,CAAC,EAAE;QACzC,OAAO,QAAQ,CAAA;QAEf,+DAA+D;KAChE;SAAM,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAgB,CAAC,EAAE;QACxD,OAAO,QAAQ,CAAC,OAAO,CAAA;QAEvB,kGAAkG;KACnG;SAAM,IAAI,IAAI,YAAY,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;QACzE,OAAO,IAAI,CAAC,MAAM,CAAA;KACnB;SAAM,IAAI,IAAI,YAAY,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;QACzE,OAAO,IAAI,CAAC,MAAM,CAAA;KACnB;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,iBAAiB,IAAI,CAAC,MAAM,CAAC,MAAM,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;KACpH;IAED,OAAO,QAAQ,CAAA,CAAC,6CAA6C;AAC/D,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
+
import { Percent } from '@kittycorn-labs/sdk-core';
|
|
3
|
+
import { FeeOptions } from '@kittycorn-labs/v3-sdk';
|
|
4
|
+
export interface ScaledPortionFee {
|
|
5
|
+
recipient: string;
|
|
6
|
+
/** The caller-supplied fee, read as a fraction of the gross swap output. */
|
|
7
|
+
grossFee: Percent;
|
|
8
|
+
/** Rescaled against the balance remaining when its PAY_PORTION executes, so the recipient still gets `grossFee` of gross. */
|
|
9
|
+
scaledFee: Percent;
|
|
10
|
+
}
|
|
11
|
+
/** Gross fractions to remaining-balance fractions: scaled_i = f_i / (1 - sum(f_0..f_{i-1})), in exact Fraction arithmetic; throws at or past 100%, since a 100% total encodes a swap that pays the swapper nothing. */
|
|
12
|
+
export declare function scalePortionFees(fees: FeeOptions[]): ScaledPortionFee[];
|
|
13
|
+
/** Replays the cascade with the ENCODED portions, which is exact where sum(floor(gross * f_i)) is off by dust either way; reduces to the legacy quantized deduction for a single fee, never exceeds grossAmount, and holds for larger fills. */
|
|
14
|
+
export declare function simulatePortionFeeDeduction(grossAmount: BigNumber, scaledFees: ScaledPortionFee[], useFullPrecision: boolean): BigNumber;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
+
import { Fraction, Percent } from '@kittycorn-labs/sdk-core';
|
|
3
|
+
import { encodeFee1e18, encodeFeeBips } from './numbers.js';
|
|
4
|
+
const ONE = new Fraction(1);
|
|
5
|
+
/** Gross fractions to remaining-balance fractions: scaled_i = f_i / (1 - sum(f_0..f_{i-1})), in exact Fraction arithmetic; throws at or past 100%, since a 100% total encodes a swap that pays the swapper nothing. */
|
|
6
|
+
export function scalePortionFees(fees) {
|
|
7
|
+
let remaining = ONE;
|
|
8
|
+
return fees.map(({ fee, recipient }) => {
|
|
9
|
+
if (fee.lessThan(0))
|
|
10
|
+
throw new Error('Portion fees cannot be negative');
|
|
11
|
+
// Strictly less: remaining stays positive, so the swapper's sweep is always non-empty.
|
|
12
|
+
if (!fee.lessThan(remaining))
|
|
13
|
+
throw new Error('Portion fees together exceed 100% of the swap output');
|
|
14
|
+
const scaled = fee.divide(remaining);
|
|
15
|
+
remaining = remaining.subtract(fee);
|
|
16
|
+
return {
|
|
17
|
+
recipient,
|
|
18
|
+
grossFee: new Percent(fee.numerator, fee.denominator),
|
|
19
|
+
scaledFee: new Percent(scaled.numerator, scaled.denominator),
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
const FEE_1E18_DENOMINATOR = BigNumber.from(10).pow(18);
|
|
24
|
+
const FEE_BIPS_DENOMINATOR = BigNumber.from(10000);
|
|
25
|
+
/** Replays the cascade with the ENCODED portions, which is exact where sum(floor(gross * f_i)) is off by dust either way; reduces to the legacy quantized deduction for a single fee, never exceeds grossAmount, and holds for larger fills. */
|
|
26
|
+
export function simulatePortionFeeDeduction(grossAmount, scaledFees, useFullPrecision) {
|
|
27
|
+
let remainingBalance = grossAmount;
|
|
28
|
+
for (const { scaledFee } of scaledFees) {
|
|
29
|
+
const encodedPortion = BigNumber.from(useFullPrecision ? encodeFee1e18(scaledFee) : encodeFeeBips(scaledFee));
|
|
30
|
+
const portionDenominator = useFullPrecision ? FEE_1E18_DENOMINATOR : FEE_BIPS_DENOMINATOR;
|
|
31
|
+
remainingBalance = remainingBalance.sub(remainingBalance.mul(encodedPortion).div(portionDenominator));
|
|
32
|
+
}
|
|
33
|
+
return grossAmount.sub(remainingBalance);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=portionFees.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portionFees.js","sourceRoot":"","sources":["../../../../src/utils/portionFees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAE5D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAUxD,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAA;AAE3B,uNAAuN;AACvN,MAAM,UAAU,gBAAgB,CAAC,IAAkB;IACjD,IAAI,SAAS,GAAa,GAAG,CAAA;IAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;QACrC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QACvE,uFAAuF;QACvF,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;QACrG,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACpC,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACnC,OAAO;YACL,SAAS;YACT,QAAQ,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC;YACrD,SAAS,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;SAC7D,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,oBAAoB,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AACvD,MAAM,oBAAoB,GAAG,SAAS,CAAC,IAAI,CAAC,KAAM,CAAC,CAAA;AAEnD,gPAAgP;AAChP,MAAM,UAAU,2BAA2B,CACzC,WAAsB,EACtB,UAA8B,EAC9B,gBAAyB;IAEzB,IAAI,gBAAgB,GAAG,WAAW,CAAA;IAClC,KAAK,MAAM,EAAE,SAAS,EAAE,IAAI,UAAU,EAAE;QACtC,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAA;QAC7G,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAA;QACzF,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAA;KACtG;IACD,OAAO,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAC1C,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
+
import { SwapStep, V4Action } from '../types/encodeSwaps';
|
|
3
|
+
export declare function stepSpendsToken(step: SwapStep, inputTokenAddress: string): boolean;
|
|
4
|
+
export declare function isInputSettle(action: V4Action, tokenAddress: string): boolean;
|
|
5
|
+
export declare function isInputSwap(action: V4Action, tokenAddress: string): boolean;
|
|
6
|
+
export declare function v4SwapAmountIn(action: V4Action): BigNumber;
|
|
7
|
+
export declare function stepSpendAmount(step: SwapStep, tokenAddress: string): BigNumber;
|
|
8
|
+
/**
|
|
9
|
+
* Rewrites a step plan to spend the router's entire input-token balance.
|
|
10
|
+
*
|
|
11
|
+
* Single spender: its v2/v3 exact-in amount becomes the CONTRACT_BALANCE
|
|
12
|
+
* sentinel (a v4 spender settles CONTRACT_BALANCE; one of its input swaps
|
|
13
|
+
* consumes the open delta while any others keep their quoted slices).
|
|
14
|
+
*
|
|
15
|
+
* Split routes (multiple spenders of the input token): every spender but the
|
|
16
|
+
* largest keeps its quoted amount, funded from router custody; the largest is
|
|
17
|
+
* rewritten to CONTRACT_BALANCE and MOVED after the other spenders, so it
|
|
18
|
+
* absorbs all delivery variance and the fill only reverts when delivery
|
|
19
|
+
* cannot cover the fixed legs.
|
|
20
|
+
*/
|
|
21
|
+
export declare function applyRouterBalanceInputToSteps(swapSteps: SwapStep[], inputTokenAddress: string, wrappedNativeAddress?: string): SwapStep[];
|
|
22
|
+
/**
|
|
23
|
+
* Native-input variant: the plan leads with the route's WRAP_ETH, which is resized to wrap
|
|
24
|
+
* the router's entire native balance (attached msg.value plus any stray ETH, so no value
|
|
25
|
+
* is left behind — UR never refunds msg.value); the wrapped-token hop that follows then
|
|
26
|
+
* spends CONTRACT_BALANCE like an ERC20 balance swap.
|
|
27
|
+
*
|
|
28
|
+
* `validateEncodeSwaps` guarantees steps[0] is a router-recipient WRAP_ETH and exactly one
|
|
29
|
+
* later step spends the wrapped token.
|
|
30
|
+
*/
|
|
31
|
+
export declare function applyNativeRouterBalanceInputToSteps(swapSteps: SwapStep[], wrappedTokenAddress: string): SwapStep[];
|