@uniswap/router-sdk 2.0.1 → 2.0.2

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 (176) hide show
  1. package/dist/{cjs/src/approveAndCall.d.ts → approveAndCall.d.ts} +33 -33
  2. package/dist/{types/src/constants.d.ts → constants.d.ts} +13 -13
  3. package/dist/{types/src/entities → entities}/mixedRoute/route.d.ts +29 -29
  4. package/dist/{esm/src/entities → entities}/mixedRoute/trade.d.ts +183 -183
  5. package/dist/{cjs/src/entities → entities}/protocol.d.ts +6 -6
  6. package/dist/{esm/src/entities → entities}/route.d.ts +40 -40
  7. package/dist/{esm/src/entities → entities}/trade.d.ts +127 -127
  8. package/dist/{cjs/src/index.d.ts → index.d.ts} +14 -14
  9. package/dist/index.js +8 -0
  10. package/dist/{cjs/src/multicallExtended.d.ts → multicallExtended.d.ts} +11 -11
  11. package/dist/{types/src/paymentsExtended.d.ts → paymentsExtended.d.ts} +15 -15
  12. package/dist/router-sdk.cjs.development.js +2460 -0
  13. package/dist/router-sdk.cjs.development.js.map +1 -0
  14. package/dist/router-sdk.cjs.production.min.js +2 -0
  15. package/dist/router-sdk.cjs.production.min.js.map +1 -0
  16. package/dist/router-sdk.esm.js +2427 -0
  17. package/dist/router-sdk.esm.js.map +1 -0
  18. package/dist/{cjs/src/swapRouter.d.ts → swapRouter.d.ts} +95 -95
  19. package/dist/{cjs/src/utils → utils}/TPool.d.ts +4 -4
  20. package/dist/{cjs/src/utils → utils}/encodeMixedRouteToPath.d.ts +9 -9
  21. package/dist/{types/src/utils → utils}/index.d.ts +16 -16
  22. package/dist/{cjs/src/utils → utils}/pathCurrency.d.ts +4 -4
  23. package/package.json +18 -33
  24. package/dist/cjs/src/approveAndCall.js +0 -111
  25. package/dist/cjs/src/approveAndCall.js.map +0 -1
  26. package/dist/cjs/src/constants.d.ts +0 -13
  27. package/dist/cjs/src/constants.js +0 -22
  28. package/dist/cjs/src/constants.js.map +0 -1
  29. package/dist/cjs/src/entities/mixedRoute/route.d.ts +0 -29
  30. package/dist/cjs/src/entities/mixedRoute/route.js +0 -119
  31. package/dist/cjs/src/entities/mixedRoute/route.js.map +0 -1
  32. package/dist/cjs/src/entities/mixedRoute/route.test.d.ts +0 -1
  33. package/dist/cjs/src/entities/mixedRoute/route.test.js +0 -469
  34. package/dist/cjs/src/entities/mixedRoute/route.test.js.map +0 -1
  35. package/dist/cjs/src/entities/mixedRoute/trade.d.ts +0 -183
  36. package/dist/cjs/src/entities/mixedRoute/trade.js +0 -357
  37. package/dist/cjs/src/entities/mixedRoute/trade.js.map +0 -1
  38. package/dist/cjs/src/entities/mixedRoute/trade.test.d.ts +0 -1
  39. package/dist/cjs/src/entities/mixedRoute/trade.test.js +0 -1010
  40. package/dist/cjs/src/entities/mixedRoute/trade.test.js.map +0 -1
  41. package/dist/cjs/src/entities/protocol.js +0 -11
  42. package/dist/cjs/src/entities/protocol.js.map +0 -1
  43. package/dist/cjs/src/entities/route.d.ts +0 -40
  44. package/dist/cjs/src/entities/route.js +0 -63
  45. package/dist/cjs/src/entities/route.js.map +0 -1
  46. package/dist/cjs/src/entities/route.test.d.ts +0 -1
  47. package/dist/cjs/src/entities/route.test.js +0 -192
  48. package/dist/cjs/src/entities/route.test.js.map +0 -1
  49. package/dist/cjs/src/entities/trade.d.ts +0 -127
  50. package/dist/cjs/src/entities/trade.js +0 -366
  51. package/dist/cjs/src/entities/trade.js.map +0 -1
  52. package/dist/cjs/src/entities/trade.test.d.ts +0 -1
  53. package/dist/cjs/src/entities/trade.test.js +0 -1267
  54. package/dist/cjs/src/entities/trade.test.js.map +0 -1
  55. package/dist/cjs/src/index.js +0 -18
  56. package/dist/cjs/src/index.js.map +0 -1
  57. package/dist/cjs/src/multicallExtended.js +0 -43
  58. package/dist/cjs/src/multicallExtended.js.map +0 -1
  59. package/dist/cjs/src/multicallExtended.test.d.ts +0 -1
  60. package/dist/cjs/src/multicallExtended.test.js +0 -22
  61. package/dist/cjs/src/multicallExtended.test.js.map +0 -1
  62. package/dist/cjs/src/paymentsExtended.d.ts +0 -15
  63. package/dist/cjs/src/paymentsExtended.js +0 -65
  64. package/dist/cjs/src/paymentsExtended.js.map +0 -1
  65. package/dist/cjs/src/paymentsExtended.test.d.ts +0 -1
  66. package/dist/cjs/src/paymentsExtended.test.js +0 -60
  67. package/dist/cjs/src/paymentsExtended.test.js.map +0 -1
  68. package/dist/cjs/src/swapRouter.js +0 -439
  69. package/dist/cjs/src/swapRouter.js.map +0 -1
  70. package/dist/cjs/src/swapRouter.test.d.ts +0 -1
  71. package/dist/cjs/src/swapRouter.test.js +0 -1161
  72. package/dist/cjs/src/swapRouter.test.js.map +0 -1
  73. package/dist/cjs/src/utils/TPool.js +0 -3
  74. package/dist/cjs/src/utils/TPool.js.map +0 -1
  75. package/dist/cjs/src/utils/encodeMixedRouteToPath.js +0 -90
  76. package/dist/cjs/src/utils/encodeMixedRouteToPath.js.map +0 -1
  77. package/dist/cjs/src/utils/encodeMixedRouteToPath.test.d.ts +0 -1
  78. package/dist/cjs/src/utils/encodeMixedRouteToPath.test.js +0 -136
  79. package/dist/cjs/src/utils/encodeMixedRouteToPath.test.js.map +0 -1
  80. package/dist/cjs/src/utils/index.d.ts +0 -16
  81. package/dist/cjs/src/utils/index.js +0 -51
  82. package/dist/cjs/src/utils/index.js.map +0 -1
  83. package/dist/cjs/src/utils/pathCurrency.js +0 -35
  84. package/dist/cjs/src/utils/pathCurrency.js.map +0 -1
  85. package/dist/cjs/src/utils/pathCurrency.test.d.ts +0 -1
  86. package/dist/cjs/src/utils/pathCurrency.test.js +0 -17
  87. package/dist/cjs/src/utils/pathCurrency.test.js.map +0 -1
  88. package/dist/esm/src/approveAndCall.d.ts +0 -33
  89. package/dist/esm/src/approveAndCall.js +0 -105
  90. package/dist/esm/src/approveAndCall.js.map +0 -1
  91. package/dist/esm/src/constants.d.ts +0 -13
  92. package/dist/esm/src/constants.js +0 -18
  93. package/dist/esm/src/constants.js.map +0 -1
  94. package/dist/esm/src/entities/mixedRoute/route.d.ts +0 -29
  95. package/dist/esm/src/entities/mixedRoute/route.js +0 -114
  96. package/dist/esm/src/entities/mixedRoute/route.js.map +0 -1
  97. package/dist/esm/src/entities/mixedRoute/route.test.d.ts +0 -1
  98. package/dist/esm/src/entities/mixedRoute/route.test.js +0 -467
  99. package/dist/esm/src/entities/mixedRoute/route.test.js.map +0 -1
  100. package/dist/esm/src/entities/mixedRoute/trade.js +0 -352
  101. package/dist/esm/src/entities/mixedRoute/trade.js.map +0 -1
  102. package/dist/esm/src/entities/mixedRoute/trade.test.d.ts +0 -1
  103. package/dist/esm/src/entities/mixedRoute/trade.test.js +0 -1008
  104. package/dist/esm/src/entities/mixedRoute/trade.test.js.map +0 -1
  105. package/dist/esm/src/entities/protocol.d.ts +0 -6
  106. package/dist/esm/src/entities/protocol.js +0 -8
  107. package/dist/esm/src/entities/protocol.js.map +0 -1
  108. package/dist/esm/src/entities/route.js +0 -55
  109. package/dist/esm/src/entities/route.js.map +0 -1
  110. package/dist/esm/src/entities/route.test.d.ts +0 -1
  111. package/dist/esm/src/entities/route.test.js +0 -190
  112. package/dist/esm/src/entities/route.test.js.map +0 -1
  113. package/dist/esm/src/entities/trade.js +0 -362
  114. package/dist/esm/src/entities/trade.js.map +0 -1
  115. package/dist/esm/src/entities/trade.test.d.ts +0 -1
  116. package/dist/esm/src/entities/trade.test.js +0 -1265
  117. package/dist/esm/src/entities/trade.test.js.map +0 -1
  118. package/dist/esm/src/index.d.ts +0 -14
  119. package/dist/esm/src/index.js +0 -15
  120. package/dist/esm/src/index.js.map +0 -1
  121. package/dist/esm/src/multicallExtended.d.ts +0 -11
  122. package/dist/esm/src/multicallExtended.js +0 -39
  123. package/dist/esm/src/multicallExtended.js.map +0 -1
  124. package/dist/esm/src/multicallExtended.test.d.ts +0 -1
  125. package/dist/esm/src/multicallExtended.test.js +0 -20
  126. package/dist/esm/src/multicallExtended.test.js.map +0 -1
  127. package/dist/esm/src/paymentsExtended.d.ts +0 -15
  128. package/dist/esm/src/paymentsExtended.js +0 -61
  129. package/dist/esm/src/paymentsExtended.js.map +0 -1
  130. package/dist/esm/src/paymentsExtended.test.d.ts +0 -1
  131. package/dist/esm/src/paymentsExtended.test.js +0 -57
  132. package/dist/esm/src/paymentsExtended.test.js.map +0 -1
  133. package/dist/esm/src/swapRouter.d.ts +0 -95
  134. package/dist/esm/src/swapRouter.js +0 -434
  135. package/dist/esm/src/swapRouter.js.map +0 -1
  136. package/dist/esm/src/swapRouter.test.d.ts +0 -1
  137. package/dist/esm/src/swapRouter.test.js +0 -1159
  138. package/dist/esm/src/swapRouter.test.js.map +0 -1
  139. package/dist/esm/src/utils/TPool.d.ts +0 -4
  140. package/dist/esm/src/utils/TPool.js +0 -2
  141. package/dist/esm/src/utils/TPool.js.map +0 -1
  142. package/dist/esm/src/utils/encodeMixedRouteToPath.d.ts +0 -9
  143. package/dist/esm/src/utils/encodeMixedRouteToPath.js +0 -86
  144. package/dist/esm/src/utils/encodeMixedRouteToPath.js.map +0 -1
  145. package/dist/esm/src/utils/encodeMixedRouteToPath.test.d.ts +0 -1
  146. package/dist/esm/src/utils/encodeMixedRouteToPath.test.js +0 -134
  147. package/dist/esm/src/utils/encodeMixedRouteToPath.test.js.map +0 -1
  148. package/dist/esm/src/utils/index.d.ts +0 -16
  149. package/dist/esm/src/utils/index.js +0 -46
  150. package/dist/esm/src/utils/index.js.map +0 -1
  151. package/dist/esm/src/utils/pathCurrency.d.ts +0 -4
  152. package/dist/esm/src/utils/pathCurrency.js +0 -30
  153. package/dist/esm/src/utils/pathCurrency.js.map +0 -1
  154. package/dist/esm/src/utils/pathCurrency.test.d.ts +0 -1
  155. package/dist/esm/src/utils/pathCurrency.test.js +0 -15
  156. package/dist/esm/src/utils/pathCurrency.test.js.map +0 -1
  157. package/dist/types/src/approveAndCall.d.ts +0 -33
  158. package/dist/types/src/entities/mixedRoute/route.test.d.ts +0 -1
  159. package/dist/types/src/entities/mixedRoute/trade.d.ts +0 -183
  160. package/dist/types/src/entities/mixedRoute/trade.test.d.ts +0 -1
  161. package/dist/types/src/entities/protocol.d.ts +0 -6
  162. package/dist/types/src/entities/route.d.ts +0 -40
  163. package/dist/types/src/entities/route.test.d.ts +0 -1
  164. package/dist/types/src/entities/trade.d.ts +0 -127
  165. package/dist/types/src/entities/trade.test.d.ts +0 -1
  166. package/dist/types/src/index.d.ts +0 -14
  167. package/dist/types/src/multicallExtended.d.ts +0 -11
  168. package/dist/types/src/multicallExtended.test.d.ts +0 -1
  169. package/dist/types/src/paymentsExtended.test.d.ts +0 -1
  170. package/dist/types/src/swapRouter.d.ts +0 -95
  171. package/dist/types/src/swapRouter.test.d.ts +0 -1
  172. package/dist/types/src/utils/TPool.d.ts +0 -4
  173. package/dist/types/src/utils/encodeMixedRouteToPath.d.ts +0 -9
  174. package/dist/types/src/utils/encodeMixedRouteToPath.test.d.ts +0 -1
  175. package/dist/types/src/utils/pathCurrency.d.ts +0 -4
  176. package/dist/types/src/utils/pathCurrency.test.d.ts +0 -1
