@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,282 @@
1
+ import invariant from 'tiny-invariant';
2
+ import { BigNumber } from '@ethersproject/bignumber';
3
+ import { CONTRACT_BALANCE, ETH_ADDRESS } from './constants.js';
4
+ function v4ActionSpendsToken(action, tokenAddress) {
5
+ switch (action.action) {
6
+ case 'SETTLE':
7
+ case 'SETTLE_ALL':
8
+ return action.currency.toLowerCase() === tokenAddress;
9
+ case 'SWAP_EXACT_IN':
10
+ return action.currencyIn.toLowerCase() === tokenAddress;
11
+ case 'SWAP_EXACT_IN_SINGLE': {
12
+ const spent = action.zeroForOne ? action.poolKey.currency0 : action.poolKey.currency1;
13
+ return spent.toLowerCase() === tokenAddress;
14
+ }
15
+ default:
16
+ return false;
17
+ }
18
+ }
19
+ // Whether a step draws the trade's input token, i.e. is a candidate first hop.
20
+ export function stepSpendsToken(step, inputTokenAddress) {
21
+ var _a;
22
+ const tokenAddress = inputTokenAddress.toLowerCase();
23
+ switch (step.type) {
24
+ case 'V2_SWAP_EXACT_IN':
25
+ return ((_a = step.path[0]) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === tokenAddress;
26
+ case 'V3_SWAP_EXACT_IN':
27
+ // v3 exact-in paths are encoded input-first: the first 20 bytes are the input token
28
+ return step.path.slice(0, 42).toLowerCase() === tokenAddress;
29
+ case 'V4_SWAP':
30
+ return step.v4Actions.some((action) => v4ActionSpendsToken(action, tokenAddress));
31
+ default:
32
+ return false;
33
+ }
34
+ }
35
+ // The SETTLE that funds a v4 step's input-token swaps (SETTLE_ALL is refused upstream).
36
+ export function isInputSettle(action, tokenAddress) {
37
+ return action.action === 'SETTLE' && action.currency.toLowerCase() === tokenAddress;
38
+ }
39
+ export function isInputSwap(action, tokenAddress) {
40
+ return ((action.action === 'SWAP_EXACT_IN' && action.currencyIn.toLowerCase() === tokenAddress) ||
41
+ (action.action === 'SWAP_EXACT_IN_SINGLE' && v4ActionSpendsToken(action, tokenAddress)));
42
+ }
43
+ export function v4SwapAmountIn(action) {
44
+ return action.action === 'SWAP_EXACT_IN' || action.action === 'SWAP_EXACT_IN_SINGLE'
45
+ ? BigNumber.from(action.amountIn)
46
+ : BigNumber.from(0);
47
+ }
48
+ // Sum of the fixed amounts the input-spending swaps take, or the settle amount when the
49
+ // plan funds them with a single concrete settle. Zero when nothing concrete is present
50
+ // (sentinels / open-delta), which the split logic treats as "not comparable".
51
+ function v4StepSpendAmount(actions, tokenAddress) {
52
+ const settle = actions.find((action) => isInputSettle(action, tokenAddress));
53
+ if (settle && settle.action === 'SETTLE') {
54
+ const amount = BigNumber.from(settle.amount);
55
+ if (amount.gt(0) && !amount.eq(CONTRACT_BALANCE)) {
56
+ return amount;
57
+ }
58
+ }
59
+ return actions
60
+ .filter((action) => isInputSwap(action, tokenAddress))
61
+ .reduce((total, action) => total.add(v4SwapAmountIn(action)), BigNumber.from(0));
62
+ }
63
+ function applyToV4Actions(actions, tokenAddress) {
64
+ var _a;
65
+ const hasInputSettle = actions.some((action) => isInputSettle(action, tokenAddress));
66
+ // The settle that funds the swaps now takes the router's whole balance. Caller order is
67
+ // preserved, so validateEncodeSwaps requires that settle to precede the input swaps.
68
+ const settled = actions.map((action) => isInputSettle(action, tokenAddress)
69
+ ? { ...action, amount: CONTRACT_BALANCE.toString(), payerIsUser: false }
70
+ : action);
71
+ // Exactly one input swap may consume the open delta (amountIn 0). With several input
72
+ // swaps (a split inside the step) the others keep their quoted slices and the remainder
73
+ // moves after them, so it absorbs the delivery variance and the fixed slices are never
74
+ // starved. A plan that already nominates its remainder (GuideStar writes intermediate
75
+ // steps that way) keeps that one rather than gaining a second.
76
+ const swapIndexes = settled
77
+ .map((action, index) => (isInputSwap(action, tokenAddress) ? index : -1))
78
+ .filter((index) => index >= 0);
79
+ const openDeltaIndexes = swapIndexes.filter((index) => v4SwapAmountIn(settled[index]).isZero());
80
+ invariant(openDeltaIndexes.length <= 1, 'ROUTER_BALANCE_INPUT_MULTIPLE_OPEN_DELTA_SWAPS');
81
+ let transformed = settled;
82
+ if (swapIndexes.length === 1) {
83
+ transformed = settled.map((action, index) => (index === swapIndexes[0] ? { ...action, amountIn: 0 } : action));
84
+ }
85
+ else if (swapIndexes.length > 1) {
86
+ let remainderIndex = (_a = openDeltaIndexes[0]) !== null && _a !== void 0 ? _a : swapIndexes[0];
87
+ if (openDeltaIndexes.length === 0) {
88
+ for (const index of swapIndexes) {
89
+ if (v4SwapAmountIn(settled[index]).gt(v4SwapAmountIn(settled[remainderIndex]))) {
90
+ remainderIndex = index;
91
+ }
92
+ }
93
+ }
94
+ const remainder = { ...settled[remainderIndex], amountIn: 0 };
95
+ const lastSwapIndex = swapIndexes[swapIndexes.length - 1];
96
+ const reordered = [];
97
+ settled.forEach((action, index) => {
98
+ if (index === remainderIndex) {
99
+ return;
100
+ }
101
+ reordered.push(action);
102
+ if (index === lastSwapIndex ||
103
+ (lastSwapIndex === remainderIndex && index === swapIndexes[swapIndexes.length - 2])) {
104
+ reordered.push(remainder);
105
+ }
106
+ });
107
+ transformed = reordered;
108
+ }
109
+ const result = hasInputSettle
110
+ ? transformed
111
+ : // No settle in the plan (addTrade-style shapes): fund the open delta explicitly.
112
+ [
113
+ {
114
+ action: 'SETTLE',
115
+ currency: tokenAddress,
116
+ amount: CONTRACT_BALANCE.toString(),
117
+ payerIsUser: false,
118
+ },
119
+ ...transformed,
120
+ ];
121
+ // Two swaps consuming the same open delta means the first takes it all and the second
122
+ // gets nothing, which encodes cleanly and reverts on chain.
123
+ invariant(result.filter((action) => isInputSwap(action, tokenAddress) && v4SwapAmountIn(action).isZero()).length === 1, 'ROUTER_BALANCE_INPUT_OPEN_DELTA_NOT_UNIQUE');
124
+ return result;
125
+ }
126
+ // The router holds the funds, so no leg of a spender step may pull from the user: a
127
+ // payerIsUser flag left over from a wallet-mode plan would encode as
128
+ // permit2.transferFrom(msg.sender) on-chain, and on this arm msg.sender is the filler,
129
+ // not the swapper. EVERY settle in the step is cleared, not just the one funding the
130
+ // input token: a v4 step can carry a second settle in an unrelated currency, which is
131
+ // not the input token and so was previously left holding its flag while the step-level
132
+ // validator waiver excused the whole step. Amounts are left untouched; this is used for
133
+ // the fixed legs of a split.
134
+ function clearPayerIsUser(step) {
135
+ switch (step.type) {
136
+ case 'V2_SWAP_EXACT_IN':
137
+ case 'V3_SWAP_EXACT_IN':
138
+ return { ...step, payerIsUser: false };
139
+ case 'V4_SWAP':
140
+ return {
141
+ ...step,
142
+ v4Actions: step.v4Actions.map((action) => action.action === 'SETTLE' ? { ...action, payerIsUser: false } : action),
143
+ };
144
+ default:
145
+ // validateEncodeSwaps refuses exact-out and unexpected shapes before this runs
146
+ invariant(false, 'ROUTER_BALANCE_INPUT_UNSUPPORTED_STEP');
147
+ }
148
+ }
149
+ function rewriteSpendingStep(step, tokenAddress) {
150
+ const cleared = clearPayerIsUser(step);
151
+ switch (cleared.type) {
152
+ case 'V2_SWAP_EXACT_IN':
153
+ case 'V3_SWAP_EXACT_IN':
154
+ return { ...cleared, amountIn: CONTRACT_BALANCE.toString() };
155
+ case 'V4_SWAP':
156
+ return { ...cleared, v4Actions: applyToV4Actions(cleared.v4Actions, tokenAddress) };
157
+ default:
158
+ invariant(false, 'ROUTER_BALANCE_INPUT_UNSUPPORTED_STEP');
159
+ }
160
+ }
161
+ // The remainder leg of a split: the largest spender by input amount, which absorbs all
162
+ // delivery variance. A v4 leg's spend is read from its input settle (or the sum of its
163
+ // input swaps); a leg with no concrete amount cannot be compared and is refused.
164
+ export function stepSpendAmount(step, tokenAddress) {
165
+ switch (step.type) {
166
+ case 'V2_SWAP_EXACT_IN':
167
+ case 'V3_SWAP_EXACT_IN':
168
+ return BigNumber.from(step.amountIn);
169
+ case 'V4_SWAP':
170
+ return v4StepSpendAmount(step.v4Actions, tokenAddress);
171
+ default:
172
+ return BigNumber.from(0);
173
+ }
174
+ }
175
+ function pickRemainderIndex(swapSteps, spenderIndexes, tokenAddress) {
176
+ let remainderIndex = spenderIndexes[0];
177
+ let remainderAmount = BigNumber.from(-1);
178
+ for (const index of spenderIndexes) {
179
+ const amount = stepSpendAmount(swapSteps[index], tokenAddress);
180
+ invariant(amount.gt(0) && !amount.eq(CONTRACT_BALANCE), 'ROUTER_BALANCE_INPUT_SPLIT_LEG_AMOUNT_UNKNOWN');
181
+ if (amount.gt(remainderAmount)) {
182
+ remainderAmount = amount;
183
+ remainderIndex = index;
184
+ }
185
+ }
186
+ return remainderIndex;
187
+ }
188
+ // The unwrap converts the delivered pot to ETH, so the greedy claim moves to the leg
189
+ // spending that ETH; the WETH legs keep their quoted amounts from router custody.
190
+ function applyUnwrapBoundaryRemainder(swapSteps, unwrapIndex, tokenAddress) {
191
+ const nativeSpenders = swapSteps
192
+ .map((step, index) => (index > unwrapIndex && stepSpendsToken(step, ETH_ADDRESS) ? index : -1))
193
+ .filter((index) => index >= 0);
194
+ invariant(nativeSpenders.length > 0, 'ROUTER_BALANCE_INPUT_UNWRAP_WITHOUT_NATIVE_LEG');
195
+ invariant(nativeSpenders.length === 1, 'ROUTER_BALANCE_INPUT_UNWRAP_MULTIPLE_NATIVE_LEGS');
196
+ return swapSteps.map((step, index) => {
197
+ if (index === nativeSpenders[0]) {
198
+ return rewriteSpendingStep(step, ETH_ADDRESS);
199
+ }
200
+ return stepSpendsToken(step, tokenAddress) ? clearPayerIsUser(step) : step;
201
+ });
202
+ }
203
+ /**
204
+ * Rewrites a step plan to spend the router's entire input-token balance.
205
+ *
206
+ * Single spender: its v2/v3 exact-in amount becomes the CONTRACT_BALANCE
207
+ * sentinel (a v4 spender settles CONTRACT_BALANCE; one of its input swaps
208
+ * consumes the open delta while any others keep their quoted slices).
209
+ *
210
+ * Split routes (multiple spenders of the input token): every spender but the
211
+ * largest keeps its quoted amount, funded from router custody; the largest is
212
+ * rewritten to CONTRACT_BALANCE and MOVED after the other spenders, so it
213
+ * absorbs all delivery variance and the fill only reverts when delivery
214
+ * cannot cover the fixed legs.
215
+ */
216
+ export function applyRouterBalanceInputToSteps(swapSteps, inputTokenAddress, wrappedNativeAddress) {
217
+ var _a;
218
+ const tokenAddress = inputTokenAddress.toLowerCase();
219
+ // UNWRAP_WETH takes the router's whole WETH balance, so with WETH delivered it is
220
+ // already the greedy claim and the legs before it stay fixed.
221
+ const unwrapIndex = swapSteps.findIndex((step) => step.type === 'UNWRAP_WETH');
222
+ if (unwrapIndex >= 0 && tokenAddress === (wrappedNativeAddress === null || wrappedNativeAddress === void 0 ? void 0 : wrappedNativeAddress.toLowerCase())) {
223
+ return applyUnwrapBoundaryRemainder(swapSteps, unwrapIndex, tokenAddress);
224
+ }
225
+ const spenderIndexes = swapSteps
226
+ .map((step, index) => (stepSpendsToken(step, tokenAddress) ? index : -1))
227
+ .filter((index) => index >= 0);
228
+ invariant(spenderIndexes.length > 0, 'ROUTER_BALANCE_INPUT_FIRST_STEP');
229
+ if (spenderIndexes.length === 1) {
230
+ return swapSteps.map((step, index) => index === spenderIndexes[0] ? rewriteSpendingStep(step, tokenAddress) : step);
231
+ }
232
+ const remainderIndex = pickRemainderIndex(swapSteps, spenderIndexes, tokenAddress);
233
+ const remainder = rewriteSpendingStep(swapSteps[remainderIndex], tokenAddress);
234
+ const lastSpenderIndex = spenderIndexes[spenderIndexes.length - 1];
235
+ const fixLeg = (step, index) => spenderIndexes.includes(index) ? clearPayerIsUser(step) : step;
236
+ // Already the last spender: nothing to move, and moving it would drag the
237
+ // trailing output-side steps along with it.
238
+ if (remainderIndex === lastSpenderIndex) {
239
+ return swapSteps.map((step, index) => (index === remainderIndex ? remainder : fixLeg(step, index)));
240
+ }
241
+ // A remainder that carries its own continuation hops cannot be placed by
242
+ // position: routers order steps either leg-by-leg or by token (every first hop,
243
+ // then everything downstream), and the two orderings want opposite insertion
244
+ // points. Refuse rather than guess and emit a fill that reverts.
245
+ const nextSpenderIndex = (_a = spenderIndexes.find((index) => index > remainderIndex)) !== null && _a !== void 0 ? _a : swapSteps.length;
246
+ invariant(nextSpenderIndex === remainderIndex + 1, 'ROUTER_BALANCE_INPUT_REMAINDER_LEG_NOT_REORDERABLE');
247
+ // So the remainder is a single step, and it moves to just after the last other
248
+ // spender: late enough to absorb delivery variance, early enough that the
249
+ // steps consuming what it produces still follow it.
250
+ const reordered = [];
251
+ swapSteps.forEach((step, index) => {
252
+ if (index === remainderIndex) {
253
+ return;
254
+ }
255
+ // fixed legs keep their quoted amounts but are funded from router custody too
256
+ reordered.push(fixLeg(step, index));
257
+ if (index === lastSpenderIndex) {
258
+ reordered.push(remainder);
259
+ }
260
+ });
261
+ return reordered;
262
+ }
263
+ /**
264
+ * Native-input variant: the plan leads with the route's WRAP_ETH, which is resized to wrap
265
+ * the router's entire native balance (attached msg.value plus any stray ETH, so no value
266
+ * is left behind — UR never refunds msg.value); the wrapped-token hop that follows then
267
+ * spends CONTRACT_BALANCE like an ERC20 balance swap.
268
+ *
269
+ * `validateEncodeSwaps` guarantees steps[0] is a router-recipient WRAP_ETH and exactly one
270
+ * later step spends the wrapped token.
271
+ */
272
+ export function applyNativeRouterBalanceInputToSteps(swapSteps, wrappedTokenAddress) {
273
+ const wrap = swapSteps[0];
274
+ invariant(wrap !== undefined && wrap.type === 'WRAP_ETH', 'ROUTER_BALANCE_INPUT_NATIVE_REQUIRES_WRAP');
275
+ // After the full wrap, the plan is an ordinary (possibly split) balance swap
276
+ // of the wrapped token.
277
+ return [
278
+ { ...wrap, amount: CONTRACT_BALANCE.toString() },
279
+ ...applyRouterBalanceInputToSteps(swapSteps.slice(1), wrappedTokenAddress),
280
+ ];
281
+ }
282
+ //# sourceMappingURL=routerBalanceSteps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routerBalanceSteps.js","sourceRoot":"","sources":["../../../../src/utils/routerBalanceSteps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { UniversalRouterVersion } from './constants';
2
+ import { AcrossV4DepositV3Params } from '../entities/actions/across';
3
+ /**
4
+ * CommandTypes
5
+ * @description Flags that modify a command's execution
6
+ * @enum {number}
7
+ */
8
+ export declare enum CommandType {
9
+ V3_SWAP_EXACT_IN = 0,
10
+ V3_SWAP_EXACT_OUT = 1,
11
+ PERMIT2_TRANSFER_FROM = 2,
12
+ PERMIT2_PERMIT_BATCH = 3,
13
+ SWEEP = 4,
14
+ TRANSFER = 5,
15
+ PAY_PORTION = 6,
16
+ PAY_PORTION_FULL_PRECISION = 7,
17
+ V2_SWAP_EXACT_IN = 8,
18
+ V2_SWAP_EXACT_OUT = 9,
19
+ PERMIT2_PERMIT = 10,
20
+ WRAP_ETH = 11,
21
+ UNWRAP_WETH = 12,
22
+ PERMIT2_TRANSFER_FROM_BATCH = 13,
23
+ BALANCE_CHECK_ERC20 = 14,
24
+ V4_SWAP = 16,
25
+ V3_POSITION_MANAGER_PERMIT = 17,
26
+ V3_POSITION_MANAGER_CALL = 18,
27
+ V4_INITIALIZE_POOL = 19,
28
+ V4_POSITION_MANAGER_CALL = 20,
29
+ EXECUTE_SUB_PLAN = 33,
30
+ ACROSS_V4_DEPOSIT_V3 = 64
31
+ }
32
+ export declare enum Subparser {
33
+ V3PathExactIn = 0,
34
+ V3PathExactOut = 1
35
+ }
36
+ export declare enum Parser {
37
+ Abi = 0,
38
+ V4Actions = 1,
39
+ V3Actions = 2
40
+ }
41
+ export type ParamType = {
42
+ readonly name: string;
43
+ readonly type: string;
44
+ readonly subparser?: Subparser;
45
+ };
46
+ export type CommandDefinition = {
47
+ parser: Parser.Abi;
48
+ params: ParamType[];
49
+ } | {
50
+ parser: Parser.V4Actions;
51
+ } | {
52
+ parser: Parser.V3Actions;
53
+ };
54
+ export declare const COMMAND_DEFINITION: {
55
+ [key in CommandType]: CommandDefinition;
56
+ };
57
+ export declare const V2V3_SWAP_COMMANDS_V2_1_1: {
58
+ [key: number]: CommandDefinition;
59
+ };
60
+ export declare class RoutePlanner {
61
+ commands: string;
62
+ inputs: string[];
63
+ constructor();
64
+ addSubPlan(subplan: RoutePlanner): RoutePlanner;
65
+ addCommand(type: CommandType, parameters: any[], allowRevert?: boolean, urVersion?: UniversalRouterVersion): RoutePlanner;
66
+ /**
67
+ * Add Across bridge deposit command for cross-chain bridging
68
+ * @param params AcrossV4DepositV3Params containing bridge parameters
69
+ * @returns RoutePlanner instance for chaining
70
+ */
71
+ addAcrossBridge(params: AcrossV4DepositV3Params): RoutePlanner;
72
+ }
73
+ export type RouterCommand = {
74
+ type: CommandType;
75
+ encodedInput: string;
76
+ };
77
+ export declare function createCommand(type: CommandType, parameters: any[], urVersion?: UniversalRouterVersion): RouterCommand;