@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.
Files changed (244) hide show
  1. package/README.md +312 -0
  2. package/dist/cjs/src/abis/UniversalRouter.json +740 -0
  3. package/dist/{entities → cjs/src/entities}/Command.d.ts +12 -12
  4. package/dist/cjs/src/entities/Command.js +9 -0
  5. package/dist/cjs/src/entities/Command.js.map +1 -0
  6. package/dist/cjs/src/entities/actions/across.d.ts +21 -0
  7. package/dist/cjs/src/entities/actions/across.js +7 -0
  8. package/dist/cjs/src/entities/actions/across.js.map +1 -0
  9. package/dist/{entities → cjs/src/entities}/actions/index.d.ts +3 -2
  10. package/dist/cjs/src/entities/actions/index.js +7 -0
  11. package/dist/cjs/src/entities/actions/index.js.map +1 -0
  12. package/dist/cjs/src/entities/actions/uniswap.d.ts +94 -0
  13. package/dist/cjs/src/entities/actions/uniswap.js +740 -0
  14. package/dist/cjs/src/entities/actions/uniswap.js.map +1 -0
  15. package/dist/{entities → cjs/src/entities}/actions/unwrapWETH.d.ts +12 -12
  16. package/dist/cjs/src/entities/actions/unwrapWETH.js +33 -0
  17. package/dist/cjs/src/entities/actions/unwrapWETH.js.map +1 -0
  18. package/dist/{entities → cjs/src/entities}/index.d.ts +2 -2
  19. package/dist/cjs/src/entities/index.js +6 -0
  20. package/dist/cjs/src/entities/index.js.map +1 -0
  21. package/dist/cjs/src/index.d.ts +19 -0
  22. package/dist/cjs/src/index.js +43 -0
  23. package/dist/cjs/src/index.js.map +1 -0
  24. package/dist/cjs/src/kittycorn.d.ts +9 -0
  25. package/dist/cjs/src/kittycorn.js +26 -0
  26. package/dist/cjs/src/kittycorn.js.map +1 -0
  27. package/dist/cjs/src/swapRouter.d.ts +123 -0
  28. package/dist/cjs/src/swapRouter.js +445 -0
  29. package/dist/cjs/src/swapRouter.js.map +1 -0
  30. package/dist/cjs/src/types/encodeSwaps.d.ts +197 -0
  31. package/dist/cjs/src/types/encodeSwaps.js +3 -0
  32. package/dist/cjs/src/types/encodeSwaps.js.map +1 -0
  33. package/dist/{utils → cjs/src/utils}/commandParser.d.ts +36 -34
  34. package/dist/cjs/src/utils/commandParser.js +154 -0
  35. package/dist/cjs/src/utils/commandParser.js.map +1 -0
  36. package/dist/cjs/src/utils/computeEncodeSwapsAmounts.d.ts +8 -0
  37. package/dist/cjs/src/utils/computeEncodeSwapsAmounts.js +46 -0
  38. package/dist/cjs/src/utils/computeEncodeSwapsAmounts.js.map +1 -0
  39. package/dist/{utils → cjs/src/utils}/constants.d.ts +46 -30
  40. package/dist/cjs/src/utils/constants.js +777 -0
  41. package/dist/cjs/src/utils/constants.js.map +1 -0
  42. package/dist/cjs/src/utils/directTransfers.d.ts +15 -0
  43. package/dist/cjs/src/utils/directTransfers.js +381 -0
  44. package/dist/cjs/src/utils/directTransfers.js.map +1 -0
  45. package/dist/cjs/src/utils/eip712.d.ts +17 -0
  46. package/dist/cjs/src/utils/eip712.js +44 -0
  47. package/dist/cjs/src/utils/eip712.js.map +1 -0
  48. package/dist/cjs/src/utils/encodeSwapStep.d.ts +4 -0
  49. package/dist/cjs/src/utils/encodeSwapStep.js +62 -0
  50. package/dist/cjs/src/utils/encodeSwapStep.js.map +1 -0
  51. package/dist/cjs/src/utils/encodeV4Action.d.ts +7 -0
  52. package/dist/cjs/src/utils/encodeV4Action.js +84 -0
  53. package/dist/cjs/src/utils/encodeV4Action.js.map +1 -0
  54. package/dist/{utils → cjs/src/utils}/getCurrencyAddress.d.ts +2 -2
  55. package/dist/cjs/src/utils/getCurrencyAddress.js +9 -0
  56. package/dist/cjs/src/utils/getCurrencyAddress.js.map +1 -0
  57. package/dist/{utils → cjs/src/utils}/inputTokens.d.ts +23 -23
  58. package/dist/cjs/src/utils/inputTokens.js +58 -0
  59. package/dist/cjs/src/utils/inputTokens.js.map +1 -0
  60. package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.d.ts +6 -0
  61. package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.js +34 -0
  62. package/dist/cjs/src/utils/normalizeEncodeSwapsSpec.js.map +1 -0
  63. package/dist/{utils → cjs/src/utils}/numbers.d.ts +7 -6
  64. package/dist/cjs/src/utils/numbers.js +27 -0
  65. package/dist/cjs/src/utils/numbers.js.map +1 -0
  66. package/dist/{utils → cjs/src/utils}/pathCurrency.d.ts +3 -3
  67. package/dist/cjs/src/utils/pathCurrency.js +27 -0
  68. package/dist/cjs/src/utils/pathCurrency.js.map +1 -0
  69. package/dist/cjs/src/utils/portionFees.d.ts +14 -0
  70. package/dist/cjs/src/utils/portionFees.js +40 -0
  71. package/dist/cjs/src/utils/portionFees.js.map +1 -0
  72. package/dist/cjs/src/utils/routerBalanceSteps.d.ts +31 -0
  73. package/dist/cjs/src/utils/routerBalanceSteps.js +293 -0
  74. package/dist/cjs/src/utils/routerBalanceSteps.js.map +1 -0
  75. package/dist/{utils → cjs/src/utils}/routerCommands.d.ts +77 -64
  76. package/dist/cjs/src/utils/routerCommands.js +331 -0
  77. package/dist/cjs/src/utils/routerCommands.js.map +1 -0
  78. package/dist/{utils → cjs/src/utils}/routerTradeAdapter.d.ts +73 -73
  79. package/dist/cjs/src/utils/routerTradeAdapter.js +139 -0
  80. package/dist/cjs/src/utils/routerTradeAdapter.js.map +1 -0
  81. package/dist/cjs/src/utils/toV4URVersion.d.ts +3 -0
  82. package/dist/cjs/src/utils/toV4URVersion.js +17 -0
  83. package/dist/cjs/src/utils/toV4URVersion.js.map +1 -0
  84. package/dist/cjs/src/utils/validateEncodeSwaps.d.ts +2 -0
  85. package/dist/cjs/src/utils/validateEncodeSwaps.js +344 -0
  86. package/dist/cjs/src/utils/validateEncodeSwaps.js.map +1 -0
  87. package/dist/esm/package.json +1 -0
  88. package/dist/esm/src/abis/UniversalRouter.json +740 -0
  89. package/dist/esm/src/entities/Command.d.ts +12 -0
  90. package/dist/esm/src/entities/Command.js +6 -0
  91. package/dist/esm/src/entities/Command.js.map +1 -0
  92. package/dist/esm/src/entities/actions/across.d.ts +21 -0
  93. package/dist/esm/src/entities/actions/across.js +3 -0
  94. package/dist/esm/src/entities/actions/across.js.map +1 -0
  95. package/dist/esm/src/entities/actions/index.d.ts +3 -0
  96. package/dist/esm/src/entities/actions/index.js +4 -0
  97. package/dist/esm/src/entities/actions/index.js.map +1 -0
  98. package/dist/esm/src/entities/actions/uniswap.d.ts +94 -0
  99. package/dist/esm/src/entities/actions/uniswap.js +735 -0
  100. package/dist/esm/src/entities/actions/uniswap.js.map +1 -0
  101. package/dist/esm/src/entities/actions/unwrapWETH.d.ts +12 -0
  102. package/dist/esm/src/entities/actions/unwrapWETH.js +28 -0
  103. package/dist/esm/src/entities/actions/unwrapWETH.js.map +1 -0
  104. package/dist/esm/src/entities/index.d.ts +2 -0
  105. package/dist/esm/src/entities/index.js +3 -0
  106. package/dist/esm/src/entities/index.js.map +1 -0
  107. package/dist/esm/src/index.d.ts +19 -0
  108. package/dist/esm/src/index.js +15 -0
  109. package/dist/esm/src/index.js.map +1 -0
  110. package/dist/esm/src/kittycorn.d.ts +9 -0
  111. package/dist/esm/src/kittycorn.js +22 -0
  112. package/dist/esm/src/kittycorn.js.map +1 -0
  113. package/dist/esm/src/swapRouter.d.ts +123 -0
  114. package/dist/esm/src/swapRouter.js +440 -0
  115. package/dist/esm/src/swapRouter.js.map +1 -0
  116. package/dist/esm/src/types/encodeSwaps.d.ts +197 -0
  117. package/dist/esm/src/types/encodeSwaps.js +2 -0
  118. package/dist/esm/src/types/encodeSwaps.js.map +1 -0
  119. package/dist/esm/src/utils/commandParser.d.ts +36 -0
  120. package/dist/esm/src/utils/commandParser.js +146 -0
  121. package/dist/esm/src/utils/commandParser.js.map +1 -0
  122. package/dist/esm/src/utils/computeEncodeSwapsAmounts.d.ts +8 -0
  123. package/dist/esm/src/utils/computeEncodeSwapsAmounts.js +41 -0
  124. package/dist/esm/src/utils/computeEncodeSwapsAmounts.js.map +1 -0
  125. package/dist/esm/src/utils/constants.d.ts +46 -0
  126. package/dist/esm/src/utils/constants.js +768 -0
  127. package/dist/esm/src/utils/constants.js.map +1 -0
  128. package/dist/esm/src/utils/directTransfers.d.ts +15 -0
  129. package/dist/esm/src/utils/directTransfers.js +369 -0
  130. package/dist/esm/src/utils/directTransfers.js.map +1 -0
  131. package/dist/esm/src/utils/eip712.d.ts +17 -0
  132. package/dist/esm/src/utils/eip712.js +39 -0
  133. package/dist/esm/src/utils/eip712.js.map +1 -0
  134. package/dist/esm/src/utils/encodeSwapStep.d.ts +4 -0
  135. package/dist/esm/src/utils/encodeSwapStep.js +58 -0
  136. package/dist/esm/src/utils/encodeSwapStep.js.map +1 -0
  137. package/dist/esm/src/utils/encodeV4Action.d.ts +7 -0
  138. package/dist/esm/src/utils/encodeV4Action.js +80 -0
  139. package/dist/esm/src/utils/encodeV4Action.js.map +1 -0
  140. package/dist/esm/src/utils/getCurrencyAddress.d.ts +2 -0
  141. package/dist/esm/src/utils/getCurrencyAddress.js +5 -0
  142. package/dist/esm/src/utils/getCurrencyAddress.js.map +1 -0
  143. package/dist/esm/src/utils/inputTokens.d.ts +23 -0
  144. package/dist/esm/src/utils/inputTokens.js +51 -0
  145. package/dist/esm/src/utils/inputTokens.js.map +1 -0
  146. package/dist/esm/src/utils/normalizeEncodeSwapsSpec.d.ts +6 -0
  147. package/dist/esm/src/utils/normalizeEncodeSwapsSpec.js +27 -0
  148. package/dist/esm/src/utils/normalizeEncodeSwapsSpec.js.map +1 -0
  149. package/dist/esm/src/utils/numbers.d.ts +7 -0
  150. package/dist/esm/src/utils/numbers.js +19 -0
  151. package/dist/esm/src/utils/numbers.js.map +1 -0
  152. package/dist/esm/src/utils/pathCurrency.d.ts +3 -0
  153. package/dist/esm/src/utils/pathCurrency.js +23 -0
  154. package/dist/esm/src/utils/pathCurrency.js.map +1 -0
  155. package/dist/esm/src/utils/portionFees.d.ts +14 -0
  156. package/dist/esm/src/utils/portionFees.js +35 -0
  157. package/dist/esm/src/utils/portionFees.js.map +1 -0
  158. package/dist/esm/src/utils/routerBalanceSteps.d.ts +31 -0
  159. package/dist/esm/src/utils/routerBalanceSteps.js +282 -0
  160. package/dist/esm/src/utils/routerBalanceSteps.js.map +1 -0
  161. package/dist/esm/src/utils/routerCommands.d.ts +77 -0
  162. package/dist/esm/src/utils/routerCommands.js +326 -0
  163. package/dist/esm/src/utils/routerCommands.js.map +1 -0
  164. package/dist/esm/src/utils/routerTradeAdapter.d.ts +73 -0
  165. package/dist/esm/src/utils/routerTradeAdapter.js +134 -0
  166. package/dist/esm/src/utils/routerTradeAdapter.js.map +1 -0
  167. package/dist/esm/src/utils/toV4URVersion.d.ts +3 -0
  168. package/dist/esm/src/utils/toV4URVersion.js +13 -0
  169. package/dist/esm/src/utils/toV4URVersion.js.map +1 -0
  170. package/dist/esm/src/utils/validateEncodeSwaps.d.ts +2 -0
  171. package/dist/esm/src/utils/validateEncodeSwaps.js +339 -0
  172. package/dist/esm/src/utils/validateEncodeSwaps.js.map +1 -0
  173. package/dist/types/src/entities/Command.d.ts +13 -0
  174. package/dist/types/src/entities/Command.d.ts.map +1 -0
  175. package/dist/types/src/entities/actions/across.d.ts +22 -0
  176. package/dist/types/src/entities/actions/across.d.ts.map +1 -0
  177. package/dist/types/src/entities/actions/index.d.ts +4 -0
  178. package/dist/types/src/entities/actions/index.d.ts.map +1 -0
  179. package/dist/types/src/entities/actions/uniswap.d.ts +95 -0
  180. package/dist/types/src/entities/actions/uniswap.d.ts.map +1 -0
  181. package/dist/types/src/entities/actions/unwrapWETH.d.ts +13 -0
  182. package/dist/types/src/entities/actions/unwrapWETH.d.ts.map +1 -0
  183. package/dist/types/src/entities/index.d.ts +3 -0
  184. package/dist/types/src/entities/index.d.ts.map +1 -0
  185. package/dist/types/src/index.d.ts +20 -0
  186. package/dist/types/src/index.d.ts.map +1 -0
  187. package/dist/types/src/kittycorn.d.ts +10 -0
  188. package/dist/types/src/kittycorn.d.ts.map +1 -0
  189. package/dist/types/src/swapRouter.d.ts +124 -0
  190. package/dist/types/src/swapRouter.d.ts.map +1 -0
  191. package/dist/types/src/types/encodeSwaps.d.ts +198 -0
  192. package/dist/types/src/types/encodeSwaps.d.ts.map +1 -0
  193. package/dist/types/src/utils/commandParser.d.ts +37 -0
  194. package/dist/types/src/utils/commandParser.d.ts.map +1 -0
  195. package/dist/types/src/utils/computeEncodeSwapsAmounts.d.ts +9 -0
  196. package/dist/types/src/utils/computeEncodeSwapsAmounts.d.ts.map +1 -0
  197. package/dist/types/src/utils/constants.d.ts +47 -0
  198. package/dist/types/src/utils/constants.d.ts.map +1 -0
  199. package/dist/types/src/utils/directTransfers.d.ts +16 -0
  200. package/dist/types/src/utils/directTransfers.d.ts.map +1 -0
  201. package/dist/types/src/utils/eip712.d.ts +18 -0
  202. package/dist/types/src/utils/eip712.d.ts.map +1 -0
  203. package/dist/types/src/utils/encodeSwapStep.d.ts +5 -0
  204. package/dist/types/src/utils/encodeSwapStep.d.ts.map +1 -0
  205. package/dist/types/src/utils/encodeV4Action.d.ts +8 -0
  206. package/dist/types/src/utils/encodeV4Action.d.ts.map +1 -0
  207. package/dist/types/src/utils/getCurrencyAddress.d.ts +3 -0
  208. package/dist/types/src/utils/getCurrencyAddress.d.ts.map +1 -0
  209. package/dist/types/src/utils/inputTokens.d.ts +24 -0
  210. package/dist/types/src/utils/inputTokens.d.ts.map +1 -0
  211. package/dist/types/src/utils/normalizeEncodeSwapsSpec.d.ts +7 -0
  212. package/dist/types/src/utils/normalizeEncodeSwapsSpec.d.ts.map +1 -0
  213. package/dist/types/src/utils/numbers.d.ts +8 -0
  214. package/dist/types/src/utils/numbers.d.ts.map +1 -0
  215. package/dist/types/src/utils/pathCurrency.d.ts +4 -0
  216. package/dist/types/src/utils/pathCurrency.d.ts.map +1 -0
  217. package/dist/types/src/utils/portionFees.d.ts +15 -0
  218. package/dist/types/src/utils/portionFees.d.ts.map +1 -0
  219. package/dist/types/src/utils/routerBalanceSteps.d.ts +32 -0
  220. package/dist/types/src/utils/routerBalanceSteps.d.ts.map +1 -0
  221. package/dist/types/src/utils/routerCommands.d.ts +78 -0
  222. package/dist/types/src/utils/routerCommands.d.ts.map +1 -0
  223. package/dist/types/src/utils/routerTradeAdapter.d.ts +74 -0
  224. package/dist/types/src/utils/routerTradeAdapter.d.ts.map +1 -0
  225. package/dist/types/src/utils/toV4URVersion.d.ts +4 -0
  226. package/dist/types/src/utils/toV4URVersion.d.ts.map +1 -0
  227. package/dist/types/src/utils/validateEncodeSwaps.d.ts +3 -0
  228. package/dist/types/src/utils/validateEncodeSwaps.d.ts.map +1 -0
  229. package/package.json +33 -52
  230. package/dist/entities/actions/uniswap.d.ts +0 -30
  231. package/dist/index.d.ts +0 -10
  232. package/dist/index.js +0 -8
  233. package/dist/swapRouter.d.ts +0 -37
  234. package/dist/test/forge/writeInterop.d.ts +0 -2
  235. package/dist/test/utils/addresses.d.ts +0 -5
  236. package/dist/test/utils/hexToDecimalString.d.ts +0 -2
  237. package/dist/test/utils/permit2.d.ts +0 -7
  238. package/dist/test/utils/uniswapData.d.ts +0 -25
  239. package/dist/universal-router-sdk.cjs.development.js +0 -1500
  240. package/dist/universal-router-sdk.cjs.development.js.map +0 -1
  241. package/dist/universal-router-sdk.cjs.production.min.js +0 -2
  242. package/dist/universal-router-sdk.cjs.production.min.js.map +0 -1
  243. package/dist/universal-router-sdk.esm.js +0 -1493
  244. package/dist/universal-router-sdk.esm.js.map +0 -1
