@uniswap/router-sdk 1.23.0 → 2.0.1

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/{approveAndCall.d.ts → cjs/src/approveAndCall.d.ts} +33 -33
  2. package/dist/cjs/src/approveAndCall.js +111 -0
  3. package/dist/cjs/src/approveAndCall.js.map +1 -0
  4. package/dist/{constants.d.ts → cjs/src/constants.d.ts} +13 -13
  5. package/dist/cjs/src/constants.js +22 -0
  6. package/dist/cjs/src/constants.js.map +1 -0
  7. package/dist/{entities → cjs/src/entities}/mixedRoute/route.d.ts +29 -29
  8. package/dist/cjs/src/entities/mixedRoute/route.js +119 -0
  9. package/dist/cjs/src/entities/mixedRoute/route.js.map +1 -0
  10. package/dist/cjs/src/entities/mixedRoute/route.test.d.ts +1 -0
  11. package/dist/cjs/src/entities/mixedRoute/route.test.js +469 -0
  12. package/dist/cjs/src/entities/mixedRoute/route.test.js.map +1 -0
  13. package/dist/{entities → cjs/src/entities}/mixedRoute/trade.d.ts +183 -183
  14. package/dist/cjs/src/entities/mixedRoute/trade.js +357 -0
  15. package/dist/cjs/src/entities/mixedRoute/trade.js.map +1 -0
  16. package/dist/cjs/src/entities/mixedRoute/trade.test.d.ts +1 -0
  17. package/dist/cjs/src/entities/mixedRoute/trade.test.js +1010 -0
  18. package/dist/cjs/src/entities/mixedRoute/trade.test.js.map +1 -0
  19. package/dist/{entities → cjs/src/entities}/protocol.d.ts +6 -6
  20. package/dist/cjs/src/entities/protocol.js +11 -0
  21. package/dist/cjs/src/entities/protocol.js.map +1 -0
  22. package/dist/{entities → cjs/src/entities}/route.d.ts +40 -40
  23. package/dist/cjs/src/entities/route.js +63 -0
  24. package/dist/cjs/src/entities/route.js.map +1 -0
  25. package/dist/cjs/src/entities/route.test.d.ts +1 -0
  26. package/dist/cjs/src/entities/route.test.js +192 -0
  27. package/dist/cjs/src/entities/route.test.js.map +1 -0
  28. package/dist/{entities → cjs/src/entities}/trade.d.ts +127 -127
  29. package/dist/cjs/src/entities/trade.js +366 -0
  30. package/dist/cjs/src/entities/trade.js.map +1 -0
  31. package/dist/cjs/src/entities/trade.test.d.ts +1 -0
  32. package/dist/cjs/src/entities/trade.test.js +1267 -0
  33. package/dist/cjs/src/entities/trade.test.js.map +1 -0
  34. package/dist/{index.d.ts → cjs/src/index.d.ts} +14 -14
  35. package/dist/cjs/src/index.js +18 -0
  36. package/dist/cjs/src/index.js.map +1 -0
  37. package/dist/{multicallExtended.d.ts → cjs/src/multicallExtended.d.ts} +11 -11
  38. package/dist/cjs/src/multicallExtended.js +43 -0
  39. package/dist/cjs/src/multicallExtended.js.map +1 -0
  40. package/dist/cjs/src/multicallExtended.test.d.ts +1 -0
  41. package/dist/cjs/src/multicallExtended.test.js +22 -0
  42. package/dist/cjs/src/multicallExtended.test.js.map +1 -0
  43. package/dist/{paymentsExtended.d.ts → cjs/src/paymentsExtended.d.ts} +15 -15
  44. package/dist/cjs/src/paymentsExtended.js +65 -0
  45. package/dist/cjs/src/paymentsExtended.js.map +1 -0
  46. package/dist/cjs/src/paymentsExtended.test.d.ts +1 -0
  47. package/dist/cjs/src/paymentsExtended.test.js +60 -0
  48. package/dist/cjs/src/paymentsExtended.test.js.map +1 -0
  49. package/dist/{swapRouter.d.ts → cjs/src/swapRouter.d.ts} +95 -95
  50. package/dist/cjs/src/swapRouter.js +439 -0
  51. package/dist/cjs/src/swapRouter.js.map +1 -0
  52. package/dist/cjs/src/swapRouter.test.d.ts +1 -0
  53. package/dist/cjs/src/swapRouter.test.js +1161 -0
  54. package/dist/cjs/src/swapRouter.test.js.map +1 -0
  55. package/dist/{utils → cjs/src/utils}/TPool.d.ts +4 -4
  56. package/dist/cjs/src/utils/TPool.js +3 -0
  57. package/dist/cjs/src/utils/TPool.js.map +1 -0
  58. package/dist/{utils → cjs/src/utils}/encodeMixedRouteToPath.d.ts +9 -9
  59. package/dist/cjs/src/utils/encodeMixedRouteToPath.js +90 -0
  60. package/dist/cjs/src/utils/encodeMixedRouteToPath.js.map +1 -0
  61. package/dist/cjs/src/utils/encodeMixedRouteToPath.test.d.ts +1 -0
  62. package/dist/cjs/src/utils/encodeMixedRouteToPath.test.js +136 -0
  63. package/dist/cjs/src/utils/encodeMixedRouteToPath.test.js.map +1 -0
  64. package/dist/{utils → cjs/src/utils}/index.d.ts +16 -16
  65. package/dist/cjs/src/utils/index.js +51 -0
  66. package/dist/cjs/src/utils/index.js.map +1 -0
  67. package/dist/{utils → cjs/src/utils}/pathCurrency.d.ts +4 -4
  68. package/dist/cjs/src/utils/pathCurrency.js +35 -0
  69. package/dist/cjs/src/utils/pathCurrency.js.map +1 -0
  70. package/dist/cjs/src/utils/pathCurrency.test.d.ts +1 -0
  71. package/dist/cjs/src/utils/pathCurrency.test.js +17 -0
  72. package/dist/cjs/src/utils/pathCurrency.test.js.map +1 -0
  73. package/dist/esm/src/approveAndCall.d.ts +33 -0
  74. package/dist/esm/src/approveAndCall.js +105 -0
  75. package/dist/esm/src/approveAndCall.js.map +1 -0
  76. package/dist/esm/src/constants.d.ts +13 -0
  77. package/dist/esm/src/constants.js +18 -0
  78. package/dist/esm/src/constants.js.map +1 -0
  79. package/dist/esm/src/entities/mixedRoute/route.d.ts +29 -0
  80. package/dist/esm/src/entities/mixedRoute/route.js +114 -0
  81. package/dist/esm/src/entities/mixedRoute/route.js.map +1 -0
  82. package/dist/esm/src/entities/mixedRoute/route.test.d.ts +1 -0
  83. package/dist/esm/src/entities/mixedRoute/route.test.js +467 -0
  84. package/dist/esm/src/entities/mixedRoute/route.test.js.map +1 -0
  85. package/dist/esm/src/entities/mixedRoute/trade.d.ts +183 -0
  86. package/dist/esm/src/entities/mixedRoute/trade.js +352 -0
  87. package/dist/esm/src/entities/mixedRoute/trade.js.map +1 -0
  88. package/dist/esm/src/entities/mixedRoute/trade.test.d.ts +1 -0
  89. package/dist/esm/src/entities/mixedRoute/trade.test.js +1008 -0
  90. package/dist/esm/src/entities/mixedRoute/trade.test.js.map +1 -0
  91. package/dist/esm/src/entities/protocol.d.ts +6 -0
  92. package/dist/esm/src/entities/protocol.js +8 -0
  93. package/dist/esm/src/entities/protocol.js.map +1 -0
  94. package/dist/esm/src/entities/route.d.ts +40 -0
  95. package/dist/esm/src/entities/route.js +55 -0
  96. package/dist/esm/src/entities/route.js.map +1 -0
  97. package/dist/esm/src/entities/route.test.d.ts +1 -0
  98. package/dist/esm/src/entities/route.test.js +190 -0
  99. package/dist/esm/src/entities/route.test.js.map +1 -0
  100. package/dist/esm/src/entities/trade.d.ts +127 -0
  101. package/dist/esm/src/entities/trade.js +362 -0
  102. package/dist/esm/src/entities/trade.js.map +1 -0
  103. package/dist/esm/src/entities/trade.test.d.ts +1 -0
  104. package/dist/esm/src/entities/trade.test.js +1265 -0
  105. package/dist/esm/src/entities/trade.test.js.map +1 -0
  106. package/dist/esm/src/index.d.ts +14 -0
  107. package/dist/esm/src/index.js +15 -0
  108. package/dist/esm/src/index.js.map +1 -0
  109. package/dist/esm/src/multicallExtended.d.ts +11 -0
  110. package/dist/esm/src/multicallExtended.js +39 -0
  111. package/dist/esm/src/multicallExtended.js.map +1 -0
  112. package/dist/esm/src/multicallExtended.test.d.ts +1 -0
  113. package/dist/esm/src/multicallExtended.test.js +20 -0
  114. package/dist/esm/src/multicallExtended.test.js.map +1 -0
  115. package/dist/esm/src/paymentsExtended.d.ts +15 -0
  116. package/dist/esm/src/paymentsExtended.js +61 -0
  117. package/dist/esm/src/paymentsExtended.js.map +1 -0
  118. package/dist/esm/src/paymentsExtended.test.d.ts +1 -0
  119. package/dist/esm/src/paymentsExtended.test.js +57 -0
  120. package/dist/esm/src/paymentsExtended.test.js.map +1 -0
  121. package/dist/esm/src/swapRouter.d.ts +95 -0
  122. package/dist/esm/src/swapRouter.js +434 -0
  123. package/dist/esm/src/swapRouter.js.map +1 -0
  124. package/dist/esm/src/swapRouter.test.d.ts +1 -0
  125. package/dist/esm/src/swapRouter.test.js +1159 -0
  126. package/dist/esm/src/swapRouter.test.js.map +1 -0
  127. package/dist/esm/src/utils/TPool.d.ts +4 -0
  128. package/dist/esm/src/utils/TPool.js +2 -0
  129. package/dist/esm/src/utils/TPool.js.map +1 -0
  130. package/dist/esm/src/utils/encodeMixedRouteToPath.d.ts +9 -0
  131. package/dist/esm/src/utils/encodeMixedRouteToPath.js +86 -0
  132. package/dist/esm/src/utils/encodeMixedRouteToPath.js.map +1 -0
  133. package/dist/esm/src/utils/encodeMixedRouteToPath.test.d.ts +1 -0
  134. package/dist/esm/src/utils/encodeMixedRouteToPath.test.js +134 -0
  135. package/dist/esm/src/utils/encodeMixedRouteToPath.test.js.map +1 -0
  136. package/dist/esm/src/utils/index.d.ts +16 -0
  137. package/dist/esm/src/utils/index.js +46 -0
  138. package/dist/esm/src/utils/index.js.map +1 -0
  139. package/dist/esm/src/utils/pathCurrency.d.ts +4 -0
  140. package/dist/esm/src/utils/pathCurrency.js +30 -0
  141. package/dist/esm/src/utils/pathCurrency.js.map +1 -0
  142. package/dist/esm/src/utils/pathCurrency.test.d.ts +1 -0
  143. package/dist/esm/src/utils/pathCurrency.test.js +15 -0
  144. package/dist/esm/src/utils/pathCurrency.test.js.map +1 -0
  145. package/dist/types/src/approveAndCall.d.ts +33 -0
  146. package/dist/types/src/constants.d.ts +13 -0
  147. package/dist/types/src/entities/mixedRoute/route.d.ts +29 -0
  148. package/dist/types/src/entities/mixedRoute/route.test.d.ts +1 -0
  149. package/dist/types/src/entities/mixedRoute/trade.d.ts +183 -0
  150. package/dist/types/src/entities/mixedRoute/trade.test.d.ts +1 -0
  151. package/dist/types/src/entities/protocol.d.ts +6 -0
  152. package/dist/types/src/entities/route.d.ts +40 -0
  153. package/dist/types/src/entities/route.test.d.ts +1 -0
  154. package/dist/types/src/entities/trade.d.ts +127 -0
  155. package/dist/types/src/entities/trade.test.d.ts +1 -0
  156. package/dist/types/src/index.d.ts +14 -0
  157. package/dist/types/src/multicallExtended.d.ts +11 -0
  158. package/dist/types/src/multicallExtended.test.d.ts +1 -0
  159. package/dist/types/src/paymentsExtended.d.ts +15 -0
  160. package/dist/types/src/paymentsExtended.test.d.ts +1 -0
  161. package/dist/types/src/swapRouter.d.ts +95 -0
  162. package/dist/types/src/swapRouter.test.d.ts +1 -0
  163. package/dist/types/src/utils/TPool.d.ts +4 -0
  164. package/dist/types/src/utils/encodeMixedRouteToPath.d.ts +9 -0
  165. package/dist/types/src/utils/encodeMixedRouteToPath.test.d.ts +1 -0
  166. package/dist/types/src/utils/index.d.ts +16 -0
  167. package/dist/types/src/utils/pathCurrency.d.ts +4 -0
  168. package/dist/types/src/utils/pathCurrency.test.d.ts +1 -0
  169. package/package.json +33 -18
  170. package/dist/index.js +0 -8
  171. package/dist/router-sdk.cjs.development.js +0 -2485
  172. package/dist/router-sdk.cjs.development.js.map +0 -1
  173. package/dist/router-sdk.cjs.production.min.js +0 -2
  174. package/dist/router-sdk.cjs.production.min.js.map +0 -1
  175. package/dist/router-sdk.esm.js +0 -2452
  176. package/dist/router-sdk.esm.js.map +0 -1
