@kittycorn-labs/universal-router-sdk 1.4.42 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,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,4 @@
1
+ export * from './uniswap';
2
+ export * from './unwrapWETH';
3
+ export * from './across';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export * from './actions';
2
+ export * from './Command';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}