@@ -0,0 +1,197 @@
1
+ import { BigNumberish } from '@ethersproject/bignumber';
2
+ import { Currency, CurrencyAmount, Percent, TradeType } from '@kittycorn-labs/sdk-core';
3
+ import { type PathKey, type PoolKey } from '@kittycorn-labs/v4-sdk';
4
+ import { RouterBalanceInput, TokenTransferMode } from '../entities/actions/uniswap';
5
+ import { Permit2Permit } from '../utils/inputTokens';
6
+ import { UniversalRouterVersion } from '../utils/constants';
7
+ export type { PathKey, PoolKey };
8
+ export type Fee = {
9
+ kind: 'portion';
10
+ recipient: string;
11
+ fee: Percent;
12
+ } | {
13
+ kind: 'flat';
14
+ recipient: string;
15
+ amount: BigNumberish;
16
+ };
17
+ export type PortionFee = Extract<Fee, {
18
+ kind: 'portion';
19
+ }>;
20
+ export type FlatFee = Extract<Fee, {
21
+ kind: 'flat';
22
+ }>;
23
+ /** A bare `Fee` encodes as it always has; an array pays one recipient per entry (at most MAX_FEE_RECIPIENTS), each a fraction of GROSS output, all the same `kind`, and >1 portion needs urVersion >= 2.1.1. */
24
+ export type FeeSpecification = Fee | Fee[];
25
+ export type SwapSpecification = {
26
+ tradeType: TradeType;
27
+ routing: {
28
+ inputToken: Currency;
29
+ outputToken: Currency;
30
+ amount: CurrencyAmount<Currency>;
31
+ quote: CurrencyAmount<Currency>;
32
+ };
33
+ slippageTolerance: Percent;
34
+ recipient?: string;
35
+ fee?: FeeSpecification;
36
+ tokenTransferMode?: TokenTransferMode;
37
+ permit?: Permit2Permit;
38
+ chainId?: number;
39
+ deadline?: BigNumberish;
40
+ urVersion?: UniversalRouterVersion;
41
+ safeMode?: boolean;
42
+ /**
43
+ * The input Token is the chain's native gas token exposed via an ERC20 predeploy whose balance
44
+ * mirrors the native balance (e.g. USDC on Arc). The swap is funded by attaching
45
+ * msg.value = exactOrMaxAmountIn * 10^(18 - token.decimals) instead of pulling via Permit2:
46
+ * the PERMIT2_TRANSFER_FROM ingress is skipped and no ERC20 approval or permit is ever needed.
47
+ * Incompatible with native input, permit, and TokenTransferMode.ApproveProxy.
48
+ */
49
+ nativeErc20Input?: boolean;
50
+ /**
51
+ * Lets steps pull input straight from the user and pay output straight to `recipient`
52
+ * (instead of router custody), still validated so the user never pays more than
53
+ * `exactOrMaxAmountIn` or receives less than the minimum output. Default false.
54
+ * See `SwapRouter.encodeSwaps`.
55
+ */
56
+ allowDirectTransfers?: boolean;
57
+ /**
58
+ * Omit the zero-floor settlement SWEEP when no step can leave the output token on the router.
59
+ * Default false. Needs `allowDirectTransfers`. Assumes the router starts with no output balance
60
+ * and token transfers do not credit it; see the README "Direct Transfers" section.
61
+ */
62
+ omitRedundantSettlementSweep?: boolean;
63
+ /**
64
+ * Fund the swap from the Universal Router's own balance of the input token: no Permit2
65
+ * ingress is emitted, the first hop spends the CONTRACT_BALANCE sentinel, and an optional
66
+ * `minimumAmount` emits a BALANCE_CHECK_ERC20 (requires `chainId` to resolve the router
67
+ * address). A native input is funded by attaching msg.value to execute() (raw transfers
68
+ * to the router revert): the plan must lead with a WRAP_ETH, which is resized to wrap the
69
+ * whole balance, the floor is asserted post-wrap as WETH, ETH dust is always swept to the
70
+ * recipient, and the encoded value is 0. Same semantics and guards as
71
+ * `SwapOptions.routerBalanceInput`: explicit `recipient`, EXACT_INPUT, exactly one step
72
+ * spending the (wrapped) input token (no splits); incompatible with `permit`,
73
+ * `nativeErc20Input`, `allowDirectTransfers`, and ApproveProxy.
74
+ */
75
+ routerBalanceInput?: RouterBalanceInput;
76
+ };
77
+ export type NormalizedSwapSpecification = Omit<SwapSpecification, 'recipient' | 'tokenTransferMode' | 'urVersion' | 'safeMode' | 'allowDirectTransfers'> & {
78
+ recipient: string;
79
+ tokenTransferMode: TokenTransferMode;
80
+ urVersion: UniversalRouterVersion;
81
+ safeMode: boolean;
82
+ allowDirectTransfers: boolean;
83
+ };
84
+ export type V2SwapExactIn = {
85
+ type: 'V2_SWAP_EXACT_IN';
86
+ recipient: string;
87
+ amountIn: BigNumberish;
88
+ amountOutMin: BigNumberish;
89
+ path: string[];
90
+ minHopPriceX36?: BigNumberish[];
91
+ payerIsUser?: boolean;
92
+ };
93
+ export type V2SwapExactOut = {
94
+ type: 'V2_SWAP_EXACT_OUT';
95
+ recipient: string;
96
+ amountOut: BigNumberish;
97
+ amountInMax: BigNumberish;
98
+ path: string[];
99
+ minHopPriceX36?: BigNumberish[];
100
+ payerIsUser?: boolean;
101
+ };
102
+ export type V3SwapExactIn = {
103
+ type: 'V3_SWAP_EXACT_IN';
104
+ recipient: string;
105
+ amountIn: BigNumberish;
106
+ amountOutMin: BigNumberish;
107
+ path: string;
108
+ minHopPriceX36?: BigNumberish[];
109
+ payerIsUser?: boolean;
110
+ };
111
+ export type V3SwapExactOut = {
112
+ type: 'V3_SWAP_EXACT_OUT';
113
+ recipient: string;
114
+ amountOut: BigNumberish;
115
+ amountInMax: BigNumberish;
116
+ path: string;
117
+ minHopPriceX36?: BigNumberish[];
118
+ payerIsUser?: boolean;
119
+ };
120
+ export type V4Swap = {
121
+ type: 'V4_SWAP';
122
+ v4Actions: V4Action[];
123
+ };
124
+ export type WrapEth = {
125
+ type: 'WRAP_ETH';
126
+ recipient: string;
127
+ amount: BigNumberish;
128
+ };
129
+ export type UnwrapWeth = {
130
+ type: 'UNWRAP_WETH';
131
+ recipient: string;
132
+ amountMin: BigNumberish;
133
+ };
134
+ export type SwapStep = V2SwapExactIn | V2SwapExactOut | V3SwapExactIn | V3SwapExactOut | V4Swap | WrapEth | UnwrapWeth;
135
+ export type V4SwapExactIn = {
136
+ action: 'SWAP_EXACT_IN';
137
+ currencyIn: string;
138
+ path: PathKey[];
139
+ amountIn: BigNumberish;
140
+ amountOutMinimum: BigNumberish;
141
+ minHopPriceX36?: BigNumberish[];
142
+ };
143
+ export type V4SwapExactInSingle = {
144
+ action: 'SWAP_EXACT_IN_SINGLE';
145
+ poolKey: PoolKey;
146
+ zeroForOne: boolean;
147
+ amountIn: BigNumberish;
148
+ amountOutMinimum: BigNumberish;
149
+ minHopPriceX36?: BigNumberish;
150
+ hookData: string;
151
+ };
152
+ export type V4SwapExactOut = {
153
+ action: 'SWAP_EXACT_OUT';
154
+ currencyOut: string;
155
+ path: PathKey[];
156
+ amountOut: BigNumberish;
157
+ amountInMaximum: BigNumberish;
158
+ minHopPriceX36?: BigNumberish[];
159
+ };
160
+ export type V4SwapExactOutSingle = {
161
+ action: 'SWAP_EXACT_OUT_SINGLE';
162
+ poolKey: PoolKey;
163
+ zeroForOne: boolean;
164
+ amountOut: BigNumberish;
165
+ amountInMaximum: BigNumberish;
166
+ minHopPriceX36?: BigNumberish;
167
+ hookData: string;
168
+ };
169
+ export type V4Settle = {
170
+ action: 'SETTLE';
171
+ currency: string;
172
+ amount: BigNumberish;
173
+ payerIsUser?: boolean;
174
+ };
175
+ export type V4SettleAll = {
176
+ action: 'SETTLE_ALL';
177
+ currency: string;
178
+ maxAmount: BigNumberish;
179
+ };
180
+ export type V4Take = {
181
+ action: 'TAKE';
182
+ currency: string;
183
+ recipient: string;
184
+ amount: BigNumberish;
185
+ };
186
+ export type V4TakeAll = {
187
+ action: 'TAKE_ALL';
188
+ currency: string;
189
+ minAmount: BigNumberish;
190
+ };
191
+ export type V4TakePortion = {
192
+ action: 'TAKE_PORTION';
193
+ currency: string;
194
+ recipient: string;
195
+ bips: BigNumberish;
196
+ };
197
+ export type V4Action = V4SwapExactIn | V4SwapExactInSingle | V4SwapExactOut | V4SwapExactOutSingle | V4Settle | V4SettleAll | V4Take | V4TakeAll | V4TakePortion;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=encodeSwaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encodeSwaps.js","sourceRoot":"","sources":["../../../../src/types/encodeSwaps.ts"],"names":[],"mappings":""}
@@ -1,34 +1,36 @@
1
- import { Interface } from '@ethersproject/abi';
2
- import { CommandType, CommandDefinition } from '../utils/routerCommands';
3
- export declare type Param = {
4
- readonly name: string;
5
- readonly value: any;
6
- };
7
- export declare type UniversalRouterCommand = {
8
- readonly commandName: string;
9
- readonly commandType: CommandType;
10
- readonly params: readonly Param[];
11
- };
12
- export declare type UniversalRouterCall = {
13
- readonly commands: readonly UniversalRouterCommand[];
14
- };
15
- export declare type V3PathItem = {
16
- readonly tokenIn: string;
17
- readonly tokenOut: string;
18
- readonly fee: number;
19
- };
20
- export interface CommandsDefinition {
21
- [key: number]: CommandDefinition;
22
- }
23
- export declare abstract class CommandParser {
24
- static INTERFACE: Interface;
25
- static parseCalldata(calldata: string): UniversalRouterCall;
26
- }
27
- export declare class GenericCommandParser {
28
- private readonly commandDefinition;
29
- constructor(commandDefinition: CommandsDefinition);
30
- parse(commands: string, inputs: string[]): UniversalRouterCall;
31
- private static getCommands;
32
- }
33
- export declare function parseV3PathExactIn(path: string): readonly V3PathItem[];
34
- export declare function parseV3PathExactOut(path: string): readonly V3PathItem[];
1
+ import { Interface } from '@ethersproject/abi';
2
+ import { CommandType, CommandDefinition } from '../utils/routerCommands';
3
+ import { UniversalRouterVersion } from '../utils/constants';
4
+ export type Param = {
5
+ readonly name: string;
6
+ readonly value: any;
7
+ };
8
+ export type UniversalRouterCommand = {
9
+ readonly commandName: string;
10
+ readonly commandType: CommandType;
11
+ readonly params: readonly Param[];
12
+ };
13
+ export type UniversalRouterCall = {
14
+ readonly commands: readonly UniversalRouterCommand[];
15
+ };
16
+ export type V3PathItem = {
17
+ readonly tokenIn: string;
18
+ readonly tokenOut: string;
19
+ readonly fee: number;
20
+ };
21
+ export interface CommandsDefinition {
22
+ [key: number]: CommandDefinition;
23
+ }
24
+ export declare abstract class CommandParser {
25
+ static INTERFACE: Interface;
26
+ static parseCalldata(calldata: string, urVersion?: UniversalRouterVersion): UniversalRouterCall;
27
+ }
28
+ export declare class GenericCommandParser {
29
+ private readonly commandDefinition;
30
+ private readonly urVersion;
31
+ constructor(commandDefinition: CommandsDefinition, urVersion?: UniversalRouterVersion);
32
+ parse(commands: string, inputs: string[]): UniversalRouterCall;
33
+ private static getCommands;
34
+ }
35
+ export declare function parseV3PathExactIn(path: string): readonly V3PathItem[];
36
+ export declare function parseV3PathExactOut(path: string): readonly V3PathItem[];
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseV3PathExactOut = exports.parseV3PathExactIn = exports.GenericCommandParser = exports.CommandParser = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const abi_1 = require("@ethersproject/abi");
6
+ const address_1 = require("@ethersproject/address");
7
+ const UniversalRouter_json_1 = tslib_1.__importDefault(require("../abis/UniversalRouter.json"));
8
+ const abi_2 = require("@ethersproject/abi");
9
+ const v4_sdk_1 = require("@kittycorn-labs/v4-sdk");
10
+ const routerCommands_1 = require("../utils/routerCommands");
11
+ const constants_1 = require("../utils/constants");
12
+ // Parses UniversalRouter V2 commands
13
+ class CommandParser {
14
+ static parseCalldata(calldata, urVersion = constants_1.UniversalRouterVersion.V2_0) {
15
+ // From V2.1.1 onwards the V2/V3 swap commands carry an extra minHopPriceX36 array,
16
+ // so the matching command definitions must be used to decode them correctly.
17
+ const commandDefinition = (0, constants_1.isAtLeastV2_1_1)(urVersion)
18
+ ? { ...routerCommands_1.COMMAND_DEFINITION, ...routerCommands_1.V2V3_SWAP_COMMANDS_V2_1_1 }
19
+ : routerCommands_1.COMMAND_DEFINITION;
20
+ const genericParser = new GenericCommandParser(commandDefinition, urVersion);
21
+ const txDescription = CommandParser.INTERFACE.parseTransaction({ data: calldata });
22
+ const { commands, inputs } = txDescription.args;
23
+ return genericParser.parse(commands, inputs);
24
+ }
25
+ }
26
+ exports.CommandParser = CommandParser;
27
+ CommandParser.INTERFACE = new abi_2.Interface(UniversalRouter_json_1.default.abi);
28
+ // Parses commands based on given command definition
29
+ class GenericCommandParser {
30
+ constructor(commandDefinition, urVersion = constants_1.UniversalRouterVersion.V2_0) {
31
+ this.commandDefinition = commandDefinition;
32
+ this.urVersion = urVersion;
33
+ }
34
+ parse(commands, inputs) {
35
+ const commandTypes = GenericCommandParser.getCommands(commands);
36
+ return {
37
+ commands: commandTypes.map((commandType, i) => {
38
+ const commandDef = this.commandDefinition[commandType];
39
+ if (commandDef.parser === routerCommands_1.Parser.V4Actions) {
40
+ // UniversalRouterVersion and URVersion share identical string values; cast across the SDK boundary
41
+ const { actions } = v4_sdk_1.V4BaseActionsParser.parseCalldata(inputs[i], this.urVersion);
42
+ return {
43
+ commandName: routerCommands_1.CommandType[commandType],
44
+ commandType,
45
+ params: v4RouterCallToParams(actions),
46
+ };
47
+ }
48
+ else if (commandDef.parser === routerCommands_1.Parser.Abi) {
49
+ const abiDef = commandDef.params;
50
+ const rawParams = abi_1.defaultAbiCoder.decode(abiDef.map((command) => command.type), inputs[i]);
51
+ const params = rawParams.map((param, j) => {
52
+ switch (abiDef[j].subparser) {
53
+ case routerCommands_1.Subparser.V3PathExactIn:
54
+ return {
55
+ name: abiDef[j].name,
56
+ value: parseV3PathExactIn(param),
57
+ };
58
+ case routerCommands_1.Subparser.V3PathExactOut:
59
+ return {
60
+ name: abiDef[j].name,
61
+ value: parseV3PathExactOut(param),
62
+ };
63
+ default:
64
+ return {
65
+ name: abiDef[j].name,
66
+ value: param,
67
+ };
68
+ }
69
+ });
70
+ return {
71
+ commandName: routerCommands_1.CommandType[commandType],
72
+ commandType,
73
+ params,
74
+ };
75
+ }
76
+ else if (commandDef.parser === routerCommands_1.Parser.V3Actions) {
77
+ // TODO: implement better parsing here
78
+ return {
79
+ commandName: routerCommands_1.CommandType[commandType],
80
+ commandType,
81
+ params: inputs.map((input) => ({ name: 'command', value: input })),
82
+ };
83
+ }
84
+ else {
85
+ throw new Error(`Unsupported parser: ${commandDef}`);
86
+ }
87
+ }),
88
+ };
89
+ }
90
+ // parse command types from bytes string
91
+ static getCommands(commands) {
92
+ const commandTypes = [];
93
+ for (let i = 2; i < commands.length; i += 2) {
94
+ const byte = commands.substring(i, i + 2);
95
+ commandTypes.push(parseInt(byte, 16));
96
+ }
97
+ return commandTypes;
98
+ }
99
+ }
100
+ exports.GenericCommandParser = GenericCommandParser;
101
+ function parseV3PathExactIn(path) {
102
+ const strippedPath = path.replace('0x', '');
103
+ let tokenIn = (0, address_1.getAddress)(strippedPath.substring(0, 40));
104
+ let loc = 40;
105
+ const res = [];
106
+ while (loc < strippedPath.length) {
107
+ const feeAndTokenOut = strippedPath.substring(loc, loc + 46);
108
+ const fee = parseInt(feeAndTokenOut.substring(0, 6), 16);
109
+ const tokenOut = (0, address_1.getAddress)(feeAndTokenOut.substring(6, 46));
110
+ res.push({
111
+ tokenIn,
112
+ tokenOut,
113
+ fee,
114
+ });
115
+ tokenIn = tokenOut;
116
+ loc += 46;
117
+ }
118
+ return res;
119
+ }
120
+ exports.parseV3PathExactIn = parseV3PathExactIn;
121
+ function parseV3PathExactOut(path) {
122
+ const strippedPath = path.replace('0x', '');
123
+ let tokenIn = (0, address_1.getAddress)(strippedPath.substring(strippedPath.length - 40));
124
+ let loc = strippedPath.length - 86; // 86 = (20 addr + 3 fee + 20 addr) * 2 (for hex characters)
125
+ const res = [];
126
+ while (loc >= 0) {
127
+ const feeAndTokenOut = strippedPath.substring(loc, loc + 46);
128
+ const tokenOut = (0, address_1.getAddress)(feeAndTokenOut.substring(0, 40));
129
+ const fee = parseInt(feeAndTokenOut.substring(40, 46), 16);
130
+ res.push({
131
+ tokenIn,
132
+ tokenOut,
133
+ fee,
134
+ });
135
+ tokenIn = tokenOut;
136
+ loc -= 46;
137
+ }
138
+ return res;
139
+ }
140
+ exports.parseV3PathExactOut = parseV3PathExactOut;
141
+ function v4RouterCallToParams(actions) {
142
+ return actions.map((action) => {
143
+ return {
144
+ name: action.actionName,
145
+ value: action.params.map((param) => {
146
+ return {
147
+ name: param.name,
148
+ value: param.value,
149
+ };
150
+ }),
151
+ };
152
+ });
153
+ }
154
+ //# sourceMappingURL=commandParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commandParser.js","sourceRoot":"","sources":["../../../../src/utils/commandParser.ts"],"names":[],"mappings":";;;;AAAA,4CAAoD;AACpD,oDAAmD;AACnD,gGAA0D;AAC1D,4CAA8C;AAC9C,mDAAuF;AACvF,4DAOgC;AAChC,kDAA4E;AA2B5E,qCAAqC;AACrC,MAAsB,aAAa;IAG1B,MAAM,CAAC,aAAa,CACzB,QAAgB,EAChB,YAAoC,kCAAsB,CAAC,IAAI;QAE/D,mFAAmF;QACnF,6EAA6E;QAC7E,MAAM,iBAAiB,GAAG,IAAA,2BAAe,EAAC,SAAS,CAAC;YAClD,CAAC,CAAC,EAAE,GAAG,mCAAkB,EAAE,GAAG,0CAAyB,EAAE;YACzD,CAAC,CAAC,mCAAkB,CAAA;QACtB,MAAM,aAAa,GAAG,IAAI,oBAAoB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAA;QAC5E,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;QAClF,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,CAAA;QAC/C,OAAO,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC9C,CAAC;;AAhBH,sCAiBC;AAhBe,uBAAS,GAAc,IAAI,eAAS,CAAC,8BAAe,CAAC,GAAG,CAAC,CAAA;AAkBzE,oDAAoD;AACpD,MAAa,oBAAoB;IAC/B,YACmB,iBAAqC,EACrC,YAAoC,kCAAsB,CAAC,IAAI;QAD/D,sBAAiB,GAAjB,iBAAiB,CAAoB;QACrC,cAAS,GAAT,SAAS,CAAsD;IAC/E,CAAC;IAEG,KAAK,CAAC,QAAgB,EAAE,MAAgB;QAC7C,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;QAE/D,OAAO;YACL,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,WAAwB,EAAE,CAAS,EAAE,EAAE;gBACjE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;gBAEtD,IAAI,UAAU,CAAC,MAAM,KAAK,uBAAM,CAAC,SAAS,EAAE;oBAC1C,mGAAmG;oBACnG,MAAM,EAAE,OAAO,EAAE,GAAG,4BAAmB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAiC,CAAC,CAAA;oBACxG,OAAO;wBACL,WAAW,EAAE,4BAAW,CAAC,WAAW,CAAC;wBACrC,WAAW;wBACX,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC;qBACtC,CAAA;iBACF;qBAAM,IAAI,UAAU,CAAC,MAAM,KAAK,uBAAM,CAAC,GAAG,EAAE;oBAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;oBAChC,MAAM,SAAS,GAAG,qBAAe,CAAC,MAAM,CACtC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EACrC,MAAM,CAAC,CAAC,CAAC,CACV,CAAA;oBAED,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,CAAS,EAAE,EAAE;wBACrD,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;4BAC3B,KAAK,0BAAS,CAAC,aAAa;gCAC1B,OAAO;oCACL,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;oCACpB,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC;iCACjC,CAAA;4BACH,KAAK,0BAAS,CAAC,cAAc;gCAC3B,OAAO;oCACL,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;oCACpB,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;iCAClC,CAAA;4BACH;gCACE,OAAO;oCACL,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;oCACpB,KAAK,EAAE,KAAK;iCACb,CAAA;yBACJ;oBACH,CAAC,CAAC,CAAA;oBACF,OAAO;wBACL,WAAW,EAAE,4BAAW,CAAC,WAAW,CAAC;wBACrC,WAAW;wBACX,MAAM;qBACP,CAAA;iBACF;qBAAM,IAAI,UAAU,CAAC,MAAM,KAAK,uBAAM,CAAC,SAAS,EAAE;oBACjD,sCAAsC;oBACtC,OAAO;wBACL,WAAW,EAAE,4BAAW,CAAC,WAAW,CAAC;wBACrC,WAAW;wBACX,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;qBACnE,CAAA;iBACF;qBAAM;oBACL,MAAM,IAAI,KAAK,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAA;iBACrD;YACH,CAAC,CAAC;SACH,CAAA;IACH,CAAC;IAED,wCAAwC;IAChC,MAAM,CAAC,WAAW,CAAC,QAAgB;QACzC,MAAM,YAAY,GAAkB,EAAE,CAAA;QAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;YACzC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAgB,CAAC,CAAA;SACrD;QAED,OAAO,YAAY,CAAA;IACrB,CAAC;CACF;AA7ED,oDA6EC;AAED,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC3C,IAAI,OAAO,GAAG,IAAA,oBAAU,EAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IACvD,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,MAAM,GAAG,GAAiB,EAAE,CAAA;IAC5B,OAAO,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE;QAChC,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAA;QAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACxD,MAAM,QAAQ,GAAG,IAAA,oBAAU,EAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QAE5D,GAAG,CAAC,IAAI,CAAC;YACP,OAAO;YACP,QAAQ;YACR,GAAG;SACJ,CAAC,CAAA;QACF,OAAO,GAAG,QAAQ,CAAA;QAClB,GAAG,IAAI,EAAE,CAAA;KACV;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AApBD,gDAoBC;AAED,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC3C,IAAI,OAAO,GAAG,IAAA,oBAAU,EAAC,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAA;IAC1E,IAAI,GAAG,GAAG,YAAY,CAAC,MAAM,GAAG,EAAE,CAAA,CAAC,4DAA4D;IAC/F,MAAM,GAAG,GAAiB,EAAE,CAAA;IAC5B,OAAO,GAAG,IAAI,CAAC,EAAE;QACf,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAA;QAC5D,MAAM,QAAQ,GAAG,IAAA,oBAAU,EAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;QAE1D,GAAG,CAAC,IAAI,CAAC;YACP,OAAO;YACP,QAAQ;YACR,GAAG;SACJ,CAAC,CAAA;QACF,OAAO,GAAG,QAAQ,CAAA;QAElB,GAAG,IAAI,EAAE,CAAA;KACV;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AArBD,kDAqBC;AAED,SAAS,oBAAoB,CAAC,OAAkC;IAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC5B,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,UAAU;YACvB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACjC,OAAO;oBACL,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB,CAAA;YACH,CAAC,CAAC;SACH,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { BigNumber } from '@ethersproject/bignumber';
2
+ import { NormalizedSwapSpecification } from '../types/encodeSwaps';
3
+ export type EncodeSwapsAmounts = {
4
+ exactOrMaxAmountIn: BigNumber;
5
+ grossMinOrExactAmountOut: BigNumber;
6
+ netMinOrExactAmountOut: BigNumber;
7
+ };
8
+ export declare function computeEncodeSwapsAmounts(spec: NormalizedSwapSpecification): EncodeSwapsAmounts;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.computeEncodeSwapsAmounts = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const bignumber_1 = require("@ethersproject/bignumber");
6
+ const tiny_invariant_1 = tslib_1.__importDefault(require("tiny-invariant"));
7
+ const sdk_core_1 = require("@kittycorn-labs/sdk-core");
8
+ const constants_1 = require("./constants");
9
+ const normalizeEncodeSwapsSpec_1 = require("./normalizeEncodeSwapsSpec");
10
+ const portionFees_1 = require("./portionFees");
11
+ // Slippage is applied to the quote: scaled down to a floor for exact-input output,
12
+ // scaled up to a ceiling for exact-output input. The unscaled side is the user's exact value.
13
+ // Portion fees are fractions of the gross output; flat fees pair with exact-output.
14
+ function computeEncodeSwapsAmounts(spec) {
15
+ const routingAmount = bignumber_1.BigNumber.from(spec.routing.amount.quotient.toString());
16
+ const routingQuote = bignumber_1.BigNumber.from(spec.routing.quote.quotient.toString());
17
+ const slippageNumerator = bignumber_1.BigNumber.from(spec.slippageTolerance.numerator.toString());
18
+ const slippageDenominator = bignumber_1.BigNumber.from(spec.slippageTolerance.denominator.toString());
19
+ if (spec.tradeType === sdk_core_1.TradeType.EXACT_INPUT) {
20
+ const grossMinOrExactAmountOut = routingQuote
21
+ .mul(slippageDenominator.sub(slippageNumerator))
22
+ .div(slippageDenominator);
23
+ // Replays the encoded cascade at the gross minimum, so the sweep floor expects exactly what the commands leave behind.
24
+ const feeAmount = (0, portionFees_1.simulatePortionFeeDeduction)(grossMinOrExactAmountOut, (0, portionFees_1.scalePortionFees)((0, normalizeEncodeSwapsSpec_1.toPortionFeeList)(spec.fee)), (0, constants_1.isAtLeastV2_1_1)(spec.urVersion));
25
+ return {
26
+ exactOrMaxAmountIn: routingAmount,
27
+ grossMinOrExactAmountOut,
28
+ netMinOrExactAmountOut: grossMinOrExactAmountOut.sub(feeAmount),
29
+ };
30
+ }
31
+ const exactOrMaxAmountIn = routingQuote.mul(slippageDenominator.add(slippageNumerator)).div(slippageDenominator);
32
+ const grossMinOrExactAmountOut = routingAmount;
33
+ // Flat fees are absolute TRANSFERs, so the router must hold every one on top of the settled amount.
34
+ let flatFeeTotal = bignumber_1.BigNumber.from(0);
35
+ for (const flatFee of (0, normalizeEncodeSwapsSpec_1.toFlatFeeList)(spec.fee)) {
36
+ flatFeeTotal = flatFeeTotal.add(bignumber_1.BigNumber.from(flatFee.amount));
37
+ }
38
+ (0, tiny_invariant_1.default)(flatFeeTotal.lte(grossMinOrExactAmountOut), 'FEE_TOTAL_GT_AMOUNT_OUT');
39
+ return {
40
+ exactOrMaxAmountIn,
41
+ grossMinOrExactAmountOut,
42
+ netMinOrExactAmountOut: grossMinOrExactAmountOut.sub(flatFeeTotal),
43
+ };
44
+ }
45
+ exports.computeEncodeSwapsAmounts = computeEncodeSwapsAmounts;
46
+ //# sourceMappingURL=computeEncodeSwapsAmounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeEncodeSwapsAmounts.js","sourceRoot":"","sources":["../../../../src/utils/computeEncodeSwapsAmounts.ts"],"names":[],"mappings":";;;;AAAA,wDAAoD;AACpD,4EAAsC;AACtC,uDAAoD;AAEpD,2CAA6C;AAC7C,yEAA4E;AAC5E,+CAA6E;AAU7E,mFAAmF;AACnF,8FAA8F;AAC9F,oFAAoF;AACpF,SAAgB,yBAAyB,CAAC,IAAiC;IACzE,MAAM,aAAa,GAAG,qBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC7E,MAAM,YAAY,GAAG,qBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC3E,MAAM,iBAAiB,GAAG,qBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;IACrF,MAAM,mBAAmB,GAAG,qBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEzF,IAAI,IAAI,CAAC,SAAS,KAAK,oBAAS,CAAC,WAAW,EAAE;QAC5C,MAAM,wBAAwB,GAAG,YAAY;aAC1C,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;aAC/C,GAAG,CAAC,mBAAmB,CAAC,CAAA;QAE3B,uHAAuH;QACvH,MAAM,SAAS,GAAG,IAAA,yCAA2B,EAC3C,wBAAwB,EACxB,IAAA,8BAAgB,EAAC,IAAA,2CAAgB,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,IAAA,2BAAe,EAAC,IAAI,CAAC,SAAS,CAAC,CAChC,CAAA;QAED,OAAO;YACL,kBAAkB,EAAE,aAAa;YACjC,wBAAwB;YACxB,sBAAsB,EAAE,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC;SAChE,CAAA;KACF;IAED,MAAM,kBAAkB,GAAG,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAChH,MAAM,wBAAwB,GAAG,aAAa,CAAA;IAE9C,oGAAoG;IACpG,IAAI,YAAY,GAAG,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACpC,KAAK,MAAM,OAAO,IAAI,IAAA,wCAAa,EAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAC7C,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,qBAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;KAChE;IACD,IAAA,wBAAS,EAAC,YAAY,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,yBAAyB,CAAC,CAAA;IAEhF,OAAO;QACL,kBAAkB;QAClB,wBAAwB;QACxB,sBAAsB,EAAE,wBAAwB,CAAC,GAAG,CAAC,YAAY,CAAC;KACnE,CAAA;AACH,CAAC;AAxCD,8DAwCC"}
@@ -1,30 +1,46 @@
1
- import { BigNumber } from 'ethers';
2
- export declare enum UniversalRouterVersion {
3
- V1_2 = "1.2",
4
- V2_0 = "2.0"
5
- }
6
- export declare type RouterConfig = {
7
- address: string;
8
- creationBlock: number;
9
- };
10
- declare type ChainConfig = {
11
- weth: string;
12
- routerConfigs: {
13
- [key in UniversalRouterVersion]: RouterConfig;
14
- };
15
- };
16
- export declare const CHAIN_CONFIGS: {
17
- [key: number]: ChainConfig;
18
- };
19
- export declare const UNIVERSAL_ROUTER_ADDRESS: (version: UniversalRouterVersion, chainId: number) => string;
20
- export declare const UNIVERSAL_ROUTER_CREATION_BLOCK: (version: UniversalRouterVersion, chainId: number) => number;
21
- export declare const WETH_ADDRESS: (chainId: number) => string;
22
- export declare const CONTRACT_BALANCE: BigNumber;
23
- export declare const ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
24
- export declare const E_ETH_ADDRESS = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
25
- export declare const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
26
- export declare const MAX_UINT256: BigNumber;
27
- export declare const MAX_UINT160: BigNumber;
28
- export declare const SENDER_AS_RECIPIENT = "0x0000000000000000000000000000000000000001";
29
- export declare const ROUTER_AS_RECIPIENT = "0x0000000000000000000000000000000000000002";
30
- export {};
1
+ import { BigNumber } from '@ethersproject/bignumber';
2
+ export declare enum UniversalRouterVersion {
3
+ V1_2 = "1.2",
4
+ V2_0 = "2.0",
5
+ V2_1_1 = "2.1.1",
6
+ V2_1_2 = "2.1.2",
7
+ V2_2_0 = "2.2.0"
8
+ }
9
+ /** Version assumed when a caller does not pass `urVersion`; kept at V2_0 for backward compatibility. */
10
+ export declare const DEFAULT_UR_VERSION = UniversalRouterVersion.V2_0;
11
+ /**
12
+ * Check if a UniversalRouterVersion is at least V2_1_1.
13
+ * Duplicated from @kittycorn-labs/v4-sdk's isAtLeastV2_1_1 (which operates on URVersion)
14
+ * to avoid coupling universal-router-sdk's version logic to v4-sdk.
15
+ */
16
+ export declare function isAtLeastV2_1_1(version?: UniversalRouterVersion): boolean;
17
+ /** Check if a UniversalRouterVersion is at least V2_0, the first router with the position-manager commands. */
18
+ export declare function isAtLeastV2_0(version?: UniversalRouterVersion): boolean;
19
+ export type RouterConfig = {
20
+ address: string;
21
+ creationBlock: number;
22
+ };
23
+ type ChainConfig = {
24
+ weth: string;
25
+ nativeErc20BalanceAlias: boolean;
26
+ routerConfigs: {
27
+ [key in UniversalRouterVersion]?: RouterConfig;
28
+ };
29
+ swapProxy?: string;
30
+ };
31
+ export declare const CHAIN_CONFIGS: {
32
+ [key: number]: ChainConfig;
33
+ };
34
+ export declare const UNIVERSAL_ROUTER_ADDRESS: (version: UniversalRouterVersion, chainId: number) => string;
35
+ export declare const SWAP_PROXY_ADDRESS: (chainId: number) => string;
36
+ export declare const UNIVERSAL_ROUTER_CREATION_BLOCK: (version: UniversalRouterVersion, chainId: number) => number;
37
+ export declare const WETH_ADDRESS: (chainId: number) => string;
38
+ export declare const CONTRACT_BALANCE: BigNumber;
39
+ export declare const ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
40
+ export declare const E_ETH_ADDRESS = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
41
+ export declare const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
42
+ export declare const MAX_UINT256: BigNumber;
43
+ export declare const MAX_UINT160: BigNumber;
44
+ export declare const SENDER_AS_RECIPIENT = "0x0000000000000000000000000000000000000001";
45
+ export declare const ROUTER_AS_RECIPIENT = "0x0000000000000000000000000000000000000002";
46
+ export {};