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