@@ -1,439 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SwapRouter = void 0;
4
- const tslib_1 = require("tslib");
5
- const abi_1 = require("@ethersproject/abi");
6
- const sdk_core_1 = require("@uniswap/sdk-core");
7
- const ISwapRouter02_json_1 = require("@uniswap/swap-router-contracts/artifacts/contracts/interfaces/ISwapRouter02.sol/ISwapRouter02.json");
8
- const v2_sdk_1 = require("@uniswap/v2-sdk");
9
- const v3_sdk_1 = require("@uniswap/v3-sdk");
10
- const v4_sdk_1 = require("@uniswap/v4-sdk");
11
- const tiny_invariant_1 = tslib_1.__importDefault(require("tiny-invariant"));
12
- const jsbi_1 = tslib_1.__importDefault(require("jsbi"));
13
- const constants_1 = require("./constants");
14
- const approveAndCall_1 = require("./approveAndCall");
15
- const trade_1 = require("./entities/trade");
16
- const protocol_1 = require("./entities/protocol");
17
- const route_1 = require("./entities/route");
18
- const multicallExtended_1 = require("./multicallExtended");
19
- const paymentsExtended_1 = require("./paymentsExtended");
20
- const trade_2 = require("./entities/mixedRoute/trade");
21
- const encodeMixedRouteToPath_1 = require("./utils/encodeMixedRouteToPath");
22
- const route_2 = require("./entities/mixedRoute/route");
23
- const utils_1 = require("./utils");
24
- const ZERO = jsbi_1.default.BigInt(0);
25
- const REFUND_ETH_PRICE_IMPACT_THRESHOLD = new sdk_core_1.Percent(jsbi_1.default.BigInt(50), jsbi_1.default.BigInt(100));
26
- /**
27
- * Represents the Uniswap V2 + V3 SwapRouter02, and has static methods for helping execute trades.
28
- */
29
- class SwapRouter {
30
- /**
31
- * Cannot be constructed.
32
- */
33
- constructor() { }
34
- /**
35
- * @notice Generates the calldata for a Swap with a V2 Route.
36
- * @param trade The V2Trade to encode.
37
- * @param options SwapOptions to use for the trade.
38
- * @param routerMustCustody Flag for whether funds should be sent to the router
39
- * @param performAggregatedSlippageCheck Flag for whether we want to perform an aggregated slippage check
40
- * @returns A string array of calldatas for the trade.
41
- */
42
- static encodeV2Swap(trade, options, routerMustCustody, performAggregatedSlippageCheck) {
43
- const amountIn = (0, v3_sdk_1.toHex)(trade.maximumAmountIn(options.slippageTolerance).quotient);
44
- const amountOut = (0, v3_sdk_1.toHex)(trade.minimumAmountOut(options.slippageTolerance).quotient);
45
- const path = trade.route.path.map((token) => token.address);
46
- const recipient = routerMustCustody
47
- ? constants_1.ADDRESS_THIS
48
- : typeof options.recipient === 'undefined'
49
- ? constants_1.MSG_SENDER
50
- : (0, sdk_core_1.validateAndParseAddress)(options.recipient);
51
- if (trade.tradeType === sdk_core_1.TradeType.EXACT_INPUT) {
52
- const exactInputParams = [amountIn, performAggregatedSlippageCheck ? 0 : amountOut, path, recipient];
53
- return SwapRouter.INTERFACE.encodeFunctionData('swapExactTokensForTokens', exactInputParams);
54
- }
55
- else {
56
- const exactOutputParams = [amountOut, amountIn, path, recipient];
57
- return SwapRouter.INTERFACE.encodeFunctionData('swapTokensForExactTokens', exactOutputParams);
58
- }
59
- }
60
- /**
61
- * @notice Generates the calldata for a Swap with a V3 Route.
62
- * @param trade The V3Trade to encode.
63
- * @param options SwapOptions to use for the trade.
64
- * @param routerMustCustody Flag for whether funds should be sent to the router
65
- * @param performAggregatedSlippageCheck Flag for whether we want to perform an aggregated slippage check
66
- * @returns A string array of calldatas for the trade.
67
- */
68
- static encodeV3Swap(trade, options, routerMustCustody, performAggregatedSlippageCheck) {
69
- const calldatas = [];
70
- for (const { route, inputAmount, outputAmount } of trade.swaps) {
71
- const amountIn = (0, v3_sdk_1.toHex)(trade.maximumAmountIn(options.slippageTolerance, inputAmount).quotient);
72
- const amountOut = (0, v3_sdk_1.toHex)(trade.minimumAmountOut(options.slippageTolerance, outputAmount).quotient);
73
- // flag for whether the trade is single hop or not
74
- const singleHop = route.pools.length === 1;
75
- const recipient = routerMustCustody
76
- ? constants_1.ADDRESS_THIS
77
- : typeof options.recipient === 'undefined'
78
- ? constants_1.MSG_SENDER
79
- : (0, sdk_core_1.validateAndParseAddress)(options.recipient);
80
- if (singleHop) {
81
- if (trade.tradeType === sdk_core_1.TradeType.EXACT_INPUT) {
82
- const exactInputSingleParams = {
83
- tokenIn: route.tokenPath[0].address,
84
- tokenOut: route.tokenPath[1].address,
85
- fee: route.pools[0].fee,
86
- recipient,
87
- amountIn,
88
- amountOutMinimum: performAggregatedSlippageCheck ? 0 : amountOut,
89
- sqrtPriceLimitX96: 0,
90
- };
91
- calldatas.push(SwapRouter.INTERFACE.encodeFunctionData('exactInputSingle', [exactInputSingleParams]));
92
- }
93
- else {
94
- const exactOutputSingleParams = {
95
- tokenIn: route.tokenPath[0].address,
96
- tokenOut: route.tokenPath[1].address,
97
- fee: route.pools[0].fee,
98
- recipient,
99
- amountOut,
100
- amountInMaximum: amountIn,
101
- sqrtPriceLimitX96: 0,
102
- };
103
- calldatas.push(SwapRouter.INTERFACE.encodeFunctionData('exactOutputSingle', [exactOutputSingleParams]));
104
- }
105
- }
106
- else {
107
- const path = (0, v3_sdk_1.encodeRouteToPath)(route, trade.tradeType === sdk_core_1.TradeType.EXACT_OUTPUT);
108
- if (trade.tradeType === sdk_core_1.TradeType.EXACT_INPUT) {
109
- const exactInputParams = {
110
- path,
111
- recipient,
112
- amountIn,
113
- amountOutMinimum: performAggregatedSlippageCheck ? 0 : amountOut,
114
- };
115
- calldatas.push(SwapRouter.INTERFACE.encodeFunctionData('exactInput', [exactInputParams]));
116
- }
117
- else {
118
- const exactOutputParams = {
119
- path,
120
- recipient,
121
- amountOut,
122
- amountInMaximum: amountIn,
123
- };
124
- calldatas.push(SwapRouter.INTERFACE.encodeFunctionData('exactOutput', [exactOutputParams]));
125
- }
126
- }
127
- }
128
- return calldatas;
129
- }
130
- /**
131
- * @notice Generates the calldata for a MixedRouteSwap. Since single hop routes are not MixedRoutes, we will instead generate
132
- * them via the existing encodeV3Swap and encodeV2Swap methods.
133
- * @param trade The MixedRouteTrade to encode.
134
- * @param options SwapOptions to use for the trade.
135
- * @param routerMustCustody Flag for whether funds should be sent to the router
136
- * @param performAggregatedSlippageCheck Flag for whether we want to perform an aggregated slippage check
137
- * @returns A string array of calldatas for the trade.
138
- */
139
- static encodeMixedRouteSwap(trade, options, routerMustCustody, performAggregatedSlippageCheck) {
140
- const calldatas = [];
141
- (0, tiny_invariant_1.default)(trade.tradeType === sdk_core_1.TradeType.EXACT_INPUT, 'TRADE_TYPE');
142
- for (const { route, inputAmount, outputAmount } of trade.swaps) {
143
- if (route.pools.some((pool) => pool instanceof v4_sdk_1.Pool))
144
- throw 'Encoding mixed routes with V4 not supported';
145
- const amountIn = (0, v3_sdk_1.toHex)(trade.maximumAmountIn(options.slippageTolerance, inputAmount).quotient);
146
- const amountOut = (0, v3_sdk_1.toHex)(trade.minimumAmountOut(options.slippageTolerance, outputAmount).quotient);
147
- // flag for whether the trade is single hop or not
148
- const singleHop = route.pools.length === 1;
149
- const recipient = routerMustCustody
150
- ? constants_1.ADDRESS_THIS
151
- : typeof options.recipient === 'undefined'
152
- ? constants_1.MSG_SENDER
153
- : (0, sdk_core_1.validateAndParseAddress)(options.recipient);
154
- const mixedRouteIsAllV3 = (route) => {
155
- return route.pools.every((pool) => pool instanceof v3_sdk_1.Pool);
156
- };
157
- if (singleHop) {
158
- /// For single hop, since it isn't really a mixedRoute, we'll just mimic behavior of V3 or V2
159
- /// We don't use encodeV3Swap() or encodeV2Swap() because casting the trade to a V3Trade or V2Trade is overcomplex
160
- if (mixedRouteIsAllV3(route)) {
161
- const exactInputSingleParams = {
162
- tokenIn: route.path[0].wrapped.address,
163
- tokenOut: route.path[1].wrapped.address,
164
- fee: route.pools[0].fee,
165
- recipient,
166
- amountIn,
167
- amountOutMinimum: performAggregatedSlippageCheck ? 0 : amountOut,
168
- sqrtPriceLimitX96: 0,
169
- };
170
- calldatas.push(SwapRouter.INTERFACE.encodeFunctionData('exactInputSingle', [exactInputSingleParams]));
171
- }
172
- else {
173
- const path = route.path.map((token) => token.wrapped.address);
174
- const exactInputParams = [amountIn, performAggregatedSlippageCheck ? 0 : amountOut, path, recipient];
175
- calldatas.push(SwapRouter.INTERFACE.encodeFunctionData('swapExactTokensForTokens', exactInputParams));
176
- }
177
- }
178
- else {
179
- const sections = (0, utils_1.partitionMixedRouteByProtocol)(route);
180
- const isLastSectionInRoute = (i) => {
181
- return i === sections.length - 1;
182
- };
183
- let outputToken;
184
- let inputToken = route.input.wrapped;
185
- for (let i = 0; i < sections.length; i++) {
186
- const section = sections[i];
187
- /// Now, we get output of this section
188
- outputToken = (0, utils_1.getOutputOfPools)(section, inputToken);
189
- const newRouteOriginal = new route_2.MixedRouteSDK([...section], section[0].token0.equals(inputToken) ? section[0].token0 : section[0].token1, outputToken);
190
- const newRoute = new route_1.MixedRoute(newRouteOriginal);
191
- /// Previous output is now input
192
- inputToken = outputToken.wrapped;
193
- if (mixedRouteIsAllV3(newRoute)) {
194
- const path = (0, encodeMixedRouteToPath_1.encodeMixedRouteToPath)(newRoute);
195
- const exactInputParams = {
196
- path,
197
- // By default router holds funds until the last swap, then it is sent to the recipient
198
- // special case exists where we are unwrapping WETH output, in which case `routerMustCustody` is set to true
199
- // and router still holds the funds. That logic bundled into how the value of `recipient` is calculated
200
- recipient: isLastSectionInRoute(i) ? recipient : constants_1.ADDRESS_THIS,
201
- amountIn: i === 0 ? amountIn : 0,
202
- amountOutMinimum: !isLastSectionInRoute(i) ? 0 : amountOut,
203
- };
204
- calldatas.push(SwapRouter.INTERFACE.encodeFunctionData('exactInput', [exactInputParams]));
205
- }
206
- else {
207
- const exactInputParams = [
208
- i === 0 ? amountIn : 0,
209
- !isLastSectionInRoute(i) ? 0 : amountOut,
210
- newRoute.path.map((token) => token.wrapped.address),
211
- isLastSectionInRoute(i) ? recipient : constants_1.ADDRESS_THIS, // to
212
- ];
213
- calldatas.push(SwapRouter.INTERFACE.encodeFunctionData('swapExactTokensForTokens', exactInputParams));
214
- }
215
- }
216
- }
217
- }
218
- return calldatas;
219
- }
220
- static encodeSwaps(trades, options, isSwapAndAdd) {
221
- // If dealing with an instance of the aggregated Trade object, unbundle it to individual trade objects.
222
- if (trades instanceof trade_1.Trade) {
223
- (0, tiny_invariant_1.default)(trades.swaps.every((swap) => swap.route.protocol === protocol_1.Protocol.V3 ||
224
- swap.route.protocol === protocol_1.Protocol.V2 ||
225
- swap.route.protocol === protocol_1.Protocol.MIXED), 'UNSUPPORTED_PROTOCOL (encoding routes with v4 not supported)');
226
- let individualTrades = [];
227
- for (const { route, inputAmount, outputAmount } of trades.swaps) {
228
- if (route.protocol === protocol_1.Protocol.V2) {
229
- individualTrades.push(new v2_sdk_1.Trade(route, trades.tradeType === sdk_core_1.TradeType.EXACT_INPUT ? inputAmount : outputAmount, trades.tradeType));
230
- }
231
- else if (route.protocol === protocol_1.Protocol.V3) {
232
- individualTrades.push(v3_sdk_1.Trade.createUncheckedTrade({
233
- route: route,
234
- inputAmount,
235
- outputAmount,
236
- tradeType: trades.tradeType,
237
- }));
238
- }
239
- else if (route.protocol === protocol_1.Protocol.MIXED) {
240
- individualTrades.push(
241
- /// we can change the naming of this function on MixedRouteTrade if needed
242
- trade_2.MixedRouteTrade.createUncheckedTrade({
243
- route: route,
244
- inputAmount,
245
- outputAmount,
246
- tradeType: trades.tradeType,
247
- }));
248
- }
249
- else {
250
- throw new Error('UNSUPPORTED_TRADE_PROTOCOL');
251
- }
252
- }
253
- trades = individualTrades;
254
- }
255
- if (!Array.isArray(trades)) {
256
- trades = [trades];
257
- }
258
- const numberOfTrades = trades.reduce((numberOfTrades, trade) => numberOfTrades + (trade instanceof v3_sdk_1.Trade || trade instanceof trade_2.MixedRouteTrade ? trade.swaps.length : 1), 0);
259
- const sampleTrade = trades[0];
260
- // All trades should have the same starting/ending currency and trade type
261
- (0, tiny_invariant_1.default)(trades.every((trade) => trade.inputAmount.currency.equals(sampleTrade.inputAmount.currency)), 'TOKEN_IN_DIFF');
262
- (0, tiny_invariant_1.default)(trades.every((trade) => trade.outputAmount.currency.equals(sampleTrade.outputAmount.currency)), 'TOKEN_OUT_DIFF');
263
- (0, tiny_invariant_1.default)(trades.every((trade) => trade.tradeType === sampleTrade.tradeType), 'TRADE_TYPE_DIFF');
264
- const calldatas = [];
265
- const inputIsNative = sampleTrade.inputAmount.currency.isNative;
266
- const outputIsNative = sampleTrade.outputAmount.currency.isNative;
267
- // flag for whether we want to perform an aggregated slippage check
268
- // 1. when there are >2 exact input trades. this is only a heuristic,
269
- // as it's still more gas-expensive even in this case, but has benefits
270
- // in that the reversion probability is lower
271
- const performAggregatedSlippageCheck = sampleTrade.tradeType === sdk_core_1.TradeType.EXACT_INPUT && numberOfTrades > 2;
272
- // flag for whether funds should be send first to the router
273
- // 1. when receiving ETH (which much be unwrapped from WETH)
274
- // 2. when a fee on the output is being taken
275
- // 3. when performing swap and add
276
- // 4. when performing an aggregated slippage check
277
- const routerMustCustody = outputIsNative || !!options.fee || !!isSwapAndAdd || performAggregatedSlippageCheck;
278
- // encode permit if necessary
279
- if (options.inputTokenPermit) {
280
- (0, tiny_invariant_1.default)(sampleTrade.inputAmount.currency.isToken, 'NON_TOKEN_PERMIT');
281
- calldatas.push(v3_sdk_1.SelfPermit.encodePermit(sampleTrade.inputAmount.currency, options.inputTokenPermit));
282
- }
283
- for (const trade of trades) {
284
- if (trade instanceof v2_sdk_1.Trade) {
285
- calldatas.push(SwapRouter.encodeV2Swap(trade, options, routerMustCustody, performAggregatedSlippageCheck));
286
- }
287
- else if (trade instanceof v3_sdk_1.Trade) {
288
- for (const calldata of SwapRouter.encodeV3Swap(trade, options, routerMustCustody, performAggregatedSlippageCheck)) {
289
- calldatas.push(calldata);
290
- }
291
- }
292
- else if (trade instanceof trade_2.MixedRouteTrade) {
293
- for (const calldata of SwapRouter.encodeMixedRouteSwap(trade, options, routerMustCustody, performAggregatedSlippageCheck)) {
294
- calldatas.push(calldata);
295
- }
296
- }
297
- else {
298
- throw new Error('Unsupported trade object');
299
- }
300
- }
301
- const ZERO_IN = sdk_core_1.CurrencyAmount.fromRawAmount(sampleTrade.inputAmount.currency, 0);
302
- const ZERO_OUT = sdk_core_1.CurrencyAmount.fromRawAmount(sampleTrade.outputAmount.currency, 0);
303
- const minimumAmountOut = trades.reduce((sum, trade) => sum.add(trade.minimumAmountOut(options.slippageTolerance)), ZERO_OUT);
304
- const quoteAmountOut = trades.reduce((sum, trade) => sum.add(trade.outputAmount), ZERO_OUT);
305
- const totalAmountIn = trades.reduce((sum, trade) => sum.add(trade.maximumAmountIn(options.slippageTolerance)), ZERO_IN);
306
- return {
307
- calldatas,
308
- sampleTrade,
309
- routerMustCustody,
310
- inputIsNative,
311
- outputIsNative,
312
- totalAmountIn,
313
- minimumAmountOut,
314
- quoteAmountOut,
315
- };
316
- }
317
- /**
318
- * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.
319
- * @param trades to produce call parameters for
320
- * @param options options for the call parameters
321
- */
322
- static swapCallParameters(trades, options) {
323
- const { calldatas, sampleTrade, routerMustCustody, inputIsNative, outputIsNative, totalAmountIn, minimumAmountOut, } = SwapRouter.encodeSwaps(trades, options);
324
- // unwrap or sweep
325
- if (routerMustCustody) {
326
- if (outputIsNative) {
327
- calldatas.push(paymentsExtended_1.PaymentsExtended.encodeUnwrapWETH9(minimumAmountOut.quotient, options.recipient, options.fee));
328
- }
329
- else {
330
- calldatas.push(paymentsExtended_1.PaymentsExtended.encodeSweepToken(sampleTrade.outputAmount.currency.wrapped, minimumAmountOut.quotient, options.recipient, options.fee));
331
- }
332
- }
333
- // must refund when paying in ETH: either with an uncertain input amount OR if there's a chance of a partial fill.
334
- // unlike ERC20's, the full ETH value must be sent in the transaction, so the rest must be refunded.
335
- if (inputIsNative && (sampleTrade.tradeType === sdk_core_1.TradeType.EXACT_OUTPUT || SwapRouter.riskOfPartialFill(trades))) {
336
- calldatas.push(v3_sdk_1.Payments.encodeRefundETH());
337
- }
338
- return {
339
- calldata: multicallExtended_1.MulticallExtended.encodeMulticall(calldatas, options.deadlineOrPreviousBlockhash),
340
- value: (0, v3_sdk_1.toHex)(inputIsNative ? totalAmountIn.quotient : ZERO),
341
- };
342
- }
343
- /**
344
- * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.
345
- * @param trades to produce call parameters for
346
- * @param options options for the call parameters
347
- */
348
- static swapAndAddCallParameters(trades, options, position, addLiquidityOptions, tokenInApprovalType, tokenOutApprovalType) {
349
- const { calldatas, inputIsNative, outputIsNative, sampleTrade, totalAmountIn: totalAmountSwapped, quoteAmountOut, minimumAmountOut, } = SwapRouter.encodeSwaps(trades, options, true);
350
- // encode output token permit if necessary
351
- if (options.outputTokenPermit) {
352
- (0, tiny_invariant_1.default)(quoteAmountOut.currency.isToken, 'NON_TOKEN_PERMIT_OUTPUT');
353
- calldatas.push(v3_sdk_1.SelfPermit.encodePermit(quoteAmountOut.currency, options.outputTokenPermit));
354
- }
355
- const chainId = sampleTrade.route.chainId;
356
- const zeroForOne = position.pool.token0.wrapped.address === totalAmountSwapped.currency.wrapped.address;
357
- const { positionAmountIn, positionAmountOut } = SwapRouter.getPositionAmounts(position, zeroForOne);
358
- // if tokens are native they will be converted to WETH9
359
- const tokenIn = inputIsNative ? sdk_core_1.WETH9[chainId] : positionAmountIn.currency.wrapped;
360
- const tokenOut = outputIsNative ? sdk_core_1.WETH9[chainId] : positionAmountOut.currency.wrapped;
361
- // if swap output does not make up whole outputTokenBalanceDesired, pull in remaining tokens for adding liquidity
362
- const amountOutRemaining = positionAmountOut.subtract(quoteAmountOut.wrapped);
363
- if (amountOutRemaining.greaterThan(sdk_core_1.CurrencyAmount.fromRawAmount(positionAmountOut.currency, 0))) {
364
- // if output is native, this means the remaining portion is included as native value in the transaction
365
- // and must be wrapped. Otherwise, pull in remaining ERC20 token.
366
- outputIsNative
367
- ? calldatas.push(paymentsExtended_1.PaymentsExtended.encodeWrapETH(amountOutRemaining.quotient))
368
- : calldatas.push(paymentsExtended_1.PaymentsExtended.encodePull(tokenOut, amountOutRemaining.quotient));
369
- }
370
- // if input is native, convert to WETH9, else pull ERC20 token
371
- inputIsNative
372
- ? calldatas.push(paymentsExtended_1.PaymentsExtended.encodeWrapETH(positionAmountIn.quotient))
373
- : calldatas.push(paymentsExtended_1.PaymentsExtended.encodePull(tokenIn, positionAmountIn.quotient));
374
- // approve token balances to NFTManager
375
- if (tokenInApprovalType !== approveAndCall_1.ApprovalTypes.NOT_REQUIRED)
376
- calldatas.push(approveAndCall_1.ApproveAndCall.encodeApprove(tokenIn, tokenInApprovalType));
377
- if (tokenOutApprovalType !== approveAndCall_1.ApprovalTypes.NOT_REQUIRED)
378
- calldatas.push(approveAndCall_1.ApproveAndCall.encodeApprove(tokenOut, tokenOutApprovalType));
379
- // represents a position with token amounts resulting from a swap with maximum slippage
380
- // hence the minimal amount out possible.
381
- const minimalPosition = v3_sdk_1.Position.fromAmounts({
382
- pool: position.pool,
383
- tickLower: position.tickLower,
384
- tickUpper: position.tickUpper,
385
- amount0: zeroForOne ? position.amount0.quotient.toString() : minimumAmountOut.quotient.toString(),
386
- amount1: zeroForOne ? minimumAmountOut.quotient.toString() : position.amount1.quotient.toString(),
387
- useFullPrecision: false,
388
- });
389
- // encode NFTManager add liquidity
390
- calldatas.push(approveAndCall_1.ApproveAndCall.encodeAddLiquidity(position, minimalPosition, addLiquidityOptions, options.slippageTolerance));
391
- // sweep remaining tokens
392
- inputIsNative
393
- ? calldatas.push(paymentsExtended_1.PaymentsExtended.encodeUnwrapWETH9(ZERO))
394
- : calldatas.push(paymentsExtended_1.PaymentsExtended.encodeSweepToken(tokenIn, ZERO));
395
- outputIsNative
396
- ? calldatas.push(paymentsExtended_1.PaymentsExtended.encodeUnwrapWETH9(ZERO))
397
- : calldatas.push(paymentsExtended_1.PaymentsExtended.encodeSweepToken(tokenOut, ZERO));
398
- let value;
399
- if (inputIsNative) {
400
- value = totalAmountSwapped.wrapped.add(positionAmountIn.wrapped).quotient;
401
- }
402
- else if (outputIsNative) {
403
- value = amountOutRemaining.quotient;
404
- }
405
- else {
406
- value = ZERO;
407
- }
408
- return {
409
- calldata: multicallExtended_1.MulticallExtended.encodeMulticall(calldatas, options.deadlineOrPreviousBlockhash),
410
- value: value.toString(),
411
- };
412
- }
413
- // if price impact is very high, there's a chance of hitting max/min prices resulting in a partial fill of the swap
414
- static riskOfPartialFill(trades) {
415
- if (Array.isArray(trades)) {
416
- return trades.some((trade) => {
417
- return SwapRouter.v3TradeWithHighPriceImpact(trade);
418
- });
419
- }
420
- else {
421
- return SwapRouter.v3TradeWithHighPriceImpact(trades);
422
- }
423
- }
424
- static v3TradeWithHighPriceImpact(trade) {
425
- return !(trade instanceof v2_sdk_1.Trade) && trade.priceImpact.greaterThan(REFUND_ETH_PRICE_IMPACT_THRESHOLD);
426
- }
427
- static getPositionAmounts(position, zeroForOne) {
428
- const { amount0, amount1 } = position.mintAmounts;
429
- const currencyAmount0 = sdk_core_1.CurrencyAmount.fromRawAmount(position.pool.token0, amount0);
430
- const currencyAmount1 = sdk_core_1.CurrencyAmount.fromRawAmount(position.pool.token1, amount1);
431
- const [positionAmountIn, positionAmountOut] = zeroForOne
432
- ? [currencyAmount0, currencyAmount1]
433
- : [currencyAmount1, currencyAmount0];
434
- return { positionAmountIn, positionAmountOut };
435
- }
436
- }
437
- exports.SwapRouter = SwapRouter;
438
- SwapRouter.INTERFACE = new abi_1.Interface(ISwapRouter02_json_1.abi);
439
- //# sourceMappingURL=swapRouter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"swapRouter.js","sourceRoot":"","sources":["../../../src/swapRouter.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};