@@ -0,0 +1,1161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const sdk_core_1 = require("@uniswap/sdk-core");
5
+ const v2_sdk_1 = require("@uniswap/v2-sdk");
6
+ const v3_sdk_1 = require("@uniswap/v3-sdk");
7
+ const v4_sdk_1 = require("@uniswap/v4-sdk");
8
+ const jsbi_1 = tslib_1.__importDefault(require("jsbi"));
9
+ const _1 = require(".");
10
+ const approveAndCall_1 = require("./approveAndCall");
11
+ const route_1 = require("./entities/mixedRoute/route");
12
+ const trade_1 = require("./entities/mixedRoute/trade");
13
+ const constants_1 = require("./constants");
14
+ describe('SwapRouter', () => {
15
+ const ETHER = sdk_core_1.Ether.onChain(1);
16
+ const WETH = sdk_core_1.WETH9[1];
17
+ const token0 = new sdk_core_1.Token(1, '0x0000000000000000000000000000000000000001', 18, 't0', 'token0');
18
+ const token1 = new sdk_core_1.Token(1, '0x0000000000000000000000000000000000000002', 18, 't1', 'token1');
19
+ const token2 = new sdk_core_1.Token(1, '0x0000000000000000000000000000000000000003', 18, 't2', 'token2');
20
+ const feeAmount = v3_sdk_1.FeeAmount.MEDIUM;
21
+ const sqrtRatioX96 = (0, v3_sdk_1.encodeSqrtRatioX96)(1, 1);
22
+ const liquidity = 1000000;
23
+ // v4
24
+ const makeV4Pool = (token0, token1, liquidity) => {
25
+ return new v4_sdk_1.Pool(token0, token1, feeAmount, v3_sdk_1.TICK_SPACINGS[feeAmount], constants_1.ADDRESS_ZERO, sqrtRatioX96, liquidity, v3_sdk_1.TickMath.getTickAtSqrtRatio(sqrtRatioX96), [
26
+ {
27
+ index: (0, v3_sdk_1.nearestUsableTick)(v3_sdk_1.TickMath.MIN_TICK, v3_sdk_1.TICK_SPACINGS[feeAmount]),
28
+ liquidityNet: liquidity,
29
+ liquidityGross: liquidity,
30
+ },
31
+ {
32
+ index: (0, v3_sdk_1.nearestUsableTick)(v3_sdk_1.TickMath.MAX_TICK, v3_sdk_1.TICK_SPACINGS[feeAmount]),
33
+ liquidityNet: -liquidity,
34
+ liquidityGross: liquidity,
35
+ },
36
+ ]);
37
+ };
38
+ // v3
39
+ const makeV3Pool = (token0, token1, liquidity) => {
40
+ return new v3_sdk_1.Pool(token0, token1, feeAmount, sqrtRatioX96, liquidity, v3_sdk_1.TickMath.getTickAtSqrtRatio(sqrtRatioX96), [
41
+ {
42
+ index: (0, v3_sdk_1.nearestUsableTick)(v3_sdk_1.TickMath.MIN_TICK, v3_sdk_1.TICK_SPACINGS[feeAmount]),
43
+ liquidityNet: liquidity,
44
+ liquidityGross: liquidity,
45
+ },
46
+ {
47
+ index: (0, v3_sdk_1.nearestUsableTick)(v3_sdk_1.TickMath.MAX_TICK, v3_sdk_1.TICK_SPACINGS[feeAmount]),
48
+ liquidityNet: -liquidity,
49
+ liquidityGross: liquidity,
50
+ },
51
+ ]);
52
+ };
53
+ // v2
54
+ const makePair = (token0, token1, liquidity) => {
55
+ const amount0 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(liquidity));
56
+ const amount1 = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(liquidity));
57
+ return new v2_sdk_1.Pair(amount0, amount1);
58
+ };
59
+ const pool_V3_0_1 = makeV3Pool(token0, token1, liquidity);
60
+ const pool_V4_0_1 = makeV4Pool(token0, token1, liquidity);
61
+ const pair_0_1 = makePair(token0, token1, liquidity);
62
+ const pair_1_2 = makePair(token1, token2, liquidity);
63
+ const pool_V3_1_WETH = makeV3Pool(token1, WETH, liquidity);
64
+ const pair_1_WETH = makePair(token1, WETH, liquidity);
65
+ const pair_2_WETH = makePair(token2, WETH, liquidity);
66
+ const pool_V3_2_WETH = makeV3Pool(token2, WETH, liquidity);
67
+ const slippageTolerance = new sdk_core_1.Percent(1, 100);
68
+ const recipient = '0x0000000000000000000000000000000000000003';
69
+ const deadline = 123;
70
+ describe('#swapCallParameters', () => {
71
+ describe('single-hop exact input (v2 + v3)', () => {
72
+ describe('different trade configurations result in identical calldata', () => {
73
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000e4472b43f300000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000062000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000061000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
74
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
75
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_0_1], token0, token1), amountIn);
76
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
77
+ it('array of trades', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
78
+ const trades = [v2Trade, yield v3Trade];
79
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
80
+ slippageTolerance,
81
+ recipient,
82
+ deadlineOrPreviousBlockhash: deadline,
83
+ });
84
+ expect(calldata).toEqual(expectedCalldata);
85
+ expect(value).toBe('0x00');
86
+ }));
87
+ it('meta-trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
88
+ const trades = yield _1.Trade.fromRoutes([
89
+ {
90
+ routev2: v2Trade.route,
91
+ amount: amountIn,
92
+ },
93
+ ], [
94
+ {
95
+ routev3: (yield v3Trade).swaps[0].route,
96
+ amount: amountIn,
97
+ },
98
+ ], sdk_core_1.TradeType.EXACT_INPUT);
99
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
100
+ slippageTolerance,
101
+ recipient,
102
+ deadlineOrPreviousBlockhash: deadline,
103
+ });
104
+ expect(calldata).toEqual(expectedCalldata);
105
+ expect(value).toBe('0x00');
106
+ }));
107
+ });
108
+ });
109
+ describe('single-hop exact output (v2 + v3)', () => {
110
+ describe('different trade configurations result in identical calldata', () => {
111
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000e442712a6700000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000066000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e45023b4df000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000067000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
112
+ const amountOut = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(100));
113
+ const v2Trade = v2_sdk_1.Trade.exactOut(new v2_sdk_1.Route([pair_0_1], token0, token1), amountOut);
114
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_0_1], token0, token1), amountOut, sdk_core_1.TradeType.EXACT_OUTPUT);
115
+ it('array of trades', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
116
+ const trades = [v2Trade, yield v3Trade];
117
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
118
+ slippageTolerance,
119
+ recipient,
120
+ deadlineOrPreviousBlockhash: deadline,
121
+ });
122
+ expect(calldata).toEqual(expectedCalldata);
123
+ expect(value).toBe('0x00');
124
+ }));
125
+ it('meta-trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
126
+ const trades = yield _1.Trade.fromRoutes([
127
+ {
128
+ routev2: v2Trade.route,
129
+ amount: amountOut,
130
+ },
131
+ ], [
132
+ {
133
+ routev3: (yield v3Trade).swaps[0].route,
134
+ amount: amountOut,
135
+ },
136
+ ], sdk_core_1.TradeType.EXACT_OUTPUT);
137
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
138
+ slippageTolerance,
139
+ recipient,
140
+ deadlineOrPreviousBlockhash: deadline,
141
+ });
142
+ expect(calldata).toEqual(expectedCalldata);
143
+ expect(value).toBe('0x00');
144
+ }));
145
+ });
146
+ });
147
+ describe('multi-hop exact input (v2 + v3)', () => {
148
+ describe('different trade configurations result in identical calldata', () => {
149
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000104472b43f30000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124b858183f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000005f00000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000001000bb80000000000000000000000000000000000000002000bb8c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
150
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
151
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_0_1, pair_1_WETH], token0, WETH), amountIn);
152
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_0_1, pool_V3_1_WETH], token0, WETH), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
153
+ it('array of trades', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
154
+ const trades = [v2Trade, yield v3Trade];
155
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
156
+ slippageTolerance,
157
+ recipient,
158
+ deadlineOrPreviousBlockhash: deadline,
159
+ });
160
+ expect(calldata).toEqual(expectedCalldata);
161
+ expect(value).toBe('0x00');
162
+ }));
163
+ it('meta-trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
164
+ const trades = yield _1.Trade.fromRoutes([
165
+ {
166
+ routev2: v2Trade.route,
167
+ amount: amountIn,
168
+ },
169
+ ], [
170
+ {
171
+ routev3: (yield v3Trade).swaps[0].route,
172
+ amount: amountIn,
173
+ },
174
+ ], sdk_core_1.TradeType.EXACT_INPUT);
175
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
176
+ slippageTolerance,
177
+ recipient,
178
+ deadlineOrPreviousBlockhash: deadline,
179
+ });
180
+ expect(calldata).toEqual(expectedCalldata);
181
+ expect(value).toBe('0x00');
182
+ }));
183
+ });
184
+ });
185
+ describe('multi-hop exact output (v2 + v3)', () => {
186
+ describe('different trade configurations result in identical calldata', () => {
187
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000010442712a670000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012409b81346000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000042c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000bb80000000000000000000000000000000000000002000bb8000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
188
+ const amountOut = sdk_core_1.CurrencyAmount.fromRawAmount(WETH, jsbi_1.default.BigInt(100));
189
+ const v2Trade = v2_sdk_1.Trade.exactOut(new v2_sdk_1.Route([pair_0_1, pair_1_WETH], token0, WETH), amountOut);
190
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_0_1, pool_V3_1_WETH], token0, WETH), amountOut, sdk_core_1.TradeType.EXACT_OUTPUT);
191
+ it('array of trades', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
192
+ const trades = [v2Trade, yield v3Trade];
193
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
194
+ slippageTolerance,
195
+ recipient,
196
+ deadlineOrPreviousBlockhash: deadline,
197
+ });
198
+ expect(calldata).toEqual(expectedCalldata);
199
+ expect(value).toBe('0x00');
200
+ }));
201
+ it('meta-trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
202
+ const trades = yield _1.Trade.fromRoutes([
203
+ {
204
+ routev2: v2Trade.route,
205
+ amount: amountOut,
206
+ },
207
+ ], [
208
+ {
209
+ routev3: (yield v3Trade).swaps[0].route,
210
+ amount: amountOut,
211
+ },
212
+ ], sdk_core_1.TradeType.EXACT_OUTPUT);
213
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
214
+ slippageTolerance,
215
+ recipient,
216
+ deadlineOrPreviousBlockhash: deadline,
217
+ });
218
+ expect(calldata).toEqual(expectedCalldata);
219
+ expect(value).toBe('0x00');
220
+ }));
221
+ });
222
+ });
223
+ describe('Mixed Route', () => {
224
+ it('throws an error with v4 pool', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
225
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(WETH, jsbi_1.default.BigInt(100));
226
+ const mixedRouteTrade = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pair_1_WETH, pool_V4_0_1], WETH, token0), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
227
+ const trades = yield mixedRouteTrade;
228
+ expect(() => _1.SwapRouter.swapCallParameters(trades, {
229
+ slippageTolerance,
230
+ recipient,
231
+ deadlineOrPreviousBlockhash: deadline,
232
+ })).toThrow('Encoding mixed routes with V4 not supported');
233
+ }));
234
+ describe('single-hop exact input (v2 + v3) backwards compatible', () => {
235
+ describe('different trade configurations result in identical calldata', () => {
236
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000e4472b43f300000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000062000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000061000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
237
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
238
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_0_1], token0, token1), amountIn);
239
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
240
+ const mixedRouteTrade1 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pair_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
241
+ const mixedRouteTrade2 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pool_V3_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
242
+ it('generates the same calldata', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
243
+ const trades = [v2Trade, yield v3Trade];
244
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
245
+ slippageTolerance,
246
+ recipient,
247
+ deadlineOrPreviousBlockhash: deadline,
248
+ });
249
+ expect(calldata).toEqual(expectedCalldata);
250
+ expect(value).toBe('0x00');
251
+ const mixedRouteTrades = [yield mixedRouteTrade1, yield mixedRouteTrade2];
252
+ const { calldata: mixedRouteCalldata, value: mixedRouteValue } = _1.SwapRouter.swapCallParameters(mixedRouteTrades, {
253
+ slippageTolerance,
254
+ recipient,
255
+ deadlineOrPreviousBlockhash: deadline,
256
+ });
257
+ expect(mixedRouteCalldata).toEqual(expectedCalldata);
258
+ expect(mixedRouteValue).toBe('0x00');
259
+ }));
260
+ it('meta-trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
261
+ const trades = yield _1.Trade.fromRoutes([
262
+ {
263
+ routev2: v2Trade.route,
264
+ amount: amountIn,
265
+ },
266
+ ], [
267
+ {
268
+ routev3: (yield v3Trade).swaps[0].route,
269
+ amount: amountIn,
270
+ },
271
+ ], sdk_core_1.TradeType.EXACT_INPUT);
272
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
273
+ slippageTolerance,
274
+ recipient,
275
+ deadlineOrPreviousBlockhash: deadline,
276
+ });
277
+ expect(calldata).toEqual(expectedCalldata);
278
+ expect(value).toBe('0x00');
279
+ const mixedRouteTrades = yield _1.Trade.fromRoutes([], [], sdk_core_1.TradeType.EXACT_INPUT, [
280
+ {
281
+ mixedRoute: (yield mixedRouteTrade1).swaps[0].route,
282
+ amount: amountIn,
283
+ },
284
+ {
285
+ mixedRoute: (yield mixedRouteTrade2).swaps[0].route,
286
+ amount: amountIn,
287
+ },
288
+ ]);
289
+ const { calldata: mixedRouteCalldata, value: mixedRouteValue } = _1.SwapRouter.swapCallParameters(mixedRouteTrades, {
290
+ slippageTolerance,
291
+ recipient,
292
+ deadlineOrPreviousBlockhash: deadline,
293
+ });
294
+ expect(mixedRouteCalldata).toEqual(expectedCalldata);
295
+ expect(mixedRouteValue).toBe('0x00');
296
+ }));
297
+ });
298
+ });
299
+ describe('multi-hop exact input (mixed route) backwards compatible', () => {
300
+ describe('different trade configurations result in identical calldata', () => {
301
+ /// calldata verified and taken from existing test
302
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000104472b43f30000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124b858183f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000005f00000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000001000bb80000000000000000000000000000000000000002000bb8c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
303
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
304
+ const mixedRouteTrade1 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pair_0_1, pair_1_WETH], token0, WETH), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
305
+ const mixedRouteTrade2 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pool_V3_0_1, pool_V3_1_WETH], token0, WETH), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
306
+ it('single mixedRoute trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
307
+ const trades = [yield mixedRouteTrade1, yield mixedRouteTrade2];
308
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
309
+ slippageTolerance,
310
+ recipient,
311
+ deadlineOrPreviousBlockhash: deadline,
312
+ });
313
+ expect(calldata).toEqual(expectedCalldata);
314
+ expect(value).toBe('0x00');
315
+ }));
316
+ it('meta-trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
317
+ const trades = yield _1.Trade.fromRoutes([], [], sdk_core_1.TradeType.EXACT_INPUT, [
318
+ {
319
+ mixedRoute: (yield mixedRouteTrade1).swaps[0].route,
320
+ amount: amountIn,
321
+ },
322
+ {
323
+ mixedRoute: (yield mixedRouteTrade2).swaps[0].route,
324
+ amount: amountIn,
325
+ },
326
+ ]);
327
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
328
+ slippageTolerance,
329
+ recipient,
330
+ deadlineOrPreviousBlockhash: deadline,
331
+ });
332
+ expect(calldata).toEqual(expectedCalldata);
333
+ expect(value).toBe('0x00');
334
+ }));
335
+ });
336
+ });
337
+ describe('mixed route trades with routes with consecutive pools/pairs', () => {
338
+ /// manually verified calldata
339
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000124b858183f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000001000bb80000000000000000000000000000000000000002000bb8c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4472b43f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104472b43f300000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104b858183f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f000000000000000000000000000000000000000000000000000000000000002b0000000000000000000000000000000000000003000bb8c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
340
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
341
+ const mixedRouteTrade1 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pool_V3_0_1, pool_V3_1_WETH, pair_2_WETH], token0, WETH), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
342
+ const mixedRouteTrade2 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pair_0_1, pair_1_2, pool_V3_2_WETH], token0, WETH), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
343
+ it('generates correct calldata', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
344
+ const trades = [yield mixedRouteTrade1, yield mixedRouteTrade2];
345
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
346
+ slippageTolerance,
347
+ recipient,
348
+ deadlineOrPreviousBlockhash: deadline,
349
+ });
350
+ expect(calldata).toEqual(expectedCalldata);
351
+ expect(value).toBe('0x00');
352
+ }));
353
+ });
354
+ });
355
+ describe('ETH input', () => {
356
+ describe('single-hop exact input (v2 + v3)', () => {
357
+ describe('different trade configurations result in identical calldata', () => {
358
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000e4472b43f300000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000062000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000061000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
359
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(100));
360
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_1_WETH], ETHER, token1), amountIn);
361
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_1_WETH], ETHER, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
362
+ /// mixedRouteTrade mirrors the V3Trade
363
+ const mixedRouteTrade = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pool_V3_1_WETH], ETHER, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
364
+ it('array of trades', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
365
+ const trades = [v2Trade, yield v3Trade];
366
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
367
+ slippageTolerance,
368
+ recipient,
369
+ deadlineOrPreviousBlockhash: deadline,
370
+ });
371
+ expect(calldata).toEqual(expectedCalldata);
372
+ expect(value).toBe('0xc8');
373
+ }));
374
+ it('mixedRoute produces the same calldata when swapped in', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
375
+ const trades = [v2Trade, yield mixedRouteTrade];
376
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
377
+ slippageTolerance,
378
+ recipient,
379
+ deadlineOrPreviousBlockhash: deadline,
380
+ });
381
+ expect(calldata).toEqual(expectedCalldata);
382
+ expect(value).toBe('0xc8');
383
+ }));
384
+ it('meta-trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
385
+ const trades = yield _1.Trade.fromRoutes([
386
+ {
387
+ routev2: v2Trade.route,
388
+ amount: amountIn,
389
+ },
390
+ ], [
391
+ {
392
+ routev3: (yield v3Trade).swaps[0].route,
393
+ amount: amountIn,
394
+ },
395
+ ], sdk_core_1.TradeType.EXACT_INPUT);
396
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
397
+ slippageTolerance,
398
+ recipient,
399
+ deadlineOrPreviousBlockhash: deadline,
400
+ });
401
+ expect(calldata).toEqual(expectedCalldata);
402
+ expect(value).toBe('0xc8');
403
+ }));
404
+ it('meta-trade with mixedRoute', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
405
+ const trades = yield _1.Trade.fromRoutes([
406
+ {
407
+ routev2: v2Trade.route,
408
+ amount: amountIn,
409
+ },
410
+ ], [], sdk_core_1.TradeType.EXACT_INPUT, [
411
+ {
412
+ mixedRoute: (yield mixedRouteTrade).swaps[0].route,
413
+ amount: amountIn,
414
+ },
415
+ ]);
416
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
417
+ slippageTolerance,
418
+ recipient,
419
+ deadlineOrPreviousBlockhash: deadline,
420
+ });
421
+ expect(calldata).toEqual(expectedCalldata);
422
+ expect(value).toBe('0xc8');
423
+ }));
424
+ });
425
+ });
426
+ describe('single-hop exact output (v2 + v3)', () => {
427
+ describe('different trade configurations result in identical calldata', () => {
428
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000e442712a6700000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000066000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e45023b4df000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000067000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a00000000000000000000000000000000000000000000000000000000';
429
+ const amountOut = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(100));
430
+ const v2Trade = v2_sdk_1.Trade.exactOut(new v2_sdk_1.Route([pair_1_WETH], ETHER, token1), amountOut);
431
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_1_WETH], ETHER, token1), amountOut, sdk_core_1.TradeType.EXACT_OUTPUT);
432
+ it('array of trades', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
433
+ const trades = [v2Trade, yield v3Trade];
434
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
435
+ slippageTolerance,
436
+ recipient,
437
+ deadlineOrPreviousBlockhash: deadline,
438
+ });
439
+ expect(calldata).toEqual(expectedCalldata);
440
+ expect(value).toBe('0xcd');
441
+ }));
442
+ it('meta-trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
443
+ const trades = yield _1.Trade.fromRoutes([
444
+ {
445
+ routev2: v2Trade.route,
446
+ amount: amountOut,
447
+ },
448
+ ], [
449
+ {
450
+ routev3: (yield v3Trade).swaps[0].route,
451
+ amount: amountOut,
452
+ },
453
+ ], sdk_core_1.TradeType.EXACT_OUTPUT);
454
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
455
+ slippageTolerance,
456
+ recipient,
457
+ deadlineOrPreviousBlockhash: deadline,
458
+ });
459
+ expect(calldata).toEqual(expectedCalldata);
460
+ expect(value).toBe('0xcd');
461
+ }));
462
+ });
463
+ });
464
+ describe('multi-hop exact input (v2 + v3)', () => {
465
+ describe('different trade configurations result in identical calldata', () => {
466
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000104472b43f300000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000061000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124b858183f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000005f0000000000000000000000000000000000000000000000000000000000000042c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000bb80000000000000000000000000000000000000002000bb8000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
467
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(100));
468
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_1_WETH, pair_0_1], ETHER, token0), amountIn);
469
+ /// mixedRouteTrade mirrors V2Trade
470
+ const mixedRouteTrade = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pair_1_WETH, pair_0_1], ETHER, token0), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
471
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_1_WETH, pool_V3_0_1], ETHER, token0), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
472
+ it('array of trades', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
473
+ const trades = [v2Trade, yield v3Trade];
474
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
475
+ slippageTolerance,
476
+ recipient,
477
+ deadlineOrPreviousBlockhash: deadline,
478
+ });
479
+ expect(calldata).toEqual(expectedCalldata);
480
+ expect(value).toBe('0xc8');
481
+ }));
482
+ it('mixedRoutes in array produce same calldata', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
483
+ const trades = [yield mixedRouteTrade, yield v3Trade];
484
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
485
+ slippageTolerance,
486
+ recipient,
487
+ deadlineOrPreviousBlockhash: deadline,
488
+ });
489
+ expect(calldata).toEqual(expectedCalldata);
490
+ expect(value).toBe('0xc8');
491
+ }));
492
+ it('meta-trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
493
+ const trades = yield _1.Trade.fromRoutes([
494
+ {
495
+ routev2: v2Trade.route,
496
+ amount: amountIn,
497
+ },
498
+ ], [
499
+ {
500
+ routev3: (yield v3Trade).swaps[0].route,
501
+ amount: amountIn,
502
+ },
503
+ ], sdk_core_1.TradeType.EXACT_INPUT);
504
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
505
+ slippageTolerance,
506
+ recipient,
507
+ deadlineOrPreviousBlockhash: deadline,
508
+ });
509
+ expect(calldata).toEqual(expectedCalldata);
510
+ expect(value).toBe('0xc8');
511
+ }));
512
+ it('meta-trade with mixedRoutes produces calldata in different order but same content', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
513
+ /// @dev since we order the calldata in the array in a particular way (v2, v3, mixedRoute) the ordering will be different, but the encoded swap data will be the same
514
+ /// Additionally, since we aren't sharing balances across trades order should not matter
515
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000124b858183f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000005f0000000000000000000000000000000000000000000000000000000000000042c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000bb80000000000000000000000000000000000000002000bb80000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104472b43f300000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000061000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000';
516
+ const trades = yield _1.Trade.fromRoutes([], [
517
+ {
518
+ routev3: (yield v3Trade).swaps[0].route,
519
+ amount: amountIn,
520
+ },
521
+ ], sdk_core_1.TradeType.EXACT_INPUT, [
522
+ {
523
+ mixedRoute: (yield mixedRouteTrade).swaps[0].route,
524
+ amount: amountIn,
525
+ },
526
+ ]);
527
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
528
+ slippageTolerance,
529
+ recipient,
530
+ deadlineOrPreviousBlockhash: deadline,
531
+ });
532
+ expect(calldata).toEqual(expectedCalldata);
533
+ expect(value).toBe('0xc8');
534
+ }));
535
+ });
536
+ });
537
+ describe('multi-hop exact output (v2 + v3)', () => {
538
+ describe('different trade configurations result in identical calldata', () => {
539
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010442712a6700000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000067000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012409b813460000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006900000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000001000bb80000000000000000000000000000000000000002000bb8c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a00000000000000000000000000000000000000000000000000000000';
540
+ const amountOut = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
541
+ const v2Trade = v2_sdk_1.Trade.exactOut(new v2_sdk_1.Route([pair_1_WETH, pair_0_1], ETHER, token0), amountOut);
542
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_1_WETH, pool_V3_0_1], ETHER, token0), amountOut, sdk_core_1.TradeType.EXACT_OUTPUT);
543
+ it('array of trades', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
544
+ const trades = [v2Trade, yield v3Trade];
545
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
546
+ slippageTolerance,
547
+ recipient,
548
+ deadlineOrPreviousBlockhash: deadline,
549
+ });
550
+ expect(calldata).toEqual(expectedCalldata);
551
+ expect(value).toBe('0xd0');
552
+ }));
553
+ it('meta-trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
554
+ const trades = yield _1.Trade.fromRoutes([
555
+ {
556
+ routev2: v2Trade.route,
557
+ amount: amountOut,
558
+ },
559
+ ], [
560
+ {
561
+ routev3: (yield v3Trade).swaps[0].route,
562
+ amount: amountOut,
563
+ },
564
+ ], sdk_core_1.TradeType.EXACT_OUTPUT);
565
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
566
+ slippageTolerance,
567
+ recipient,
568
+ deadlineOrPreviousBlockhash: deadline,
569
+ });
570
+ expect(calldata).toEqual(expectedCalldata);
571
+ expect(value).toBe('0xd0');
572
+ }));
573
+ });
574
+ });
575
+ describe('high price impact with ETH input to result in refundETH being appended to calldata', () => {
576
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000e4472b43f300000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000062000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a00000000000000000000000000000000000000000000000000000000';
577
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(100));
578
+ const pool_V3_1_WETH_slippage = makeV3Pool(token1, WETH, 100);
579
+ const REFUND_ETH_FUNCTION_SIG = /12210e8a/;
580
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_1_WETH], ETHER, token1), amountIn);
581
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_1_WETH_slippage], ETHER, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
582
+ it('array of trades', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
583
+ const trades = [v2Trade, yield v3Trade];
584
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
585
+ slippageTolerance,
586
+ recipient,
587
+ deadlineOrPreviousBlockhash: deadline,
588
+ });
589
+ expect(calldata).toEqual(expectedCalldata);
590
+ expect(calldata).toMatch(REFUND_ETH_FUNCTION_SIG);
591
+ expect(value).toBe('0xc8');
592
+ }));
593
+ });
594
+ describe('high price impact with ERCO20 input does not result in refundETH call', () => {
595
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000e4472b43f3000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000620000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
596
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(100));
597
+ const pool_V3_1_WETH_slippage = makeV3Pool(token1, WETH, 100);
598
+ const REFUND_ETH_FUNCTION_SIG = /12210e8a/;
599
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_1_WETH], token1, WETH), amountIn);
600
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_1_WETH_slippage], token1, WETH), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
601
+ it('array of trades', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
602
+ const trades = [v2Trade, yield v3Trade];
603
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
604
+ slippageTolerance,
605
+ recipient,
606
+ deadlineOrPreviousBlockhash: deadline,
607
+ });
608
+ expect(calldata).toEqual(expectedCalldata);
609
+ expect(calldata).not.toMatch(REFUND_ETH_FUNCTION_SIG);
610
+ expect(value).toBe('0x00');
611
+ }));
612
+ });
613
+ });
614
+ describe('ETH output', () => {
615
+ describe('single-hop exact input (v2 + v3)', () => {
616
+ describe('different trade configurations result in identical calldata', () => {
617
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000e4472b43f3000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000620000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000061000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c00000000000000000000000000000000000000000000000000000000000000c3000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000';
618
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(100));
619
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_1_WETH], token1, ETHER), amountIn);
620
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_1_WETH], token1, ETHER), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
621
+ /// mixedRoute mirrors v3Trade
622
+ const mixedRouteTrade = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pool_V3_1_WETH], token1, ETHER), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
623
+ it('array of trades', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
624
+ const trades = [v2Trade, yield v3Trade];
625
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
626
+ slippageTolerance,
627
+ recipient,
628
+ deadlineOrPreviousBlockhash: deadline,
629
+ });
630
+ expect(calldata).toEqual(expectedCalldata);
631
+ expect(value).toBe('0x00');
632
+ }));
633
+ it('array of trades with mixedRoute produces same calldata', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
634
+ const trades = [v2Trade, yield mixedRouteTrade];
635
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
636
+ slippageTolerance,
637
+ recipient,
638
+ deadlineOrPreviousBlockhash: deadline,
639
+ });
640
+ expect(calldata).toEqual(expectedCalldata);
641
+ expect(value).toBe('0x00');
642
+ }));
643
+ it('meta-trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
644
+ const trades = yield _1.Trade.fromRoutes([
645
+ {
646
+ routev2: v2Trade.route,
647
+ amount: amountIn,
648
+ },
649
+ ], [
650
+ {
651
+ routev3: (yield v3Trade).swaps[0].route,
652
+ amount: amountIn,
653
+ },
654
+ ], sdk_core_1.TradeType.EXACT_INPUT);
655
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
656
+ slippageTolerance,
657
+ recipient,
658
+ deadlineOrPreviousBlockhash: deadline,
659
+ });
660
+ expect(calldata).toEqual(expectedCalldata);
661
+ expect(value).toBe('0x00');
662
+ }));
663
+ it('meta-trade with mixedRoute produces same calldata', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
664
+ const trades = yield _1.Trade.fromRoutes([
665
+ {
666
+ routev2: v2Trade.route,
667
+ amount: amountIn,
668
+ },
669
+ ], [], sdk_core_1.TradeType.EXACT_INPUT, [
670
+ {
671
+ mixedRoute: (yield mixedRouteTrade).swaps[0].route,
672
+ amount: amountIn,
673
+ },
674
+ ]);
675
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
676
+ slippageTolerance,
677
+ recipient,
678
+ deadlineOrPreviousBlockhash: deadline,
679
+ });
680
+ expect(calldata).toEqual(expectedCalldata);
681
+ expect(value).toBe('0x00');
682
+ }));
683
+ });
684
+ });
685
+ describe('single-hop exact output (v2 + v3)', () => {
686
+ describe('different trade configurations result in identical calldata', () => {
687
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000e442712a67000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e45023b4df0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000067000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c00000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000';
688
+ const amountOut = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(100));
689
+ const v2Trade = v2_sdk_1.Trade.exactOut(new v2_sdk_1.Route([pair_1_WETH], token1, ETHER), amountOut);
690
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_1_WETH], token1, ETHER), amountOut, sdk_core_1.TradeType.EXACT_OUTPUT);
691
+ it('array of trades', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
692
+ const trades = [v2Trade, yield v3Trade];
693
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
694
+ slippageTolerance,
695
+ recipient,
696
+ deadlineOrPreviousBlockhash: deadline,
697
+ });
698
+ expect(calldata).toEqual(expectedCalldata);
699
+ expect(value).toBe('0x00');
700
+ }));
701
+ it('meta-trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
702
+ const trades = yield _1.Trade.fromRoutes([
703
+ {
704
+ routev2: v2Trade.route,
705
+ amount: amountOut,
706
+ },
707
+ ], [
708
+ {
709
+ routev3: (yield v3Trade).swaps[0].route,
710
+ amount: amountOut,
711
+ },
712
+ ], sdk_core_1.TradeType.EXACT_OUTPUT);
713
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
714
+ slippageTolerance,
715
+ recipient,
716
+ deadlineOrPreviousBlockhash: deadline,
717
+ });
718
+ expect(calldata).toEqual(expectedCalldata);
719
+ expect(value).toBe('0x00');
720
+ }));
721
+ });
722
+ });
723
+ describe('multi-hop exact input (v2 + v3)', () => {
724
+ describe('different trade configurations result in identical calldata', () => {
725
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000104472b43f30000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124b858183f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000005f00000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000001000bb80000000000000000000000000000000000000002000bb8c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000';
726
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
727
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_0_1, pair_1_WETH], token0, ETHER), amountIn);
728
+ /// mixedRouteTrade mirrors v2Trade
729
+ const mixedRouteTrade = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pair_0_1, pair_1_WETH], token0, ETHER), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
730
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_0_1, pool_V3_1_WETH], token0, ETHER), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
731
+ it('array of trades', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
732
+ const trades = [v2Trade, yield v3Trade];
733
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
734
+ slippageTolerance,
735
+ recipient,
736
+ deadlineOrPreviousBlockhash: deadline,
737
+ });
738
+ expect(calldata).toEqual(expectedCalldata);
739
+ expect(value).toBe('0x00');
740
+ }));
741
+ it('array of trades with mixedRoute produces same calldata', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
742
+ const trades = [yield mixedRouteTrade, yield v3Trade];
743
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
744
+ slippageTolerance,
745
+ recipient,
746
+ deadlineOrPreviousBlockhash: deadline,
747
+ });
748
+ expect(calldata).toEqual(expectedCalldata);
749
+ expect(value).toBe('0x00');
750
+ }));
751
+ it('meta-trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
752
+ const trades = yield _1.Trade.fromRoutes([
753
+ {
754
+ routev2: v2Trade.route,
755
+ amount: amountIn,
756
+ },
757
+ ], [
758
+ {
759
+ routev3: (yield v3Trade).swaps[0].route,
760
+ amount: amountIn,
761
+ },
762
+ ], sdk_core_1.TradeType.EXACT_INPUT);
763
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
764
+ slippageTolerance,
765
+ recipient,
766
+ deadlineOrPreviousBlockhash: deadline,
767
+ });
768
+ expect(calldata).toEqual(expectedCalldata);
769
+ expect(value).toBe('0x00');
770
+ }));
771
+ it('meta-trade with mixedRoute produces same calldata but in different order', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
772
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000124b858183f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000005f00000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000001000bb80000000000000000000000000000000000000002000bb8c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104472b43f30000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000';
773
+ const trades = yield _1.Trade.fromRoutes([], [
774
+ {
775
+ routev3: (yield v3Trade).swaps[0].route,
776
+ amount: amountIn,
777
+ },
778
+ ], sdk_core_1.TradeType.EXACT_INPUT, [
779
+ {
780
+ mixedRoute: (yield mixedRouteTrade).swaps[0].route,
781
+ amount: amountIn,
782
+ },
783
+ ]);
784
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
785
+ slippageTolerance,
786
+ recipient,
787
+ deadlineOrPreviousBlockhash: deadline,
788
+ });
789
+ expect(calldata).toEqual(expectedCalldata);
790
+ expect(value).toBe('0x00');
791
+ }));
792
+ });
793
+ });
794
+ describe('multi-hop exact output (v2 + v3)', () => {
795
+ describe('different trade configurations result in identical calldata', () => {
796
+ const expectedCalldata = '0x5ae401dc000000000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010442712a670000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012409b81346000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000042c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000bb80000000000000000000000000000000000000002000bb8000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004449404b7c00000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000';
797
+ const amountOut = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(100));
798
+ const v2Trade = v2_sdk_1.Trade.exactOut(new v2_sdk_1.Route([pair_0_1, pair_1_WETH], token0, ETHER), amountOut);
799
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_0_1, pool_V3_1_WETH], token0, ETHER), amountOut, sdk_core_1.TradeType.EXACT_OUTPUT);
800
+ it('array of trades', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
801
+ const trades = [v2Trade, yield v3Trade];
802
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
803
+ slippageTolerance,
804
+ recipient,
805
+ deadlineOrPreviousBlockhash: deadline,
806
+ });
807
+ expect(calldata).toEqual(expectedCalldata);
808
+ expect(value).toBe('0x00');
809
+ }));
810
+ it('meta-trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
811
+ const trades = yield _1.Trade.fromRoutes([
812
+ {
813
+ routev2: v2Trade.route,
814
+ amount: amountOut,
815
+ },
816
+ ], [
817
+ {
818
+ routev3: (yield v3Trade).swaps[0].route,
819
+ amount: amountOut,
820
+ },
821
+ ], sdk_core_1.TradeType.EXACT_OUTPUT);
822
+ const { calldata, value } = _1.SwapRouter.swapCallParameters(trades, {
823
+ slippageTolerance,
824
+ recipient,
825
+ deadlineOrPreviousBlockhash: deadline,
826
+ });
827
+ expect(calldata).toEqual(expectedCalldata);
828
+ expect(value).toBe('0x00');
829
+ }));
830
+ });
831
+ });
832
+ });
833
+ describe('#swapAndAddCallParameters', () => {
834
+ describe('single-hop trades', () => {
835
+ const expectedCalldata = '0xac9650d80000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000005e000000000000000000000000000000000000000000000000000000000000000e4472b43f3000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000032c89c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000032c8ad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010411ed56c9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000bb8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc4000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
836
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(10));
837
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_0_1], token0, token1), amountIn);
838
+ /// mirrors V2Trade
839
+ const mixedRouteTrade2 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pair_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
840
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
841
+ /// mixedRoute mirrors v3Trade
842
+ const mixedRouteTrade3 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pool_V3_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
843
+ const position = new v3_sdk_1.Position({
844
+ pool: pool_V3_0_1,
845
+ tickLower: -60,
846
+ tickUpper: 60,
847
+ liquidity: 1111111111,
848
+ });
849
+ const addLiquidityOptions = {
850
+ recipient: '0x0000000000000000000000000000000000000006',
851
+ slippageTolerance,
852
+ deadline: Math.pow(2, 32),
853
+ };
854
+ it('correctly encodes the entire swap process', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
855
+ const trades = [v2Trade, yield v3Trade];
856
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.NOT_REQUIRED, approveAndCall_1.ApprovalTypes.NOT_REQUIRED);
857
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
858
+ }));
859
+ it('correctly encodes the entire swap process when v2 + mixedRoute', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
860
+ const trades = [v2Trade, yield mixedRouteTrade3];
861
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.NOT_REQUIRED, approveAndCall_1.ApprovalTypes.NOT_REQUIRED);
862
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
863
+ }));
864
+ it('correctly encodes the entire swap process when mixedRoute + v3', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
865
+ const trades = [yield mixedRouteTrade2, yield v3Trade];
866
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.NOT_REQUIRED, approveAndCall_1.ApprovalTypes.NOT_REQUIRED);
867
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
868
+ }));
869
+ });
870
+ describe('multi-hop trades', () => {
871
+ const expectedCalldata = '0xac9650d80000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000104472b43f30000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124b858183f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000005f00000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000001000bb80000000000000000000000000000000000000002000bb8c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000032c7eb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000032c8ad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010411ed56c90000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000bb8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc4000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
872
+ const pool_V3_0_WETH = makeV3Pool(token0, WETH, liquidity);
873
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
874
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_0_1, pair_1_WETH], token0, WETH), amountIn);
875
+ /// mirrors V2Trade
876
+ const mixedRouteTrade2 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pair_0_1, pair_1_WETH], token0, WETH), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
877
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_0_1, pool_V3_1_WETH], token0, WETH), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
878
+ /// mixedRoute mirrors v3Trade
879
+ const mixedRouteTrade3 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pool_V3_0_1, pool_V3_1_WETH], token0, WETH), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
880
+ const position = new v3_sdk_1.Position({
881
+ pool: pool_V3_0_WETH,
882
+ tickLower: -60,
883
+ tickUpper: 60,
884
+ liquidity: 1111111111,
885
+ });
886
+ const addLiquidityOptions = {
887
+ recipient: '0x0000000000000000000000000000000000000006',
888
+ slippageTolerance,
889
+ deadline: Math.pow(2, 32),
890
+ };
891
+ it('encodes the entire swap process for a multi route trade', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
892
+ const trades = [v2Trade, yield v3Trade];
893
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.NOT_REQUIRED, approveAndCall_1.ApprovalTypes.NOT_REQUIRED);
894
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
895
+ }));
896
+ it('encodes the entire swap process for a multi route trade with v2, mixedRoute', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
897
+ const trades = [v2Trade, yield mixedRouteTrade3];
898
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.NOT_REQUIRED, approveAndCall_1.ApprovalTypes.NOT_REQUIRED);
899
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
900
+ }));
901
+ it('encodes the entire swap process for a multi route trade with mixedRoute, v3', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
902
+ const trades = [yield mixedRouteTrade2, yield v3Trade];
903
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.NOT_REQUIRED, approveAndCall_1.ApprovalTypes.NOT_REQUIRED);
904
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
905
+ }));
906
+ it('encodes the entire swap process for a multi route trade with mixedRoute, mixedRoute', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
907
+ const trades = [yield mixedRouteTrade2, yield mixedRouteTrade3];
908
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.NOT_REQUIRED, approveAndCall_1.ApprovalTypes.NOT_REQUIRED);
909
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
910
+ }));
911
+ });
912
+ describe('adding liquidity to an existing position', () => {
913
+ const expectedCalldata = '0xac9650d80000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000004200000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000000e4472b43f3000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000032c89c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000032c8ad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4f100b20500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
914
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(10));
915
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_0_1], token0, token1), amountIn);
916
+ const mixedRouteTrade2 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pair_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
917
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
918
+ const mixedRouteTrade3 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pool_V3_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
919
+ const position = new v3_sdk_1.Position({
920
+ pool: pool_V3_0_1,
921
+ tickLower: -60,
922
+ tickUpper: 60,
923
+ liquidity: 1111111111,
924
+ });
925
+ const addLiquidityOptions = {
926
+ slippageTolerance,
927
+ deadline: Math.pow(2, 32),
928
+ tokenId: 1,
929
+ };
930
+ it('correctly encodes the entire swap process', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
931
+ const trades = [v2Trade, yield v3Trade];
932
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.NOT_REQUIRED, approveAndCall_1.ApprovalTypes.NOT_REQUIRED);
933
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
934
+ }));
935
+ it('correctly encodes the entire swap process, v2, mixed', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
936
+ const trades = [v2Trade, yield mixedRouteTrade3];
937
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.NOT_REQUIRED, approveAndCall_1.ApprovalTypes.NOT_REQUIRED);
938
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
939
+ }));
940
+ it('correctly encodes the entire swap process, mixed, v3', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
941
+ const trades = [yield mixedRouteTrade2, yield v3Trade];
942
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.NOT_REQUIRED, approveAndCall_1.ApprovalTypes.NOT_REQUIRED);
943
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
944
+ }));
945
+ });
946
+ describe('when MAX tokens must be approved to the NFT Manager', () => {
947
+ const expectedCalldata = '0xac9650d80000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000000e4472b43f3000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000032c89c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000032c8ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024571ac8b00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024571ac8b000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4f100b20500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
948
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(10));
949
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_0_1], token0, token1), amountIn);
950
+ const mixedRouteTrade2 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pair_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
951
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
952
+ const mixedRouteTrade3 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pool_V3_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
953
+ const position = new v3_sdk_1.Position({
954
+ pool: pool_V3_0_1,
955
+ tickLower: -60,
956
+ tickUpper: 60,
957
+ liquidity: 1111111111,
958
+ });
959
+ const addLiquidityOptions = {
960
+ slippageTolerance,
961
+ deadline: Math.pow(2, 32),
962
+ tokenId: 1,
963
+ };
964
+ it('correctly encodes the entire swap process', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
965
+ const trades = [v2Trade, yield v3Trade];
966
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.MAX, approveAndCall_1.ApprovalTypes.MAX);
967
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
968
+ }));
969
+ it('correctly encodes the entire swap process, v2, mixed', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
970
+ const trades = [v2Trade, yield mixedRouteTrade3];
971
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.MAX, approveAndCall_1.ApprovalTypes.MAX);
972
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
973
+ }));
974
+ it('correctly encodes the entire swap process, mixed, v3', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
975
+ const trades = [yield mixedRouteTrade2, yield v3Trade];
976
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.MAX, approveAndCall_1.ApprovalTypes.MAX);
977
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
978
+ }));
979
+ it('correctly encodes the entire swap process, mixed, mixed', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
980
+ const trades = [yield mixedRouteTrade2, yield mixedRouteTrade3];
981
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.MAX, approveAndCall_1.ApprovalTypes.MAX);
982
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
983
+ }));
984
+ });
985
+ describe('when MAX_MINUS_ONE tokens must be approved to the NFT Manager', () => {
986
+ const expectedCalldata = '0xac9650d80000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000000e4472b43f3000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000032c89c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000032c8ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024cab372ce0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024cab372ce00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4f100b20500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
987
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(10));
988
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_0_1], token0, token1), amountIn);
989
+ const mixedRouteTrade2 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pair_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
990
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
991
+ const mixedRouteTrade3 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pool_V3_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
992
+ const position = new v3_sdk_1.Position({
993
+ pool: pool_V3_0_1,
994
+ tickLower: -60,
995
+ tickUpper: 60,
996
+ liquidity: 1111111111,
997
+ });
998
+ const addLiquidityOptions = {
999
+ slippageTolerance,
1000
+ deadline: Math.pow(2, 32),
1001
+ tokenId: 1,
1002
+ };
1003
+ it('correctly encodes the entire swap process', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1004
+ const trades = [v2Trade, yield v3Trade];
1005
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.MAX_MINUS_ONE, approveAndCall_1.ApprovalTypes.MAX_MINUS_ONE);
1006
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1007
+ }));
1008
+ it('correctly encodes the entire swap process, v2, mixed', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1009
+ const trades = [v2Trade, yield mixedRouteTrade3];
1010
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.MAX_MINUS_ONE, approveAndCall_1.ApprovalTypes.MAX_MINUS_ONE);
1011
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1012
+ }));
1013
+ it('correctly encodes the entire swap process, mixed, v3', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1014
+ const trades = [yield mixedRouteTrade2, yield v3Trade];
1015
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.MAX_MINUS_ONE, approveAndCall_1.ApprovalTypes.MAX_MINUS_ONE);
1016
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1017
+ }));
1018
+ it('correctly encodes the entire swap process, mixed, mixed', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1019
+ const trades = [yield mixedRouteTrade2, yield mixedRouteTrade3];
1020
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.MAX_MINUS_ONE, approveAndCall_1.ApprovalTypes.MAX_MINUS_ONE);
1021
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1022
+ }));
1023
+ });
1024
+ describe('when ZERO_THEN_MAX tokens must be approved to the NFT Manager', () => {
1025
+ const expectedCalldata = '0xac9650d80000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000000e4472b43f3000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000032c89c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000032c8ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024639d71a90000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024639d71a900000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4f100b20500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
1026
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(10));
1027
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_0_1], token0, token1), amountIn);
1028
+ const mixedRouteTrade2 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pair_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
1029
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
1030
+ const mixedRouteTrade3 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pool_V3_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
1031
+ const position = new v3_sdk_1.Position({
1032
+ pool: pool_V3_0_1,
1033
+ tickLower: -60,
1034
+ tickUpper: 60,
1035
+ liquidity: 1111111111,
1036
+ });
1037
+ const addLiquidityOptions = {
1038
+ slippageTolerance,
1039
+ deadline: Math.pow(2, 32),
1040
+ tokenId: 1,
1041
+ };
1042
+ it('correctly encodes the entire swap process', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1043
+ const trades = [v2Trade, yield v3Trade];
1044
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX);
1045
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1046
+ }));
1047
+ it('correctly encodes the entire swap process v2, mixed', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1048
+ const trades = [v2Trade, yield mixedRouteTrade3];
1049
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX);
1050
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1051
+ }));
1052
+ it('correctly encodes the entire swap process mixed, v3', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1053
+ const trades = [yield mixedRouteTrade2, yield v3Trade];
1054
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX);
1055
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1056
+ }));
1057
+ it('correctly encodes the entire swap process mixed, mixed', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1058
+ const trades = [yield mixedRouteTrade2, yield mixedRouteTrade3];
1059
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX);
1060
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1061
+ }));
1062
+ });
1063
+ describe('when ZERO_THEN_MAX_MINUS_ONE tokens must be approved to the NFT Manager', () => {
1064
+ const expectedCalldata = '0xac9650d80000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000000e4472b43f3000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000032c89c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000032c8ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024ab3fdd500000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024ab3fdd5000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4f100b20500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
1065
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(10));
1066
+ const v2Trade = v2_sdk_1.Trade.exactIn(new v2_sdk_1.Route([pair_0_1], token0, token1), amountIn);
1067
+ const mixedRouteTrade2 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pair_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
1068
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
1069
+ const mixedRouteTrade3 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pool_V3_0_1], token0, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
1070
+ const position = new v3_sdk_1.Position({
1071
+ pool: pool_V3_0_1,
1072
+ tickLower: -60,
1073
+ tickUpper: 60,
1074
+ liquidity: 1111111111,
1075
+ });
1076
+ const addLiquidityOptions = {
1077
+ slippageTolerance,
1078
+ deadline: Math.pow(2, 32),
1079
+ tokenId: 1,
1080
+ };
1081
+ it('correctly encodes the entire swap process', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1082
+ const trades = [v2Trade, yield v3Trade];
1083
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX_MINUS_ONE, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX_MINUS_ONE);
1084
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1085
+ }));
1086
+ it('correctly encodes the entire swap process v2, mixed', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1087
+ const trades = [v2Trade, yield mixedRouteTrade3];
1088
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX_MINUS_ONE, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX_MINUS_ONE);
1089
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1090
+ }));
1091
+ it('correctly encodes the entire swap process mixed, v3', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1092
+ const trades = [yield mixedRouteTrade2, yield v3Trade];
1093
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX_MINUS_ONE, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX_MINUS_ONE);
1094
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1095
+ }));
1096
+ it('correctly encodes the entire swap process mixed, mixed', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1097
+ const trades = [yield mixedRouteTrade2, yield mixedRouteTrade3];
1098
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX_MINUS_ONE, approveAndCall_1.ApprovalTypes.ZERO_THEN_MAX_MINUS_ONE);
1099
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1100
+ }));
1101
+ });
1102
+ describe('when input is native', () => {
1103
+ const expectedCalldata = '0xac9650d8000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000004a0000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000e404e45aaf000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000032c8a50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000241c58db4f000000000000000000000000000000000000000000000000000000000032c8ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024571ac8b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024571ac8b000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4f100b2050000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024496169970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
1104
+ const ETH = sdk_core_1.Ether.onChain(1);
1105
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(ETH, jsbi_1.default.BigInt(10));
1106
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_1_WETH], ETH, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
1107
+ const mixedRouteTrade3 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pool_V3_1_WETH], ETH, token1), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
1108
+ const position = new v3_sdk_1.Position({
1109
+ pool: pool_V3_1_WETH,
1110
+ tickLower: -60,
1111
+ tickUpper: 60,
1112
+ liquidity: 1111111111,
1113
+ });
1114
+ const addLiquidityOptions = {
1115
+ slippageTolerance,
1116
+ deadline: Math.pow(2, 32),
1117
+ tokenId: 1,
1118
+ };
1119
+ it('correctly encodes the entire swap process', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1120
+ const trades = [yield v3Trade];
1121
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.MAX, approveAndCall_1.ApprovalTypes.MAX);
1122
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1123
+ }));
1124
+ it('correctly encodes the entire swap process when is a mixedRoute', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1125
+ const trades = [yield mixedRouteTrade3];
1126
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.MAX, approveAndCall_1.ApprovalTypes.MAX);
1127
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1128
+ }));
1129
+ });
1130
+ describe('when output is native', () => {
1131
+ const expectedCalldata = '0xac9650d8000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000004a0000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000000e404e45aaf0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000241c58db4f000000000000000000000000000000000000000000000000000000000032c8a5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044f2d5d56b0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000032c8ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024571ac8b00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024571ac8b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4f100b2050000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e90a182f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002449616997000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
1132
+ const ETH = sdk_core_1.Ether.onChain(1);
1133
+ const amountIn = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(10));
1134
+ const v3Trade = v3_sdk_1.Trade.fromRoute(new v3_sdk_1.Route([pool_V3_1_WETH], token1, ETH), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
1135
+ const mixedRouteTrade3 = trade_1.MixedRouteTrade.fromRoute(new route_1.MixedRouteSDK([pool_V3_1_WETH], token1, ETH), amountIn, sdk_core_1.TradeType.EXACT_INPUT);
1136
+ const position = new v3_sdk_1.Position({
1137
+ pool: pool_V3_1_WETH,
1138
+ tickLower: -60,
1139
+ tickUpper: 60,
1140
+ liquidity: 1111111111,
1141
+ });
1142
+ const addLiquidityOptions = {
1143
+ slippageTolerance,
1144
+ deadline: Math.pow(2, 32),
1145
+ tokenId: 1,
1146
+ };
1147
+ it('correctly encodes the entire swap process', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1148
+ const trades = [yield v3Trade];
1149
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.MAX, approveAndCall_1.ApprovalTypes.MAX);
1150
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1151
+ }));
1152
+ it('correctly encodes the entire swap process when is mixedRoute', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1153
+ const trades = [yield mixedRouteTrade3];
1154
+ const methodParameters = _1.SwapRouter.swapAndAddCallParameters(trades, { slippageTolerance }, position, addLiquidityOptions, approveAndCall_1.ApprovalTypes.MAX, approveAndCall_1.ApprovalTypes.MAX);
1155
+ expect(methodParameters.calldata).toEqual(expectedCalldata);
1156
+ }));
1157
+ });
1158
+ });
1159
+ });
1160
+ });
1161
+ //# sourceMappingURL=swapRouter.test.js.map