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