@uniswap/router-sdk 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/dist/{cjs/src/approveAndCall.d.ts → approveAndCall.d.ts} +33 -33
  2. package/dist/{types/src/constants.d.ts → constants.d.ts} +13 -13
  3. package/dist/{types/src/entities → entities}/mixedRoute/route.d.ts +29 -29
  4. package/dist/{esm/src/entities → entities}/mixedRoute/trade.d.ts +183 -183
  5. package/dist/{cjs/src/entities → entities}/protocol.d.ts +6 -6
  6. package/dist/{esm/src/entities → entities}/route.d.ts +40 -40
  7. package/dist/{esm/src/entities → entities}/trade.d.ts +127 -127
  8. package/dist/{cjs/src/index.d.ts → index.d.ts} +14 -14
  9. package/dist/index.js +8 -0
  10. package/dist/{cjs/src/multicallExtended.d.ts → multicallExtended.d.ts} +11 -11
  11. package/dist/{types/src/paymentsExtended.d.ts → paymentsExtended.d.ts} +15 -15
  12. package/dist/router-sdk.cjs.development.js +2460 -0
  13. package/dist/router-sdk.cjs.development.js.map +1 -0
  14. package/dist/router-sdk.cjs.production.min.js +2 -0
  15. package/dist/router-sdk.cjs.production.min.js.map +1 -0
  16. package/dist/router-sdk.esm.js +2427 -0
  17. package/dist/router-sdk.esm.js.map +1 -0
  18. package/dist/{cjs/src/swapRouter.d.ts → swapRouter.d.ts} +95 -95
  19. package/dist/{cjs/src/utils → utils}/TPool.d.ts +4 -4
  20. package/dist/{cjs/src/utils → utils}/encodeMixedRouteToPath.d.ts +9 -9
  21. package/dist/{types/src/utils → utils}/index.d.ts +16 -16
  22. package/dist/{cjs/src/utils → utils}/pathCurrency.d.ts +4 -4
  23. package/package.json +18 -33
  24. package/dist/cjs/src/approveAndCall.js +0 -111
  25. package/dist/cjs/src/approveAndCall.js.map +0 -1
  26. package/dist/cjs/src/constants.d.ts +0 -13
  27. package/dist/cjs/src/constants.js +0 -22
  28. package/dist/cjs/src/constants.js.map +0 -1
  29. package/dist/cjs/src/entities/mixedRoute/route.d.ts +0 -29
  30. package/dist/cjs/src/entities/mixedRoute/route.js +0 -119
  31. package/dist/cjs/src/entities/mixedRoute/route.js.map +0 -1
  32. package/dist/cjs/src/entities/mixedRoute/route.test.d.ts +0 -1
  33. package/dist/cjs/src/entities/mixedRoute/route.test.js +0 -469
  34. package/dist/cjs/src/entities/mixedRoute/route.test.js.map +0 -1
  35. package/dist/cjs/src/entities/mixedRoute/trade.d.ts +0 -183
  36. package/dist/cjs/src/entities/mixedRoute/trade.js +0 -357
  37. package/dist/cjs/src/entities/mixedRoute/trade.js.map +0 -1
  38. package/dist/cjs/src/entities/mixedRoute/trade.test.d.ts +0 -1
  39. package/dist/cjs/src/entities/mixedRoute/trade.test.js +0 -1010
  40. package/dist/cjs/src/entities/mixedRoute/trade.test.js.map +0 -1
  41. package/dist/cjs/src/entities/protocol.js +0 -11
  42. package/dist/cjs/src/entities/protocol.js.map +0 -1
  43. package/dist/cjs/src/entities/route.d.ts +0 -40
  44. package/dist/cjs/src/entities/route.js +0 -63
  45. package/dist/cjs/src/entities/route.js.map +0 -1
  46. package/dist/cjs/src/entities/route.test.d.ts +0 -1
  47. package/dist/cjs/src/entities/route.test.js +0 -192
  48. package/dist/cjs/src/entities/route.test.js.map +0 -1
  49. package/dist/cjs/src/entities/trade.d.ts +0 -127
  50. package/dist/cjs/src/entities/trade.js +0 -366
  51. package/dist/cjs/src/entities/trade.js.map +0 -1
  52. package/dist/cjs/src/entities/trade.test.d.ts +0 -1
  53. package/dist/cjs/src/entities/trade.test.js +0 -1267
  54. package/dist/cjs/src/entities/trade.test.js.map +0 -1
  55. package/dist/cjs/src/index.js +0 -18
  56. package/dist/cjs/src/index.js.map +0 -1
  57. package/dist/cjs/src/multicallExtended.js +0 -43
  58. package/dist/cjs/src/multicallExtended.js.map +0 -1
  59. package/dist/cjs/src/multicallExtended.test.d.ts +0 -1
  60. package/dist/cjs/src/multicallExtended.test.js +0 -22
  61. package/dist/cjs/src/multicallExtended.test.js.map +0 -1
  62. package/dist/cjs/src/paymentsExtended.d.ts +0 -15
  63. package/dist/cjs/src/paymentsExtended.js +0 -65
  64. package/dist/cjs/src/paymentsExtended.js.map +0 -1
  65. package/dist/cjs/src/paymentsExtended.test.d.ts +0 -1
  66. package/dist/cjs/src/paymentsExtended.test.js +0 -60
  67. package/dist/cjs/src/paymentsExtended.test.js.map +0 -1
  68. package/dist/cjs/src/swapRouter.js +0 -439
  69. package/dist/cjs/src/swapRouter.js.map +0 -1
  70. package/dist/cjs/src/swapRouter.test.d.ts +0 -1
  71. package/dist/cjs/src/swapRouter.test.js +0 -1161
  72. package/dist/cjs/src/swapRouter.test.js.map +0 -1
  73. package/dist/cjs/src/utils/TPool.js +0 -3
  74. package/dist/cjs/src/utils/TPool.js.map +0 -1
  75. package/dist/cjs/src/utils/encodeMixedRouteToPath.js +0 -90
  76. package/dist/cjs/src/utils/encodeMixedRouteToPath.js.map +0 -1
  77. package/dist/cjs/src/utils/encodeMixedRouteToPath.test.d.ts +0 -1
  78. package/dist/cjs/src/utils/encodeMixedRouteToPath.test.js +0 -136
  79. package/dist/cjs/src/utils/encodeMixedRouteToPath.test.js.map +0 -1
  80. package/dist/cjs/src/utils/index.d.ts +0 -16
  81. package/dist/cjs/src/utils/index.js +0 -51
  82. package/dist/cjs/src/utils/index.js.map +0 -1
  83. package/dist/cjs/src/utils/pathCurrency.js +0 -35
  84. package/dist/cjs/src/utils/pathCurrency.js.map +0 -1
  85. package/dist/cjs/src/utils/pathCurrency.test.d.ts +0 -1
  86. package/dist/cjs/src/utils/pathCurrency.test.js +0 -17
  87. package/dist/cjs/src/utils/pathCurrency.test.js.map +0 -1
  88. package/dist/esm/src/approveAndCall.d.ts +0 -33
  89. package/dist/esm/src/approveAndCall.js +0 -105
  90. package/dist/esm/src/approveAndCall.js.map +0 -1
  91. package/dist/esm/src/constants.d.ts +0 -13
  92. package/dist/esm/src/constants.js +0 -18
  93. package/dist/esm/src/constants.js.map +0 -1
  94. package/dist/esm/src/entities/mixedRoute/route.d.ts +0 -29
  95. package/dist/esm/src/entities/mixedRoute/route.js +0 -114
  96. package/dist/esm/src/entities/mixedRoute/route.js.map +0 -1
  97. package/dist/esm/src/entities/mixedRoute/route.test.d.ts +0 -1
  98. package/dist/esm/src/entities/mixedRoute/route.test.js +0 -467
  99. package/dist/esm/src/entities/mixedRoute/route.test.js.map +0 -1
  100. package/dist/esm/src/entities/mixedRoute/trade.js +0 -352
  101. package/dist/esm/src/entities/mixedRoute/trade.js.map +0 -1
  102. package/dist/esm/src/entities/mixedRoute/trade.test.d.ts +0 -1
  103. package/dist/esm/src/entities/mixedRoute/trade.test.js +0 -1008
  104. package/dist/esm/src/entities/mixedRoute/trade.test.js.map +0 -1
  105. package/dist/esm/src/entities/protocol.d.ts +0 -6
  106. package/dist/esm/src/entities/protocol.js +0 -8
  107. package/dist/esm/src/entities/protocol.js.map +0 -1
  108. package/dist/esm/src/entities/route.js +0 -55
  109. package/dist/esm/src/entities/route.js.map +0 -1
  110. package/dist/esm/src/entities/route.test.d.ts +0 -1
  111. package/dist/esm/src/entities/route.test.js +0 -190
  112. package/dist/esm/src/entities/route.test.js.map +0 -1
  113. package/dist/esm/src/entities/trade.js +0 -362
  114. package/dist/esm/src/entities/trade.js.map +0 -1
  115. package/dist/esm/src/entities/trade.test.d.ts +0 -1
  116. package/dist/esm/src/entities/trade.test.js +0 -1265
  117. package/dist/esm/src/entities/trade.test.js.map +0 -1
  118. package/dist/esm/src/index.d.ts +0 -14
  119. package/dist/esm/src/index.js +0 -15
  120. package/dist/esm/src/index.js.map +0 -1
  121. package/dist/esm/src/multicallExtended.d.ts +0 -11
  122. package/dist/esm/src/multicallExtended.js +0 -39
  123. package/dist/esm/src/multicallExtended.js.map +0 -1
  124. package/dist/esm/src/multicallExtended.test.d.ts +0 -1
  125. package/dist/esm/src/multicallExtended.test.js +0 -20
  126. package/dist/esm/src/multicallExtended.test.js.map +0 -1
  127. package/dist/esm/src/paymentsExtended.d.ts +0 -15
  128. package/dist/esm/src/paymentsExtended.js +0 -61
  129. package/dist/esm/src/paymentsExtended.js.map +0 -1
  130. package/dist/esm/src/paymentsExtended.test.d.ts +0 -1
  131. package/dist/esm/src/paymentsExtended.test.js +0 -57
  132. package/dist/esm/src/paymentsExtended.test.js.map +0 -1
  133. package/dist/esm/src/swapRouter.d.ts +0 -95
  134. package/dist/esm/src/swapRouter.js +0 -434
  135. package/dist/esm/src/swapRouter.js.map +0 -1
  136. package/dist/esm/src/swapRouter.test.d.ts +0 -1
  137. package/dist/esm/src/swapRouter.test.js +0 -1159
  138. package/dist/esm/src/swapRouter.test.js.map +0 -1
  139. package/dist/esm/src/utils/TPool.d.ts +0 -4
  140. package/dist/esm/src/utils/TPool.js +0 -2
  141. package/dist/esm/src/utils/TPool.js.map +0 -1
  142. package/dist/esm/src/utils/encodeMixedRouteToPath.d.ts +0 -9
  143. package/dist/esm/src/utils/encodeMixedRouteToPath.js +0 -86
  144. package/dist/esm/src/utils/encodeMixedRouteToPath.js.map +0 -1
  145. package/dist/esm/src/utils/encodeMixedRouteToPath.test.d.ts +0 -1
  146. package/dist/esm/src/utils/encodeMixedRouteToPath.test.js +0 -134
  147. package/dist/esm/src/utils/encodeMixedRouteToPath.test.js.map +0 -1
  148. package/dist/esm/src/utils/index.d.ts +0 -16
  149. package/dist/esm/src/utils/index.js +0 -46
  150. package/dist/esm/src/utils/index.js.map +0 -1
  151. package/dist/esm/src/utils/pathCurrency.d.ts +0 -4
  152. package/dist/esm/src/utils/pathCurrency.js +0 -30
  153. package/dist/esm/src/utils/pathCurrency.js.map +0 -1
  154. package/dist/esm/src/utils/pathCurrency.test.d.ts +0 -1
  155. package/dist/esm/src/utils/pathCurrency.test.js +0 -15
  156. package/dist/esm/src/utils/pathCurrency.test.js.map +0 -1
  157. package/dist/types/src/approveAndCall.d.ts +0 -33
  158. package/dist/types/src/entities/mixedRoute/route.test.d.ts +0 -1
  159. package/dist/types/src/entities/mixedRoute/trade.d.ts +0 -183
  160. package/dist/types/src/entities/mixedRoute/trade.test.d.ts +0 -1
  161. package/dist/types/src/entities/protocol.d.ts +0 -6
  162. package/dist/types/src/entities/route.d.ts +0 -40
  163. package/dist/types/src/entities/route.test.d.ts +0 -1
  164. package/dist/types/src/entities/trade.d.ts +0 -127
  165. package/dist/types/src/entities/trade.test.d.ts +0 -1
  166. package/dist/types/src/index.d.ts +0 -14
  167. package/dist/types/src/multicallExtended.d.ts +0 -11
  168. package/dist/types/src/multicallExtended.test.d.ts +0 -1
  169. package/dist/types/src/paymentsExtended.test.d.ts +0 -1
  170. package/dist/types/src/swapRouter.d.ts +0 -95
  171. package/dist/types/src/swapRouter.test.d.ts +0 -1
  172. package/dist/types/src/utils/TPool.d.ts +0 -4
  173. package/dist/types/src/utils/encodeMixedRouteToPath.d.ts +0 -9
  174. package/dist/types/src/utils/encodeMixedRouteToPath.test.d.ts +0 -1
  175. package/dist/types/src/utils/pathCurrency.d.ts +0 -4
  176. package/dist/types/src/utils/pathCurrency.test.d.ts +0 -1
@@ -1,1267 +0,0 @@
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 bignumber_1 = require("@ethersproject/bignumber");
6
- const jsbi_1 = tslib_1.__importDefault(require("jsbi"));
7
- const route_1 = require("./route");
8
- const trade_1 = require("./trade");
9
- const v3_sdk_1 = require("@uniswap/v3-sdk");
10
- const v2_sdk_1 = require("@uniswap/v2-sdk");
11
- const route_2 = require("./mixedRoute/route");
12
- const v4_sdk_1 = require("@uniswap/v4-sdk");
13
- const constants_1 = require("../constants");
14
- describe('Trade', () => {
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 token3 = new sdk_core_1.Token(1, '0x0000000000000000000000000000000000000004', 18, 't3', 'token3');
21
- const SQRT_RATIO_ONE = (0, v3_sdk_1.encodeSqrtRatioX96)(1, 1);
22
- const token4WithTax = new sdk_core_1.Token(1, '0x0000000000000000000000000000000000000005', 18, 't4', 'token4', false, bignumber_1.BigNumber.from(100), bignumber_1.BigNumber.from(100));
23
- const token5WithTax = new sdk_core_1.Token(1, '0x0000000000000000000000000000000000000005', 18, 't5', 'token5', false, bignumber_1.BigNumber.from(500), bignumber_1.BigNumber.from(500));
24
- function v2StylePool(reserve0, reserve1, feeAmount = v3_sdk_1.FeeAmount.MEDIUM) {
25
- const sqrtRatioX96 = (0, v3_sdk_1.encodeSqrtRatioX96)(reserve1.quotient, reserve0.quotient);
26
- const liquidity = (0, sdk_core_1.sqrt)(jsbi_1.default.multiply(reserve0.quotient, reserve1.quotient));
27
- return new v3_sdk_1.Pool(reserve0.currency, reserve1.currency, feeAmount, sqrtRatioX96, liquidity, v3_sdk_1.TickMath.getTickAtSqrtRatio(sqrtRatioX96), [
28
- {
29
- index: (0, v3_sdk_1.nearestUsableTick)(v3_sdk_1.TickMath.MIN_TICK, v3_sdk_1.TICK_SPACINGS[feeAmount]),
30
- liquidityNet: liquidity,
31
- liquidityGross: liquidity,
32
- },
33
- {
34
- index: (0, v3_sdk_1.nearestUsableTick)(v3_sdk_1.TickMath.MAX_TICK, v3_sdk_1.TICK_SPACINGS[feeAmount]),
35
- liquidityNet: jsbi_1.default.multiply(liquidity, jsbi_1.default.BigInt(-1)),
36
- liquidityGross: liquidity,
37
- },
38
- ]);
39
- }
40
- const pool_0_1 = v2StylePool(sdk_core_1.CurrencyAmount.fromRawAmount(token0, 100000), sdk_core_1.CurrencyAmount.fromRawAmount(token1, 100000));
41
- const pool_0_2 = v2StylePool(sdk_core_1.CurrencyAmount.fromRawAmount(token0, 100000), sdk_core_1.CurrencyAmount.fromRawAmount(token2, 110000));
42
- const pool_1_2 = v2StylePool(sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(12000)), sdk_core_1.CurrencyAmount.fromRawAmount(token2, jsbi_1.default.BigInt(10000)));
43
- const pool_0_3 = v2StylePool(sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(10000)), sdk_core_1.CurrencyAmount.fromRawAmount(token3, jsbi_1.default.BigInt(10000)));
44
- const pair_0_1 = new v2_sdk_1.Pair(sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(12000)), sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(12000)));
45
- const pair_1_2 = new v2_sdk_1.Pair(sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(12000)), sdk_core_1.CurrencyAmount.fromRawAmount(token2, jsbi_1.default.BigInt(10000)));
46
- const pair_0_2 = new v2_sdk_1.Pair(sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(10000)), sdk_core_1.CurrencyAmount.fromRawAmount(token2, jsbi_1.default.BigInt(12000)));
47
- const pair_2_3 = new v2_sdk_1.Pair(sdk_core_1.CurrencyAmount.fromRawAmount(token2, jsbi_1.default.BigInt(10000)), sdk_core_1.CurrencyAmount.fromRawAmount(token3, jsbi_1.default.BigInt(10000)));
48
- const pair_weth_0 = new v2_sdk_1.Pair(sdk_core_1.CurrencyAmount.fromRawAmount(weth, jsbi_1.default.BigInt(10000)), sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(10000)));
49
- const pair_weth_1 = new v2_sdk_1.Pair(sdk_core_1.CurrencyAmount.fromRawAmount(weth, jsbi_1.default.BigInt(10000)), sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(10000)));
50
- const pair_weth_2 = new v2_sdk_1.Pair(sdk_core_1.CurrencyAmount.fromRawAmount(weth, jsbi_1.default.BigInt(10000)), sdk_core_1.CurrencyAmount.fromRawAmount(token2, jsbi_1.default.BigInt(10000)));
51
- const pair_tax_output = new v2_sdk_1.Pair(sdk_core_1.CurrencyAmount.fromRawAmount(weth, jsbi_1.default.BigInt(100000)), sdk_core_1.CurrencyAmount.fromRawAmount(token4WithTax, jsbi_1.default.BigInt(100000)));
52
- const pair_tax_input = new v2_sdk_1.Pair(sdk_core_1.CurrencyAmount.fromRawAmount(token5WithTax, jsbi_1.default.BigInt(100000)), sdk_core_1.CurrencyAmount.fromRawAmount(weth, jsbi_1.default.BigInt(100000)));
53
- const pool_weth_0 = v2StylePool(sdk_core_1.CurrencyAmount.fromRawAmount(weth, jsbi_1.default.BigInt(100000)), sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100000)));
54
- const pool_weth_2 = v2StylePool(sdk_core_1.CurrencyAmount.fromRawAmount(weth, jsbi_1.default.BigInt(100000)), sdk_core_1.CurrencyAmount.fromRawAmount(token2, jsbi_1.default.BigInt(100000)));
55
- const pool_weth_1 = v2StylePool(sdk_core_1.CurrencyAmount.fromRawAmount(weth, jsbi_1.default.BigInt(100000)), sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(100000)));
56
- const pool_v4_1_eth = new v4_sdk_1.Pool(token1, ETHER, v3_sdk_1.FeeAmount.MEDIUM, 60, constants_1.ADDRESS_ZERO, SQRT_RATIO_ONE, jsbi_1.default.BigInt(10000000000000), 0, [
57
- {
58
- index: (0, v3_sdk_1.nearestUsableTick)(v3_sdk_1.TickMath.MIN_TICK, v3_sdk_1.TICK_SPACINGS[v3_sdk_1.FeeAmount.MEDIUM]),
59
- liquidityNet: jsbi_1.default.BigInt(10000000000000),
60
- liquidityGross: jsbi_1.default.BigInt(10000000000000),
61
- },
62
- {
63
- index: (0, v3_sdk_1.nearestUsableTick)(v3_sdk_1.TickMath.MAX_TICK, v3_sdk_1.TICK_SPACINGS[v3_sdk_1.FeeAmount.MEDIUM]),
64
- liquidityNet: jsbi_1.default.multiply(jsbi_1.default.BigInt(10000000000000), jsbi_1.default.BigInt(-1)),
65
- liquidityGross: jsbi_1.default.BigInt(10000000000000),
66
- },
67
- ]);
68
- const pool_v4_0_eth = new v4_sdk_1.Pool(token0, ETHER, v3_sdk_1.FeeAmount.MEDIUM, 60, constants_1.ADDRESS_ZERO, SQRT_RATIO_ONE, jsbi_1.default.BigInt(10000000000000), 0, [
69
- {
70
- index: (0, v3_sdk_1.nearestUsableTick)(v3_sdk_1.TickMath.MIN_TICK, v3_sdk_1.TICK_SPACINGS[v3_sdk_1.FeeAmount.MEDIUM]),
71
- liquidityNet: jsbi_1.default.BigInt(10000000000000),
72
- liquidityGross: jsbi_1.default.BigInt(10000000000000),
73
- },
74
- {
75
- index: (0, v3_sdk_1.nearestUsableTick)(v3_sdk_1.TickMath.MAX_TICK, v3_sdk_1.TICK_SPACINGS[v3_sdk_1.FeeAmount.MEDIUM]),
76
- liquidityNet: jsbi_1.default.multiply(jsbi_1.default.BigInt(10000000000000), jsbi_1.default.BigInt(-1)),
77
- liquidityGross: jsbi_1.default.BigInt(10000000000000),
78
- },
79
- ]);
80
- const pool_v4_1_weth = new v4_sdk_1.Pool(token1, sdk_core_1.WETH9[1], v3_sdk_1.FeeAmount.MEDIUM, 60, constants_1.ADDRESS_ZERO, SQRT_RATIO_ONE, jsbi_1.default.BigInt(10000000000000), 0, [
81
- {
82
- index: (0, v3_sdk_1.nearestUsableTick)(v3_sdk_1.TickMath.MIN_TICK, v3_sdk_1.TICK_SPACINGS[v3_sdk_1.FeeAmount.MEDIUM]),
83
- liquidityNet: jsbi_1.default.BigInt(10000000000000),
84
- liquidityGross: jsbi_1.default.BigInt(10000000000000),
85
- },
86
- {
87
- index: (0, v3_sdk_1.nearestUsableTick)(v3_sdk_1.TickMath.MAX_TICK, v3_sdk_1.TICK_SPACINGS[v3_sdk_1.FeeAmount.MEDIUM]),
88
- liquidityNet: jsbi_1.default.multiply(jsbi_1.default.BigInt(10000000000000), jsbi_1.default.BigInt(-1)),
89
- liquidityGross: jsbi_1.default.BigInt(10000000000000),
90
- },
91
- ]);
92
- describe('#fromRoute', () => {
93
- it('can contain only a v3 route', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
94
- const routeOriginal = new v3_sdk_1.Route([pool_0_1], token0, token1);
95
- const route = new route_1.RouteV3(routeOriginal);
96
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
97
- const tradeType = sdk_core_1.TradeType.EXACT_INPUT;
98
- const expectedOut = yield pool_0_1.getOutputAmount(amount);
99
- const trade = yield trade_1.Trade.fromRoute(route, amount, tradeType);
100
- expect(trade.inputAmount.currency).toEqual(token0);
101
- expect(trade.outputAmount.currency).toEqual(token1);
102
- expect(trade.inputAmount).toEqual(amount);
103
- expect(trade.outputAmount).toEqual(expectedOut[0]);
104
- expect(trade.swaps.length).toEqual(1);
105
- expect(trade.routes.length).toEqual(1);
106
- expect(trade.tradeType).toEqual(sdk_core_1.TradeType.EXACT_INPUT);
107
- expect(trade.amounts.inputAmountNative).toEqual(undefined);
108
- expect(trade.amounts.outputAmountNative).toEqual(undefined);
109
- }));
110
- it('can contain only a v2 route', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
111
- const routeOriginal = new v2_sdk_1.Route([pair_0_1], token0, token1);
112
- const route = new route_1.RouteV2(routeOriginal);
113
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(1000));
114
- const tradeType = sdk_core_1.TradeType.EXACT_OUTPUT;
115
- const expectedIn = pair_0_1.getInputAmount(amount)[0];
116
- const trade = yield trade_1.Trade.fromRoute(route, amount, tradeType);
117
- expect(trade.inputAmount.currency).toEqual(token0);
118
- expect(trade.outputAmount.currency).toEqual(token1);
119
- expect(trade.outputAmount).toEqual(amount);
120
- expect(trade.inputAmount).toEqual(expectedIn);
121
- expect(trade.swaps.length).toEqual(1);
122
- expect(trade.routes.length).toEqual(1);
123
- expect(trade.tradeType).toEqual(sdk_core_1.TradeType.EXACT_OUTPUT);
124
- expect(trade.amounts.inputAmountNative).toEqual(undefined);
125
- expect(trade.amounts.outputAmountNative).toEqual(undefined);
126
- }));
127
- it('can contain only a mixed route', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
128
- const routeOriginal = new route_2.MixedRouteSDK([pool_0_1], token0, token1);
129
- const route = new route_1.MixedRoute(routeOriginal);
130
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
131
- const tradeType = sdk_core_1.TradeType.EXACT_INPUT;
132
- const expectedOut = yield pool_0_1.getOutputAmount(amount);
133
- const trade = yield trade_1.Trade.fromRoute(route, amount, tradeType);
134
- expect(trade.inputAmount.currency).toEqual(token0);
135
- expect(trade.outputAmount.currency).toEqual(token1);
136
- expect(trade.inputAmount).toEqual(amount);
137
- expect(trade.outputAmount).toEqual(expectedOut[0]);
138
- expect(trade.swaps.length).toEqual(1);
139
- expect(trade.routes.length).toEqual(1);
140
- expect(trade.tradeType).toEqual(sdk_core_1.TradeType.EXACT_INPUT);
141
- expect(trade.amounts.inputAmountNative).toEqual(undefined);
142
- expect(trade.amounts.outputAmountNative).toEqual(undefined);
143
- }));
144
- it('can be constructed with ETHER as input for a V3 Route exact input swap', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
145
- var _a;
146
- const routeOriginal = new v3_sdk_1.Route([pool_weth_0], ETHER, token0);
147
- const route = new route_1.RouteV3(routeOriginal);
148
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(10));
149
- const trade = yield trade_1.Trade.fromRoute(route, amount, sdk_core_1.TradeType.EXACT_INPUT);
150
- expect(trade.inputAmount.currency).toEqual(ETHER);
151
- expect(trade.outputAmount.currency).toEqual(token0);
152
- expect(trade.amounts.inputAmountNative).toBeDefined();
153
- expect((_a = trade.amounts.inputAmountNative) === null || _a === void 0 ? void 0 : _a.equalTo(0)).toBe(true);
154
- expect(trade.amounts.outputAmountNative).toEqual(undefined);
155
- }));
156
- it('can be constructed with ETHER as input for a V3 Route exact output swap', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
157
- var _b;
158
- const routeOriginal = new v3_sdk_1.Route([pool_weth_0], ETHER, token0);
159
- const route = new route_1.RouteV3(routeOriginal);
160
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
161
- const trade = yield trade_1.Trade.fromRoute(route, amount, sdk_core_1.TradeType.EXACT_OUTPUT);
162
- expect(trade.inputAmount.currency).toEqual(ETHER);
163
- expect(trade.outputAmount.currency).toEqual(token0);
164
- expect(trade.amounts.inputAmountNative).toBeDefined();
165
- expect((_b = trade.amounts.inputAmountNative) === null || _b === void 0 ? void 0 : _b.equalTo(0)).toBe(true);
166
- expect(trade.amounts.outputAmountNative).toEqual(undefined);
167
- }));
168
- it('can be constructed with ETHER as output for a V3 Route exact output swap', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
169
- var _c;
170
- const routeOriginal = new v3_sdk_1.Route([pool_weth_0], token0, ETHER);
171
- const route = new route_1.RouteV3(routeOriginal);
172
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(100));
173
- const expectedIn = yield pool_weth_0.getInputAmount(amount.wrapped);
174
- const trade = yield trade_1.Trade.fromRoute(route, amount, sdk_core_1.TradeType.EXACT_OUTPUT);
175
- expect(trade.inputAmount.currency).toEqual(token0);
176
- expect(trade.outputAmount.currency).toEqual(ETHER);
177
- expect(trade.outputAmount).toEqual(amount);
178
- expect(trade.inputAmount).toEqual(expectedIn[0]);
179
- expect(trade.amounts.outputAmountNative).toBeDefined();
180
- expect((_c = trade.amounts.outputAmountNative) === null || _c === void 0 ? void 0 : _c.equalTo(0)).toBe(true);
181
- expect(trade.amounts.inputAmountNative).toEqual(undefined);
182
- }));
183
- it('can be constructed with ETHER as output for a V3 Route exact input swap', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
184
- var _d;
185
- const routeOriginal = new v3_sdk_1.Route([pool_weth_0], token0, ETHER);
186
- const route = new route_1.RouteV3(routeOriginal);
187
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
188
- const expectedOut = yield pool_weth_0.getOutputAmount(amount);
189
- const trade = yield trade_1.Trade.fromRoute(route, amount, sdk_core_1.TradeType.EXACT_INPUT);
190
- expect(trade.inputAmount.currency).toEqual(token0);
191
- expect(trade.outputAmount.currency).toEqual(ETHER);
192
- expect(trade.inputAmount).toEqual(amount);
193
- expect(trade.outputAmount.wrapped).toEqual(expectedOut[0]);
194
- expect(trade.amounts.outputAmountNative).toBeDefined();
195
- expect((_d = trade.amounts.outputAmountNative) === null || _d === void 0 ? void 0 : _d.equalTo(0)).toBe(true);
196
- expect(trade.amounts.inputAmountNative).toEqual(undefined);
197
- }));
198
- it('can be constructed with ETHER as input for a V2 Route exact input swap', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
199
- var _e;
200
- const routeOriginal = new v2_sdk_1.Route([pair_weth_2], ETHER, token2);
201
- const route = new route_1.RouteV2(routeOriginal);
202
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(10));
203
- const trade = yield trade_1.Trade.fromRoute(route, amount, sdk_core_1.TradeType.EXACT_INPUT);
204
- expect(trade.inputAmount.currency).toEqual(ETHER);
205
- expect(trade.outputAmount.currency).toEqual(token2);
206
- expect(trade.amounts.inputAmountNative).toBeDefined();
207
- expect((_e = trade.amounts.inputAmountNative) === null || _e === void 0 ? void 0 : _e.equalTo(0)).toBe(true);
208
- expect(trade.amounts.outputAmountNative).toEqual(undefined);
209
- }));
210
- it('can be constructed with ETHER as input for a V2 Route exact output swap', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
211
- var _f;
212
- const routeOriginal = new v2_sdk_1.Route([pair_weth_2], ETHER, token2);
213
- const route = new route_1.RouteV2(routeOriginal);
214
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(token2, jsbi_1.default.BigInt(100));
215
- const trade = yield trade_1.Trade.fromRoute(route, amount, sdk_core_1.TradeType.EXACT_OUTPUT);
216
- expect(trade.inputAmount.currency).toEqual(ETHER);
217
- expect(trade.outputAmount.currency).toEqual(token2);
218
- expect(trade.amounts.inputAmountNative).toBeDefined();
219
- expect((_f = trade.amounts.inputAmountNative) === null || _f === void 0 ? void 0 : _f.equalTo(0)).toBe(true);
220
- expect(trade.amounts.outputAmountNative).toEqual(undefined);
221
- }));
222
- it('can be constructed with ETHER as output for a V2 Route exact output swap', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
223
- var _g;
224
- const routeOriginal = new v2_sdk_1.Route([pair_weth_2], token2, ETHER);
225
- const route = new route_1.RouteV2(routeOriginal);
226
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(100));
227
- const trade = yield trade_1.Trade.fromRoute(route, amount, sdk_core_1.TradeType.EXACT_OUTPUT);
228
- expect(trade.inputAmount.currency).toEqual(token2);
229
- expect(trade.outputAmount.currency).toEqual(ETHER);
230
- expect(trade.amounts.outputAmountNative).toBeDefined();
231
- expect((_g = trade.amounts.outputAmountNative) === null || _g === void 0 ? void 0 : _g.equalTo(0)).toBe(true);
232
- expect(trade.amounts.inputAmountNative).toEqual(undefined);
233
- }));
234
- it('can be constructed with ETHER as output for a V2 Route exact input swap', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
235
- var _h;
236
- const routeOriginal = new v2_sdk_1.Route([pair_weth_2], token2, ETHER);
237
- const route = new route_1.RouteV2(routeOriginal);
238
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(token2, jsbi_1.default.BigInt(100));
239
- const trade = yield trade_1.Trade.fromRoute(route, amount, sdk_core_1.TradeType.EXACT_INPUT);
240
- expect(trade.inputAmount.currency).toEqual(token2);
241
- expect(trade.outputAmount.currency).toEqual(ETHER);
242
- expect(trade.amounts.outputAmountNative).toBeDefined();
243
- expect((_h = trade.amounts.outputAmountNative) === null || _h === void 0 ? void 0 : _h.equalTo(0)).toBe(true);
244
- expect(trade.amounts.inputAmountNative).toEqual(undefined);
245
- }));
246
- it('can be constructed with ETHER as input for a Mixed Route exact input swap', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
247
- var _j;
248
- const routeOriginal = new route_2.MixedRouteSDK([pool_weth_0], ETHER, token0);
249
- const route = new route_1.MixedRoute(routeOriginal);
250
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(10));
251
- const trade = yield trade_1.Trade.fromRoute(route, amount, sdk_core_1.TradeType.EXACT_INPUT);
252
- expect(trade.inputAmount.currency).toEqual(ETHER);
253
- expect(trade.outputAmount.currency).toEqual(token0);
254
- expect(trade.amounts.inputAmountNative).toBeDefined();
255
- expect((_j = trade.amounts.inputAmountNative) === null || _j === void 0 ? void 0 : _j.equalTo(0)).toBe(true);
256
- expect(trade.amounts.outputAmountNative).toEqual(undefined);
257
- }));
258
- it('can be constructed with ETHER as output for a Mixed Route exact input swap', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
259
- var _k;
260
- const routeOriginal = new route_2.MixedRouteSDK([pool_weth_0], token0, ETHER);
261
- const route = new route_1.MixedRoute(routeOriginal);
262
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
263
- const expectedOut = yield pool_weth_0.getOutputAmount(amount);
264
- const trade = yield trade_1.Trade.fromRoute(route, amount, sdk_core_1.TradeType.EXACT_INPUT);
265
- expect(trade.inputAmount.currency).toEqual(token0);
266
- expect(trade.outputAmount.currency).toEqual(ETHER);
267
- expect(trade.inputAmount).toEqual(amount);
268
- expect(trade.outputAmount.wrapped).toEqual(expectedOut[0]);
269
- expect(trade.amounts.outputAmountNative).toBeDefined();
270
- expect((_k = trade.amounts.outputAmountNative) === null || _k === void 0 ? void 0 : _k.equalTo(0)).toBe(true);
271
- expect(trade.amounts.inputAmountNative).toEqual(undefined);
272
- }));
273
- it('throws if input currency does not match for V2 Route', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
274
- const routeOriginal = new v2_sdk_1.Route([pair_weth_2], token2, ETHER);
275
- const route = new route_1.RouteV2(routeOriginal);
276
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
277
- yield expect(trade_1.Trade.fromRoute(route, amount, sdk_core_1.TradeType.EXACT_INPUT)).rejects.toThrow('INPUT');
278
- }));
279
- it('throws if output currency does not match for V2 Route', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
280
- const routeOriginal = new v2_sdk_1.Route([pair_0_1], token0, token1);
281
- const route = new route_1.RouteV2(routeOriginal);
282
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
283
- yield expect(trade_1.Trade.fromRoute(route, amount, sdk_core_1.TradeType.EXACT_OUTPUT)).rejects.toThrow('OUTPUT');
284
- }));
285
- it('throws if input currency does not match for V3 route', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
286
- const routeOriginal = new v3_sdk_1.Route([pool_0_1], token0, token1);
287
- const route = new route_1.RouteV3(routeOriginal);
288
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(token2, jsbi_1.default.BigInt(1000));
289
- const tradeType = sdk_core_1.TradeType.EXACT_INPUT;
290
- yield expect(trade_1.Trade.fromRoute(route, amount, tradeType)).rejects.toThrow('INPUT');
291
- }));
292
- it('throws if output currency does not match for V3 route', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
293
- const routeOriginal = new v3_sdk_1.Route([pool_0_1], token0, token1);
294
- const route = new route_1.RouteV3(routeOriginal);
295
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(token2, jsbi_1.default.BigInt(1000));
296
- const tradeType = sdk_core_1.TradeType.EXACT_OUTPUT;
297
- yield expect(trade_1.Trade.fromRoute(route, amount, tradeType)).rejects.toThrow('OUTPUT');
298
- }));
299
- it('throws if input currency does not match for Mixed route', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
300
- const routeOriginal = new route_2.MixedRouteSDK([pool_0_1], token0, token1);
301
- const route = new route_1.MixedRoute(routeOriginal);
302
- const amount = sdk_core_1.CurrencyAmount.fromRawAmount(token2, jsbi_1.default.BigInt(1000));
303
- const tradeType = sdk_core_1.TradeType.EXACT_INPUT;
304
- yield expect(trade_1.Trade.fromRoute(route, amount, tradeType)).rejects.toThrow('INPUT');
305
- }));
306
- });
307
- describe('#fromRoutes', () => {
308
- it('can contain both a v2 and a v3 route', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
309
- const routeOriginalV2 = new v2_sdk_1.Route([pair_0_1, pair_1_2], token0, token2);
310
- const routev2 = new route_1.RouteV2(routeOriginalV2);
311
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
312
- const routeOriginalV3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
313
- const routev3 = new route_1.RouteV3(routeOriginalV3);
314
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
315
- const amountIn = amountv2.add(amountv3);
316
- const outv2 = pair_1_2.getOutputAmount(pair_0_1.getOutputAmount(amountv2)[0])[0];
317
- const out1v3 = yield pool_0_1.getOutputAmount(amountv3);
318
- const out2v3 = yield pool_1_2.getOutputAmount(out1v3[0]);
319
- const expectedOut = outv2.add(out2v3[0]);
320
- const trade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_INPUT);
321
- expect(trade.inputAmount.currency).toEqual(token0);
322
- expect(trade.outputAmount.currency).toEqual(token2);
323
- expect(trade.inputAmount).toEqual(amountIn);
324
- expect(trade.outputAmount).toEqual(expectedOut);
325
- expect(trade.swaps.length).toEqual(2);
326
- expect(trade.routes.length).toEqual(2);
327
- expect(trade.tradeType).toEqual(sdk_core_1.TradeType.EXACT_INPUT);
328
- }));
329
- it('can contain a v2, a v3, and a mixed route', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
330
- const routeOriginalV2 = new v2_sdk_1.Route([pair_0_1, pair_1_2], token0, token2);
331
- const routev2 = new route_1.RouteV2(routeOriginalV2);
332
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
333
- const routeOriginalV3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
334
- const routev3 = new route_1.RouteV3(routeOriginalV3);
335
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
336
- const mixedRouteOriginal = new route_2.MixedRouteSDK([pool_weth_0, pair_weth_2], token0, token2);
337
- const mixedRoute = new route_1.MixedRoute(mixedRouteOriginal);
338
- const amountMixedRoute = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
339
- const amountIn = amountv2.add(amountv3).add(amountMixedRoute);
340
- const outv2 = pair_1_2.getOutputAmount(pair_0_1.getOutputAmount(amountv2)[0])[0];
341
- const out1v3 = yield pool_0_1.getOutputAmount(amountv3);
342
- const out2v3 = yield pool_1_2.getOutputAmount(out1v3[0]);
343
- const out1mixed = yield pool_weth_0.getOutputAmount(amountMixedRoute);
344
- const out2mixed = pair_weth_2.getOutputAmount(out1mixed[0])[0];
345
- const expectedOut = outv2.add(out2v3[0]).add(out2mixed);
346
- const trade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_INPUT, [{ mixedRoute, amount: amountMixedRoute }]);
347
- expect(trade.inputAmount.currency).toEqual(token0);
348
- expect(trade.outputAmount.currency).toEqual(token2);
349
- expect(trade.inputAmount).toEqual(amountIn);
350
- expect(trade.outputAmount).toEqual(expectedOut);
351
- expect(trade.swaps.length).toEqual(3);
352
- expect(trade.routes.length).toEqual(3);
353
- expect(trade.tradeType).toEqual(sdk_core_1.TradeType.EXACT_INPUT);
354
- }));
355
- it('can contain multiple v2, v3, and mixed routes', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
356
- const routeOriginalV2 = new v2_sdk_1.Route([pair_0_1, pair_1_2], token0, token2);
357
- const routev2 = new route_1.RouteV2(routeOriginalV2);
358
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
359
- const routeOriginalV3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
360
- const routev3 = new route_1.RouteV3(routeOriginalV3);
361
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
362
- const mixedRouteOriginal = new route_2.MixedRouteSDK([pool_weth_0, pair_weth_2], token0, token2);
363
- const mixedRoute = new route_1.MixedRoute(mixedRouteOriginal);
364
- const amountMixedRoute = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
365
- const mixedRoute2Original = new route_2.MixedRouteSDK([pool_0_3, pair_2_3], token0, token2);
366
- const mixedRoute2 = new route_1.MixedRoute(mixedRoute2Original);
367
- const amountMixedRoute2 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
368
- const amountIn = amountv2.add(amountv3).add(amountMixedRoute).add(amountMixedRoute2);
369
- const outv2 = pair_1_2.getOutputAmount(pair_0_1.getOutputAmount(amountv2)[0])[0];
370
- const out1v3 = yield pool_0_1.getOutputAmount(amountv3);
371
- const out2v3 = yield pool_1_2.getOutputAmount(out1v3[0]);
372
- const out1mixed = yield pool_weth_0.getOutputAmount(amountMixedRoute);
373
- const out2mixed = pair_weth_2.getOutputAmount(out1mixed[0])[0];
374
- const out1mixed2 = yield pool_0_3.getOutputAmount(amountMixedRoute2);
375
- const out2mixed2 = pair_2_3.getOutputAmount(out1mixed2[0])[0];
376
- const expectedOut = outv2.add(out2v3[0]).add(out2mixed).add(out2mixed2);
377
- const trade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_INPUT, [
378
- { mixedRoute, amount: amountMixedRoute },
379
- { mixedRoute: mixedRoute2, amount: amountMixedRoute2 },
380
- ]);
381
- expect(trade.inputAmount.currency).toEqual(token0);
382
- expect(trade.outputAmount.currency).toEqual(token2);
383
- expect(trade.inputAmount).toEqual(amountIn);
384
- expect(trade.outputAmount).toEqual(expectedOut);
385
- expect(trade.swaps.length).toEqual(4);
386
- expect(trade.routes.length).toEqual(4);
387
- expect(trade.tradeType).toEqual(sdk_core_1.TradeType.EXACT_INPUT);
388
- }));
389
- it('can contain muliptle v2 and v3 routes', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
390
- const routeOriginalV2 = new v2_sdk_1.Route([pair_0_1, pair_1_2], token0, token2);
391
- const routev2 = new route_1.RouteV2(routeOriginalV2);
392
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token2, jsbi_1.default.BigInt(100));
393
- const route2OriginalV2 = new v2_sdk_1.Route([pair_weth_0, pair_weth_2], token0, token2);
394
- const route2v2 = new route_1.RouteV2(route2OriginalV2);
395
- const amount2v2 = sdk_core_1.CurrencyAmount.fromRawAmount(token2, jsbi_1.default.BigInt(1000));
396
- const routeOriginalV3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
397
- const routev3 = new route_1.RouteV3(routeOriginalV3);
398
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token2, jsbi_1.default.BigInt(1000));
399
- const route2OriginalV3 = new v3_sdk_1.Route([pool_weth_0, pool_weth_2], token0, token2);
400
- const route2v3 = new route_1.RouteV3(route2OriginalV3);
401
- const amount2v3 = sdk_core_1.CurrencyAmount.fromRawAmount(token2, jsbi_1.default.BigInt(1000));
402
- const amountOutExpected = amountv2.add(amount2v2).add(amountv3).add(amount2v3);
403
- // calculate expected amount in across v2
404
- const amountIn1v2 = pair_0_1.getInputAmount(pair_1_2.getInputAmount(amountv2)[0]);
405
- const amountIn2v2 = pair_weth_0.getInputAmount(pair_weth_2.getInputAmount(amount2v2)[0]);
406
- // calculate expected amount in across v3
407
- const amountIn1v3 = yield pool_1_2.getInputAmount(amountv3);
408
- const amountIn2v3 = yield pool_0_1.getInputAmount(amountIn1v3[0]);
409
- const amountIn3v3 = yield pool_weth_2.getInputAmount(amount2v3);
410
- const amountIn4v3 = yield pool_weth_0.getInputAmount(amountIn3v3[0]);
411
- // calculate total expected amount in
412
- const expectedIn = amountIn1v2[0].add(amountIn2v2[0]).add(amountIn2v3[0]).add(amountIn4v3[0]);
413
- const trade = yield trade_1.Trade.fromRoutes([
414
- { routev2, amount: amountv2 },
415
- { routev2: route2v2, amount: amount2v2 },
416
- ], [
417
- { routev3, amount: amountv3 },
418
- { routev3: route2v3, amount: amount2v3 },
419
- ], sdk_core_1.TradeType.EXACT_OUTPUT);
420
- expect(trade.inputAmount.currency).toEqual(token0);
421
- expect(trade.outputAmount.currency).toEqual(token2);
422
- expect(trade.outputAmount).toEqual(amountOutExpected);
423
- expect(trade.inputAmount).toEqual(expectedIn);
424
- expect(trade.swaps.length).toEqual(4);
425
- expect(trade.routes.length).toEqual(4);
426
- expect(trade.tradeType).toEqual(sdk_core_1.TradeType.EXACT_OUTPUT);
427
- expect(trade.routes[0].path).toEqual([token0, token1, token2]);
428
- expect(trade.routes[1].path).toEqual([token0, weth, token2]);
429
- expect(trade.routes[2].path).toEqual([token0, token1, token2]);
430
- expect(trade.routes[3].path).toEqual([token0, weth, token2]);
431
- }));
432
- it('can be constructed with ETHER as input for exact input', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
433
- const routeOriginalV2 = new v2_sdk_1.Route([pair_weth_0, pair_0_1], ETHER, token1);
434
- const routev2 = new route_1.RouteV2(routeOriginalV2);
435
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(100));
436
- const routeOriginalV3 = new v3_sdk_1.Route([pool_weth_0, pool_0_1], ETHER, token1);
437
- const routev3 = new route_1.RouteV3(routeOriginalV3);
438
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(1000));
439
- const mixedRouteOriginal = new route_2.MixedRouteSDK([pool_weth_2, pair_1_2], ETHER, token1);
440
- const mixedRoute = new route_1.MixedRoute(mixedRouteOriginal);
441
- const amountMixedRoute = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(1000));
442
- const trade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_INPUT, [{ mixedRoute, amount: amountMixedRoute }]);
443
- expect(trade.inputAmount.currency).toEqual(ETHER);
444
- expect(trade.outputAmount.currency).toEqual(token1);
445
- expect(trade.swaps.length).toEqual(3);
446
- // Expect all input amounts to be native
447
- expect(trade.swaps.every((swap) => swap.inputAmount.currency.isNative)).toBe(true);
448
- // Expect all route inputs to be ETH
449
- expect(trade.swaps.every((swap) => swap.route.input.isNative)).toBe(true);
450
- // Expect all route path inputs to be WETH, can't use pathInput because not supported in older SDKs
451
- expect(trade.swaps.every((swap) => swap.route.pools[0].involvesToken(weth))).toBe(true);
452
- expect(trade.routes.length).toEqual(3);
453
- expect(trade.tradeType).toEqual(sdk_core_1.TradeType.EXACT_INPUT);
454
- }));
455
- it('can be constructed with ETHER as input for exact output', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
456
- const routeOriginalV2 = new v2_sdk_1.Route([pair_weth_0, pair_0_1], ETHER, token1);
457
- const routev2 = new route_1.RouteV2(routeOriginalV2);
458
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(100));
459
- const routeOriginalV3 = new v3_sdk_1.Route([pool_weth_0, pool_0_1], ETHER, token1);
460
- const routev3 = new route_1.RouteV3(routeOriginalV3);
461
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(1000));
462
- const trade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_OUTPUT);
463
- expect(trade.inputAmount.currency).toEqual(ETHER);
464
- expect(trade.outputAmount.currency).toEqual(token1);
465
- expect(trade.swaps.length).toEqual(2);
466
- expect(trade.routes.length).toEqual(2);
467
- expect(trade.tradeType).toEqual(sdk_core_1.TradeType.EXACT_OUTPUT);
468
- }));
469
- it('can be constructed with ETHER as output for exact output swap', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
470
- const routeOriginalV2 = new v2_sdk_1.Route([pair_0_1, pair_weth_0], token1, ETHER);
471
- const routev2 = new route_1.RouteV2(routeOriginalV2);
472
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(100));
473
- const routeOriginalV3 = new v3_sdk_1.Route([pool_0_1, pool_weth_0], token1, ETHER);
474
- const routev3 = new route_1.RouteV3(routeOriginalV3);
475
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(1000));
476
- const trade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_OUTPUT);
477
- expect(trade.inputAmount.currency).toEqual(token1);
478
- expect(trade.outputAmount.currency).toEqual(ETHER);
479
- expect(trade.swaps.length).toEqual(2);
480
- expect(trade.routes.length).toEqual(2);
481
- expect(trade.tradeType).toEqual(sdk_core_1.TradeType.EXACT_OUTPUT);
482
- }));
483
- it('can be constructed with ETHER as output for exact input swap', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
484
- const routeOriginalV2 = new v2_sdk_1.Route([pair_0_1, pair_weth_0], token1, ETHER);
485
- const routev2 = new route_1.RouteV2(routeOriginalV2);
486
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(100));
487
- const routeOriginalV3 = new v3_sdk_1.Route([pool_0_1, pool_weth_0], token1, ETHER);
488
- const routev3 = new route_1.RouteV3(routeOriginalV3);
489
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(1000));
490
- const mixedRouteOriginal = new route_2.MixedRouteSDK([pair_1_2, pool_weth_2], token1, ETHER);
491
- const mixedRoute = new route_1.MixedRoute(mixedRouteOriginal);
492
- const amountMixedRoute = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(1000));
493
- const trade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_INPUT, [{ mixedRoute, amount: amountMixedRoute }]);
494
- expect(trade.inputAmount.currency).toEqual(token1);
495
- expect(trade.outputAmount.currency).toEqual(ETHER);
496
- expect(trade.swaps.length).toEqual(3);
497
- expect(trade.routes.length).toEqual(3);
498
- expect(trade.tradeType).toEqual(sdk_core_1.TradeType.EXACT_INPUT);
499
- }));
500
- it('can be constructed with ETHER as input for exact input swap, with V4 eth route and V2 weth route', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
501
- var _a;
502
- const routeOriginalV2 = new v2_sdk_1.Route([pair_weth_0, pair_0_1], ETHER, token1);
503
- const routev2 = new route_1.RouteV2(routeOriginalV2);
504
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(100));
505
- const routeOriginalV4 = new v4_sdk_1.Route([pool_v4_1_eth], ETHER, token1);
506
- const routev4 = new route_1.RouteV4(routeOriginalV4);
507
- const amountv4 = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(1000));
508
- const trade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [], sdk_core_1.TradeType.EXACT_INPUT, [], [{ routev4, amount: amountv4 }]);
509
- expect(trade.tradeType).toEqual(sdk_core_1.TradeType.EXACT_INPUT);
510
- expect(trade.inputAmount.currency).toEqual(ETHER);
511
- expect(trade.outputAmount.currency).toEqual(token1);
512
- expect(trade.swaps.length).toEqual(2);
513
- expect(trade.routes.length).toEqual(2);
514
- // Expect all swap input amounts to be native
515
- expect(trade.swaps.every((swap) => swap.inputAmount.currency.isNative)).toBe(true);
516
- // Expect all route inputs to be ETH
517
- expect(trade.swaps.every((swap) => swap.route.input.isNative)).toBe(true);
518
- // However, expect the routes to be preserved (v2 using WETH and v4 using ETH)
519
- expect(trade.swaps[0].route.pathInput).toEqual(weth);
520
- expect(trade.swaps[1].route.pathInput).toEqual(ETHER);
521
- // Expect inputAmount to be the sum of the input amounts of the swaps
522
- expect(trade.amounts.inputAmount.equalTo(trade.amounts.inputAmount)).toBe(true);
523
- expect(trade.amounts.inputAmount.equalTo(amountv2.add(amountv4))).toBe(true);
524
- // Expect inputAmountNative to correctly track only the amount required for the ETH input V4 route
525
- expect(trade.amounts.inputAmountNative).toBeDefined();
526
- expect((_a = trade.amounts.inputAmountNative) === null || _a === void 0 ? void 0 : _a.equalTo(amountv4)).toBe(true);
527
- // Expect outputAmount to be the sum of the output amounts of the swaps
528
- expect(trade.amounts.outputAmount.equalTo(trade.amounts.outputAmount)).toBe(true);
529
- // Expect outputAmountNative to be undefined because there is no ETH output path
530
- expect(trade.amounts.outputAmountNative).toBeUndefined();
531
- }));
532
- it('can be constructed with ETHER as input for exact output swap, with V4 eth route and V2 weth route', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
533
- var _b;
534
- const routeOriginalV2 = new v2_sdk_1.Route([pair_weth_0, pair_0_1], ETHER, token1);
535
- const routev2 = new route_1.RouteV2(routeOriginalV2);
536
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(100));
537
- const routeOriginalV4 = new v4_sdk_1.Route([pool_v4_1_eth], ETHER, token1);
538
- const routev4 = new route_1.RouteV4(routeOriginalV4);
539
- const amountv4 = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(1000));
540
- const trade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [], sdk_core_1.TradeType.EXACT_OUTPUT, [], [{ routev4, amount: amountv4 }]);
541
- expect(trade.tradeType).toEqual(sdk_core_1.TradeType.EXACT_OUTPUT);
542
- expect(trade.inputAmount.currency).toEqual(ETHER);
543
- expect(trade.outputAmount.currency).toEqual(token1);
544
- expect(trade.swaps.length).toEqual(2);
545
- expect(trade.routes.length).toEqual(2);
546
- // Expect all swap input amounts to be native
547
- expect(trade.swaps.every((swap) => swap.inputAmount.currency.isNative)).toBe(true);
548
- // Expect all route inputs to be ETH
549
- expect(trade.swaps.every((swap) => swap.route.input.isNative)).toBe(true);
550
- // However, expect the routes to be preserved (v2 using WETH and v4 using ETH)
551
- expect(trade.swaps[0].route.pathInput).toEqual(weth);
552
- expect(trade.swaps[1].route.pathInput).toEqual(ETHER);
553
- // Expect inputAmount to be the sum of the input amounts of the swaps
554
- expect(trade.amounts.inputAmount.equalTo(trade.amounts.inputAmount)).toBe(true);
555
- // Expect inputAmountNative to correctly track only the amount required for the ETH input V4 route
556
- expect(trade.amounts.inputAmountNative).toBeDefined();
557
- expect((_b = trade.amounts.inputAmountNative) === null || _b === void 0 ? void 0 : _b.greaterThan(0)).toBe(true);
558
- // Expect outputAmount to be the sum of the output amounts of the swaps
559
- expect(trade.amounts.outputAmount.equalTo(trade.amounts.outputAmount)).toBe(true);
560
- expect(trade.amounts.outputAmount.equalTo(amountv2.add(amountv4))).toBe(true);
561
- // Expect outputAmountNative to be undefined because there is no ETH output path
562
- expect(trade.amounts.outputAmountNative).toBeUndefined();
563
- }));
564
- it('can be constructed with ETHER as output for exact input swap, with V4 eth route and V2 weth route', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
565
- var _c;
566
- const routeOriginalV2 = new v2_sdk_1.Route([pair_0_1, pair_weth_0], token1, ETHER);
567
- const routev2 = new route_1.RouteV2(routeOriginalV2);
568
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(100));
569
- const routeOriginalV4 = new v4_sdk_1.Route([pool_v4_1_eth], token1, ETHER);
570
- const routev4 = new route_1.RouteV4(routeOriginalV4);
571
- const amountv4 = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(1000));
572
- const trade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [], sdk_core_1.TradeType.EXACT_INPUT, [], [{ routev4, amount: amountv4 }]);
573
- expect(trade.tradeType).toEqual(sdk_core_1.TradeType.EXACT_INPUT);
574
- expect(trade.inputAmount.currency).toEqual(token1);
575
- expect(trade.outputAmount.currency).toEqual(ETHER);
576
- expect(trade.swaps.length).toEqual(2);
577
- expect(trade.routes.length).toEqual(2);
578
- // Expect all swap output amounts to be native
579
- expect(trade.swaps.every((swap) => swap.outputAmount.currency.isNative)).toBe(true);
580
- // Expect all route outputs to be ETH
581
- expect(trade.swaps.every((swap) => swap.route.output.isNative)).toBe(true);
582
- // However, expect the routes to be preserved (v2 using WETH and v4 using ETH)
583
- expect(trade.swaps[0].route.pathOutput).toEqual(weth);
584
- expect(trade.swaps[1].route.pathOutput).toEqual(ETHER);
585
- // Expect inputAmount to be the sum of the input amounts of the swaps
586
- expect(trade.amounts.inputAmount.equalTo(trade.amounts.inputAmount)).toBe(true);
587
- expect(trade.amounts.inputAmount.equalTo(amountv2.add(amountv4))).toBe(true);
588
- // Expect inputAmountNative to be undefined because there is no ETH input path
589
- expect(trade.amounts.inputAmountNative).toBeUndefined();
590
- // Expect outputAmount to be the sum of the output amounts of the swaps
591
- expect(trade.amounts.outputAmount.equalTo(trade.amounts.outputAmount)).toBe(true);
592
- // Expect outputAmountNative to correctly track only the amount required for the ETH output V4 route
593
- expect(trade.amounts.outputAmountNative).toBeDefined();
594
- expect((_c = trade.amounts.outputAmountNative) === null || _c === void 0 ? void 0 : _c.greaterThan(0)).toBe(true);
595
- }));
596
- it('can be constructed with ETHER as output for exact output swap, with V4 eth route and V2 weth route', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
597
- var _d;
598
- const routeOriginalV2 = new v2_sdk_1.Route([pair_0_1, pair_weth_0], token1, ETHER);
599
- const routev2 = new route_1.RouteV2(routeOriginalV2);
600
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(100));
601
- const routeOriginalV4 = new v4_sdk_1.Route([pool_v4_1_eth], token1, ETHER);
602
- const routev4 = new route_1.RouteV4(routeOriginalV4);
603
- const amountv4 = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, jsbi_1.default.BigInt(1000));
604
- const trade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [], sdk_core_1.TradeType.EXACT_OUTPUT, [], [{ routev4, amount: amountv4 }]);
605
- expect(trade.tradeType).toEqual(sdk_core_1.TradeType.EXACT_OUTPUT);
606
- expect(trade.inputAmount.currency).toEqual(token1);
607
- expect(trade.outputAmount.currency).toEqual(ETHER);
608
- expect(trade.swaps.length).toEqual(2);
609
- expect(trade.routes.length).toEqual(2);
610
- // Expect all swap output amounts to be native
611
- expect(trade.swaps.every((swap) => swap.outputAmount.currency.isNative)).toBe(true);
612
- // Expect all route outputs to be ETH
613
- expect(trade.swaps.every((swap) => swap.route.output.isNative)).toBe(true);
614
- // However, expect the routes to be preserved (v2 using WETH and v4 using ETH)
615
- expect(trade.swaps[0].route.pathOutput).toEqual(weth);
616
- expect(trade.swaps[1].route.pathOutput).toEqual(ETHER);
617
- // Expect inputAmount to be the sum of the input amounts of the swaps
618
- expect(trade.amounts.inputAmount.equalTo(trade.amounts.inputAmount)).toBe(true);
619
- expect(trade.amounts.inputAmount.greaterThan(0)).toBe(true);
620
- // Expect inputAmountNative to be undefined because there is no ETH input path
621
- expect(trade.amounts.inputAmountNative).toBeUndefined();
622
- // Expect outputAmount to be the sum of the output amounts of the swaps
623
- expect(trade.amounts.outputAmount.equalTo(trade.amounts.outputAmount)).toBe(true);
624
- expect(trade.amounts.outputAmount.equalTo(amountv2.add(amountv4))).toBe(true);
625
- // Expect outputAmountNative to correctly track only the amount required for the ETH output V4 route
626
- expect(trade.amounts.outputAmountNative).toBeDefined();
627
- expect((_d = trade.amounts.outputAmountNative) === null || _d === void 0 ? void 0 : _d.equalTo(amountv4)).toBe(true);
628
- }));
629
- it('throws if pools are re-used between V3 routes', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
630
- const routeOriginalV2 = new v2_sdk_1.Route([pair_0_1, pair_1_2], token0, token2);
631
- const routev2 = new route_1.RouteV2(routeOriginalV2);
632
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
633
- const routeOriginalV3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
634
- const routev3 = new route_1.RouteV3(routeOriginalV3);
635
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
636
- //duplicate pool
637
- const route2OriginalV3 = new v3_sdk_1.Route([pool_0_1, pool_weth_1, pool_weth_2], token0, token2);
638
- const route2v3 = new route_1.RouteV3(route2OriginalV3);
639
- const amount2v3 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
640
- yield expect(trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [
641
- { routev3, amount: amountv3 },
642
- { routev3: route2v3, amount: amount2v3 },
643
- ], sdk_core_1.TradeType.EXACT_INPUT)).rejects.toThrow('POOLS_DUPLICATED');
644
- }));
645
- it('throws if pools are re-used between V2 routes', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
646
- const routeOriginalV2 = new v2_sdk_1.Route([pair_0_1, pair_1_2], token0, token2);
647
- const routev2 = new route_1.RouteV2(routeOriginalV2);
648
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
649
- const route2OriginalV2 = new v2_sdk_1.Route([pair_0_1, pair_weth_1, pair_weth_2], token0, token2);
650
- const route2v2 = new route_1.RouteV2(route2OriginalV2);
651
- const amount2v2 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
652
- const routeOriginalV3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
653
- const routev3 = new route_1.RouteV3(routeOriginalV3);
654
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
655
- yield expect(trade_1.Trade.fromRoutes([
656
- { routev2, amount: amountv2 },
657
- { routev2: route2v2, amount: amount2v2 },
658
- ], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_INPUT)).rejects.toThrow('POOLS_DUPLICATED');
659
- }));
660
- it('throws if pools are re-used between mixed routes and v2 routes', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
661
- const routeOriginalV2 = new v2_sdk_1.Route([pair_0_1, pair_1_2], token0, token2);
662
- const routev2 = new route_1.RouteV2(routeOriginalV2);
663
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
664
- const routeOriginalV3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
665
- const routev3 = new route_1.RouteV3(routeOriginalV3);
666
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
667
- // mixed route which will use v2 pair again
668
- const mixedRouteOriginal = new route_2.MixedRouteSDK([pair_0_1, pool_weth_1, pool_weth_2], token0, token2);
669
- const mixedRoute = new route_1.MixedRoute(mixedRouteOriginal);
670
- const amountMixedRoute = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
671
- yield expect(trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_INPUT, [
672
- { mixedRoute, amount: amountMixedRoute },
673
- ])).rejects.toThrow('POOLS_DUPLICATED');
674
- }));
675
- it('throws if pools are re-used between mixed routes and v3 routes', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
676
- const routeOriginalV2 = new v2_sdk_1.Route([pair_0_1, pair_1_2], token0, token2);
677
- const routev2 = new route_1.RouteV2(routeOriginalV2);
678
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
679
- const routeOriginalV3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
680
- const routev3 = new route_1.RouteV3(routeOriginalV3);
681
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
682
- // mixed route which will use v3 pair again
683
- const mixedRouteOriginal = new route_2.MixedRouteSDK([pool_0_1, pair_weth_1, pool_weth_2], token0, token2);
684
- const mixedRoute = new route_1.MixedRoute(mixedRouteOriginal);
685
- const amountMixedRoute = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
686
- yield expect(trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_INPUT, [
687
- { mixedRoute, amount: amountMixedRoute },
688
- ])).rejects.toThrow('POOLS_DUPLICATED');
689
- }));
690
- it('throws if routes have different inputs', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
691
- const routeOriginalV2 = new v2_sdk_1.Route([pair_1_2], token1, token2);
692
- const routev2 = new route_1.RouteV2(routeOriginalV2);
693
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(100));
694
- const routeOriginalV3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
695
- const routev3 = new route_1.RouteV3(routeOriginalV3);
696
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
697
- yield expect(trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_INPUT)).rejects.toThrow('INPUT_CURRENCY_MATCH');
698
- }));
699
- it('throws if routes have different inputs mixedRoute', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
700
- const routeOriginalV2 = new v2_sdk_1.Route([pair_1_2], token1, token2);
701
- const routev2 = new route_1.RouteV2(routeOriginalV2);
702
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(100));
703
- const mixedRouteOriginal = new route_2.MixedRouteSDK([pair_0_1, pool_1_2], token0, token2);
704
- const mixedRoute = new route_1.MixedRoute(mixedRouteOriginal);
705
- const amountMixedRoute = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
706
- yield expect(trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [], sdk_core_1.TradeType.EXACT_INPUT, [
707
- { mixedRoute, amount: amountMixedRoute },
708
- ])).rejects.toThrow('INPUT_CURRENCY_MATCH');
709
- }));
710
- it('throws if routes have different outputs', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
711
- const routeOriginalV2 = new v2_sdk_1.Route([pair_0_1], token0, token1);
712
- const routev2 = new route_1.RouteV2(routeOriginalV2);
713
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
714
- const routeOriginalV3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
715
- const routev3 = new route_1.RouteV3(routeOriginalV3);
716
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
717
- yield expect(trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_INPUT)).rejects.toThrow('OUTPUT_CURRENCY_MATCH');
718
- }));
719
- it('throws if routes have different outputs mixedRoutes', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
720
- const routeOriginalV3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
721
- const routev3 = new route_1.RouteV3(routeOriginalV3);
722
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
723
- const mixedRouteOriginal = new route_2.MixedRouteSDK([pair_0_1, pool_weth_1], token0, weth);
724
- const mixedRoute = new route_1.MixedRoute(mixedRouteOriginal);
725
- const amountMixedRoute = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(1000));
726
- yield expect(trade_1.Trade.fromRoutes([], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_INPUT, [
727
- { mixedRoute, amount: amountMixedRoute },
728
- ])).rejects.toThrow('OUTPUT_CURRENCY_MATCH');
729
- }));
730
- it('throws if trade is created with EXACT_OUTPUT and contains mixedRoutes', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
731
- const routeOriginalV2 = new v2_sdk_1.Route([pair_weth_0, pair_0_1], ETHER, token1);
732
- const routev2 = new route_1.RouteV2(routeOriginalV2);
733
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(100));
734
- const mixedRouteOriginal = new route_2.MixedRouteSDK([pool_weth_0, pool_0_1], ETHER, token1);
735
- const mixedRoute = new route_1.MixedRoute(mixedRouteOriginal);
736
- const mixedRouteAmount = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(1000));
737
- yield expect(trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [], sdk_core_1.TradeType.EXACT_OUTPUT, [
738
- { mixedRoute, amount: mixedRouteAmount },
739
- ])).rejects.toThrow('TRADE_TYPE');
740
- }));
741
- });
742
- describe('#worstExecutionPrice', () => {
743
- describe('tradeType = EXACT_INPUT', () => {
744
- const routev3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
745
- const route2v3 = new v3_sdk_1.Route([pool_0_2], token0, token2);
746
- const mixedRoute = new route_2.MixedRouteSDK([pool_0_1, pool_1_2], token0, token2);
747
- const mixedRoute2 = new route_2.MixedRouteSDK([pool_0_2], token0, token2);
748
- const inputAmount = sdk_core_1.CurrencyAmount.fromRawAmount(token0, 100);
749
- const outputAmount = sdk_core_1.CurrencyAmount.fromRawAmount(token2, 69);
750
- const tradeType = sdk_core_1.TradeType.EXACT_INPUT;
751
- const exactInV3 = new trade_1.Trade({
752
- v2Routes: [],
753
- v3Routes: [{ routev3, inputAmount, outputAmount }],
754
- tradeType,
755
- });
756
- const exactInMixed = new trade_1.Trade({
757
- v2Routes: [],
758
- v3Routes: [],
759
- tradeType,
760
- mixedRoutes: [{ mixedRoute, inputAmount, outputAmount }],
761
- });
762
- const exactInMultiRoute = new trade_1.Trade({
763
- v2Routes: [],
764
- v3Routes: [
765
- {
766
- routev3,
767
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 50),
768
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 35),
769
- },
770
- {
771
- routev3: route2v3,
772
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 50),
773
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 34),
774
- },
775
- ],
776
- tradeType: sdk_core_1.TradeType.EXACT_INPUT,
777
- });
778
- const exactInMultiMixedRoute = new trade_1.Trade({
779
- v2Routes: [],
780
- v3Routes: [],
781
- tradeType: sdk_core_1.TradeType.EXACT_INPUT,
782
- mixedRoutes: [
783
- {
784
- mixedRoute,
785
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 50),
786
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 35),
787
- },
788
- {
789
- mixedRoute: mixedRoute2,
790
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 50),
791
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 34),
792
- },
793
- ],
794
- });
795
- it('throws if less than 0', () => {
796
- expect(() => exactInV3.worstExecutionPrice(new sdk_core_1.Percent(-1, 100))).toThrow('SLIPPAGE_TOLERANCE');
797
- expect(() => exactInMixed.worstExecutionPrice(new sdk_core_1.Percent(-1, 100))).toThrow('SLIPPAGE_TOLERANCE');
798
- });
799
- it('returns exact if 0', () => {
800
- expect(exactInV3.worstExecutionPrice(new sdk_core_1.Percent(0, 100))).toEqual(exactInV3.executionPrice);
801
- expect(exactInMixed.worstExecutionPrice(new sdk_core_1.Percent(0, 100))).toEqual(exactInV3.executionPrice);
802
- });
803
- it('returns exact if nonzero', () => {
804
- expect(exactInV3.worstExecutionPrice(new sdk_core_1.Percent(0, 100))).toEqual(new sdk_core_1.Price(token0, token2, 100, 69));
805
- expect(exactInV3.worstExecutionPrice(new sdk_core_1.Percent(5, 100))).toEqual(new sdk_core_1.Price(token0, token2, 100, 65));
806
- expect(exactInV3.worstExecutionPrice(new sdk_core_1.Percent(200, 100))).toEqual(new sdk_core_1.Price(token0, token2, 100, 23));
807
- expect(exactInMixed.worstExecutionPrice(new sdk_core_1.Percent(0, 100))).toEqual(new sdk_core_1.Price(token0, token2, 100, 69));
808
- expect(exactInMixed.worstExecutionPrice(new sdk_core_1.Percent(5, 100))).toEqual(new sdk_core_1.Price(token0, token2, 100, 65));
809
- expect(exactInMixed.worstExecutionPrice(new sdk_core_1.Percent(200, 100))).toEqual(new sdk_core_1.Price(token0, token2, 100, 23));
810
- });
811
- it('returns exact if nonzero with multiple routes', () => {
812
- expect(exactInMultiRoute.worstExecutionPrice(new sdk_core_1.Percent(0, 100))).toEqual(new sdk_core_1.Price(token0, token2, 100, 69));
813
- expect(exactInMultiRoute.worstExecutionPrice(new sdk_core_1.Percent(5, 100))).toEqual(new sdk_core_1.Price(token0, token2, 100, 65));
814
- expect(exactInMultiRoute.worstExecutionPrice(new sdk_core_1.Percent(200, 100))).toEqual(new sdk_core_1.Price(token0, token2, 100, 23));
815
- expect(exactInMultiMixedRoute.worstExecutionPrice(new sdk_core_1.Percent(0, 100))).toEqual(new sdk_core_1.Price(token0, token2, 100, 69));
816
- expect(exactInMultiMixedRoute.worstExecutionPrice(new sdk_core_1.Percent(5, 100))).toEqual(new sdk_core_1.Price(token0, token2, 100, 65));
817
- expect(exactInMultiMixedRoute.worstExecutionPrice(new sdk_core_1.Percent(200, 100))).toEqual(new sdk_core_1.Price(token0, token2, 100, 23));
818
- });
819
- });
820
- describe('tradeType = EXACT_OUTPUT', () => {
821
- const routev3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
822
- const route2v3 = new v3_sdk_1.Route([pool_0_2], token0, token2);
823
- const exactOut = new trade_1.Trade({
824
- v2Routes: [],
825
- v3Routes: [
826
- {
827
- routev3,
828
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 156),
829
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 100),
830
- },
831
- ],
832
- tradeType: sdk_core_1.TradeType.EXACT_OUTPUT,
833
- });
834
- const exactOutMultiRoute = new trade_1.Trade({
835
- v2Routes: [],
836
- v3Routes: [
837
- {
838
- routev3,
839
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 78),
840
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 50),
841
- },
842
- {
843
- routev3: route2v3,
844
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 78),
845
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 50),
846
- },
847
- ],
848
- tradeType: sdk_core_1.TradeType.EXACT_OUTPUT,
849
- });
850
- it('throws if less than 0', () => {
851
- expect(() => exactOut.worstExecutionPrice(new sdk_core_1.Percent(-1, 100))).toThrow('SLIPPAGE_TOLERANCE');
852
- });
853
- it('returns exact if 0', () => {
854
- expect(exactOut.worstExecutionPrice(new sdk_core_1.Percent(0, 100))).toEqual(exactOut.executionPrice);
855
- });
856
- it('returns slippage amount if nonzero', () => {
857
- expect(exactOut.worstExecutionPrice(new sdk_core_1.Percent(0, 100)).equalTo(new sdk_core_1.Price(token0, token2, 156, 100))).toBeTruthy();
858
- expect(exactOut.worstExecutionPrice(new sdk_core_1.Percent(5, 100)).equalTo(new sdk_core_1.Price(token0, token2, 163, 100))).toBeTruthy();
859
- expect(exactOut.worstExecutionPrice(new sdk_core_1.Percent(200, 100)).equalTo(new sdk_core_1.Price(token0, token2, 468, 100))).toBeTruthy();
860
- });
861
- it('returns exact if nonzero with multiple routes', () => {
862
- expect(exactOutMultiRoute.worstExecutionPrice(new sdk_core_1.Percent(0, 100)).equalTo(new sdk_core_1.Price(token0, token2, 156, 100))).toBeTruthy();
863
- expect(exactOutMultiRoute.worstExecutionPrice(new sdk_core_1.Percent(5, 100)).equalTo(new sdk_core_1.Price(token0, token2, 163, 100))).toBeTruthy();
864
- expect(exactOutMultiRoute.worstExecutionPrice(new sdk_core_1.Percent(200, 100)).equalTo(new sdk_core_1.Price(token0, token2, 468, 100))).toBeTruthy();
865
- });
866
- });
867
- describe('worst execution price across v2 and v3 trades exact input', () => {
868
- const routev3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
869
- const routev2 = new v2_sdk_1.Route([pair_0_2], token0, token2);
870
- const mixedRoute = new route_2.MixedRouteSDK([pool_weth_0, pair_weth_2], token0, token2);
871
- const exactIn = new trade_1.Trade({
872
- v2Routes: [
873
- {
874
- routev2,
875
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 100),
876
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 100),
877
- },
878
- ],
879
- v3Routes: [
880
- {
881
- routev3,
882
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 156),
883
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 100),
884
- },
885
- ],
886
- v4Routes: [],
887
- tradeType: sdk_core_1.TradeType.EXACT_INPUT,
888
- mixedRoutes: [
889
- {
890
- mixedRoute,
891
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 94),
892
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 50),
893
- },
894
- ],
895
- });
896
- it('throws if less than 0', () => {
897
- expect(() => exactIn.worstExecutionPrice(new sdk_core_1.Percent(-1, 100))).toThrow('SLIPPAGE_TOLERANCE');
898
- });
899
- it('returns exact if 0', () => {
900
- expect(exactIn.worstExecutionPrice(new sdk_core_1.Percent(0, 100))).toEqual(exactIn.executionPrice);
901
- });
902
- it('returns exact if nonzero', () => {
903
- expect(exactIn.worstExecutionPrice(new sdk_core_1.Percent(0, 100))).toEqual(new sdk_core_1.Price(token0, token2, 350, 250));
904
- expect(exactIn.worstExecutionPrice(new sdk_core_1.Percent(5, 100))).toEqual(new sdk_core_1.Price(token0, token2, 350, 238));
905
- expect(exactIn.worstExecutionPrice(new sdk_core_1.Percent(200, 100))).toEqual(new sdk_core_1.Price(token0, token2, 350, 83));
906
- });
907
- });
908
- describe('worst execution price across only mixedRoute trades exact input', () => {
909
- const mixedRoute = new route_2.MixedRouteSDK([pool_weth_0, pair_weth_2], token0, token2);
910
- const mixedRoute2 = new route_2.MixedRouteSDK([pair_0_1, pool_weth_1, pool_weth_2], token0, token2);
911
- const exactIn = new trade_1.Trade({
912
- tradeType: sdk_core_1.TradeType.EXACT_INPUT,
913
- mixedRoutes: [
914
- {
915
- mixedRoute,
916
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 100),
917
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 100),
918
- },
919
- {
920
- mixedRoute: mixedRoute2,
921
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 156),
922
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 100),
923
- },
924
- ],
925
- });
926
- it('throws if less than 0', () => {
927
- expect(() => exactIn.worstExecutionPrice(new sdk_core_1.Percent(-1, 100))).toThrow('SLIPPAGE_TOLERANCE');
928
- });
929
- it('returns exact if 0', () => {
930
- expect(exactIn.worstExecutionPrice(new sdk_core_1.Percent(0, 100))).toEqual(exactIn.executionPrice);
931
- });
932
- it('returns exact if nonzero', () => {
933
- expect(exactIn.worstExecutionPrice(new sdk_core_1.Percent(0, 100))).toEqual(new sdk_core_1.Price(token0, token2, 256, 200));
934
- expect(exactIn.worstExecutionPrice(new sdk_core_1.Percent(5, 100))).toEqual(new sdk_core_1.Price(token0, token2, 256, 190));
935
- expect(exactIn.worstExecutionPrice(new sdk_core_1.Percent(200, 100))).toEqual(new sdk_core_1.Price(token0, token2, 256, 66));
936
- });
937
- });
938
- describe('worst execution price across v2 and v3 trades exact output', () => {
939
- const routev3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
940
- const routev2 = new v2_sdk_1.Route([pair_0_2], token0, token2);
941
- const exactOut = new trade_1.Trade({
942
- v2Routes: [
943
- {
944
- routev2,
945
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 100),
946
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 100),
947
- },
948
- ],
949
- v3Routes: [
950
- {
951
- routev3,
952
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 156),
953
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 100),
954
- },
955
- ],
956
- tradeType: sdk_core_1.TradeType.EXACT_OUTPUT,
957
- });
958
- it('throws if less than 0', () => {
959
- expect(() => exactOut.worstExecutionPrice(new sdk_core_1.Percent(-1, 100))).toThrow('SLIPPAGE_TOLERANCE');
960
- });
961
- it('returns exact if 0', () => {
962
- expect(exactOut.worstExecutionPrice(new sdk_core_1.Percent(0, 100))).toEqual(exactOut.executionPrice);
963
- });
964
- it('returns exact if nonzero', () => {
965
- expect(exactOut.worstExecutionPrice(new sdk_core_1.Percent(0, 100))).toEqual(new sdk_core_1.Price(token0, token2, 256, 200));
966
- expect(exactOut.worstExecutionPrice(new sdk_core_1.Percent(5, 100))).toEqual(new sdk_core_1.Price(token0, token2, 268, 200));
967
- expect(exactOut.worstExecutionPrice(new sdk_core_1.Percent(200, 100))).toEqual(new sdk_core_1.Price(token0, token2, 768, 200));
968
- });
969
- });
970
- });
971
- describe('#minimumAmountOut', () => {
972
- describe('tradeType = EXACT_INPUT', () => {
973
- const routev3 = new v3_sdk_1.Route([pool_0_1], token0, token1);
974
- const routev2 = new v2_sdk_1.Route([pair_0_1], token0, token1);
975
- const mixedRoute = new route_2.MixedRouteSDK([pair_0_2, pool_1_2], token0, token1);
976
- const inputAmount = sdk_core_1.CurrencyAmount.fromRawAmount(token0, 100);
977
- const outputAmount = sdk_core_1.CurrencyAmount.fromRawAmount(token1, 100);
978
- const tradeType = sdk_core_1.TradeType.EXACT_INPUT;
979
- const trade = new trade_1.Trade({
980
- v2Routes: [{ routev2, inputAmount, outputAmount }],
981
- v3Routes: [{ routev3, inputAmount, outputAmount }],
982
- tradeType,
983
- mixedRoutes: [{ mixedRoute, inputAmount, outputAmount }],
984
- });
985
- it('throws if less than 0', () => {
986
- expect(() => trade.minimumAmountOut(new sdk_core_1.Percent(jsbi_1.default.BigInt(-1), 100))).toThrow('SLIPPAGE_TOLERANCE');
987
- });
988
- it('returns exact if 0', () => {
989
- expect(trade.minimumAmountOut(new sdk_core_1.Percent(jsbi_1.default.BigInt(0), 100))).toEqual(trade.outputAmount);
990
- });
991
- it('returns exact if nonzero', () => {
992
- expect(trade.minimumAmountOut(new sdk_core_1.Percent(jsbi_1.default.BigInt(5), 100))).toEqual(sdk_core_1.CurrencyAmount.fromRawAmount(token1, 285) // 300 * 0.95
993
- );
994
- expect(trade.minimumAmountOut(new sdk_core_1.Percent(jsbi_1.default.BigInt(200), 100))).toEqual(sdk_core_1.CurrencyAmount.fromRawAmount(token1, 100));
995
- });
996
- describe('tradeType = EXACT_OUTPUT', () => {
997
- const routev3 = new v3_sdk_1.Route([pool_0_1], token0, token1);
998
- const routev2 = new v2_sdk_1.Route([pair_0_1], token0, token1);
999
- const inputAmount = sdk_core_1.CurrencyAmount.fromRawAmount(token0, 100);
1000
- const outputAmount = sdk_core_1.CurrencyAmount.fromRawAmount(token1, 100);
1001
- const tradeType = sdk_core_1.TradeType.EXACT_OUTPUT;
1002
- const trade = new trade_1.Trade({
1003
- v2Routes: [{ routev2, inputAmount, outputAmount }],
1004
- v3Routes: [{ routev3, inputAmount, outputAmount }],
1005
- tradeType,
1006
- });
1007
- it('throws if less than 0', () => {
1008
- expect(() => trade.minimumAmountOut(new sdk_core_1.Percent(jsbi_1.default.BigInt(-1), 100))).toThrow('SLIPPAGE_TOLERANCE');
1009
- });
1010
- it('returns exact if 0', () => {
1011
- expect(trade.minimumAmountOut(new sdk_core_1.Percent(jsbi_1.default.BigInt(0), 100))).toEqual(trade.outputAmount);
1012
- });
1013
- it('returns exact if nonzero', () => {
1014
- expect(trade.minimumAmountOut(new sdk_core_1.Percent(jsbi_1.default.BigInt(5), 100))).toEqual(sdk_core_1.CurrencyAmount.fromRawAmount(token1, 200));
1015
- });
1016
- });
1017
- });
1018
- });
1019
- describe('#maximumAmountIn', () => {
1020
- describe('tradeType = EXACT_INPUT', () => {
1021
- const routev3 = new v3_sdk_1.Route([pool_0_1], token0, token1);
1022
- const routev2 = new v2_sdk_1.Route([pair_0_1], token0, token1);
1023
- const mixedRoute = new route_2.MixedRouteSDK([pair_0_2, pool_1_2], token0, token1);
1024
- const inputAmount = sdk_core_1.CurrencyAmount.fromRawAmount(token0, 100);
1025
- const outputAmount = sdk_core_1.CurrencyAmount.fromRawAmount(token1, 100);
1026
- const tradeType = sdk_core_1.TradeType.EXACT_INPUT;
1027
- const trade = new trade_1.Trade({
1028
- v2Routes: [{ routev2, inputAmount, outputAmount }],
1029
- v3Routes: [{ routev3, inputAmount, outputAmount }],
1030
- tradeType,
1031
- mixedRoutes: [{ mixedRoute, inputAmount, outputAmount }],
1032
- });
1033
- it('throws if less than 0', () => {
1034
- expect(() => trade.maximumAmountIn(new sdk_core_1.Percent(jsbi_1.default.BigInt(-1), 100))).toThrow('SLIPPAGE_TOLERANCE');
1035
- });
1036
- it('returns exact if 0', () => {
1037
- expect(trade.maximumAmountIn(new sdk_core_1.Percent(jsbi_1.default.BigInt(0), 100))).toEqual(trade.inputAmount);
1038
- });
1039
- it('returns exact if nonzero', () => {
1040
- expect(trade.maximumAmountIn(new sdk_core_1.Percent(jsbi_1.default.BigInt(5), 100))).toEqual(sdk_core_1.CurrencyAmount.fromRawAmount(token0, 300));
1041
- });
1042
- describe('tradeType = EXACT_OUTPUT', () => {
1043
- const routev3 = new v3_sdk_1.Route([pool_0_1], token0, token1);
1044
- const routev2 = new v2_sdk_1.Route([pair_0_1], token0, token1);
1045
- const inputAmount = sdk_core_1.CurrencyAmount.fromRawAmount(token0, 100);
1046
- const outputAmount = sdk_core_1.CurrencyAmount.fromRawAmount(token1, 100);
1047
- const tradeType = sdk_core_1.TradeType.EXACT_OUTPUT;
1048
- const trade = new trade_1.Trade({
1049
- v2Routes: [{ routev2, inputAmount, outputAmount }],
1050
- v3Routes: [{ routev3, inputAmount, outputAmount }],
1051
- tradeType,
1052
- });
1053
- it('throws if less than 0', () => {
1054
- expect(() => trade.maximumAmountIn(new sdk_core_1.Percent(jsbi_1.default.BigInt(-1), 100))).toThrow('SLIPPAGE_TOLERANCE');
1055
- });
1056
- it('returns exact if 0', () => {
1057
- expect(trade.maximumAmountIn(new sdk_core_1.Percent(jsbi_1.default.BigInt(0), 100))).toEqual(trade.inputAmount);
1058
- });
1059
- it('returns exact if nonzero', () => {
1060
- expect(trade.maximumAmountIn(new sdk_core_1.Percent(jsbi_1.default.BigInt(5), 100))).toEqual(sdk_core_1.CurrencyAmount.fromRawAmount(token0, 210));
1061
- expect(trade.maximumAmountIn(new sdk_core_1.Percent(jsbi_1.default.BigInt(200), 100))).toEqual(sdk_core_1.CurrencyAmount.fromRawAmount(token0, 600));
1062
- });
1063
- });
1064
- });
1065
- });
1066
- // v3 sdk price impact tests
1067
- describe('#priceImpact', () => {
1068
- describe('with FOT sell fees', () => {
1069
- const routev2 = new v2_sdk_1.Route([pair_tax_output], weth, token4WithTax);
1070
- const trade = new trade_1.Trade({
1071
- v2Routes: [
1072
- {
1073
- routev2,
1074
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(weth, 100),
1075
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token4WithTax, 69),
1076
- },
1077
- ],
1078
- v3Routes: [],
1079
- tradeType: sdk_core_1.TradeType.EXACT_INPUT,
1080
- });
1081
- it('is correct', () => {
1082
- expect(trade.priceImpact.toSignificant(3)).toEqual('30.3');
1083
- });
1084
- });
1085
- describe('with FOT buy fees', () => {
1086
- const routev2 = new v2_sdk_1.Route([pair_tax_input], token5WithTax, weth);
1087
- const trade = new trade_1.Trade({
1088
- v2Routes: [
1089
- {
1090
- routev2,
1091
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token5WithTax, 100),
1092
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(weth, 69),
1093
- },
1094
- ],
1095
- tradeType: sdk_core_1.TradeType.EXACT_INPUT,
1096
- });
1097
- it('is correct', () => {
1098
- expect(trade.priceImpact.toSignificant(3)).toEqual('27.4');
1099
- });
1100
- });
1101
- describe('tradeType = EXACT_INPUT', () => {
1102
- const routev3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
1103
- const mixedRoute = new route_2.MixedRouteSDK([pool_0_1, pool_1_2], token0, token2);
1104
- const trade = new trade_1.Trade({
1105
- v3Routes: [
1106
- {
1107
- routev3,
1108
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 100),
1109
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 69),
1110
- },
1111
- ],
1112
- tradeType: sdk_core_1.TradeType.EXACT_INPUT,
1113
- });
1114
- const mixedTrade = new trade_1.Trade({
1115
- tradeType: sdk_core_1.TradeType.EXACT_INPUT,
1116
- mixedRoutes: [
1117
- {
1118
- mixedRoute,
1119
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 100),
1120
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 69),
1121
- },
1122
- ],
1123
- });
1124
- it('is cached', () => {
1125
- expect(mixedTrade.priceImpact.equalTo(trade.priceImpact)).toBe(true);
1126
- });
1127
- it('is correct', () => {
1128
- expect(trade.priceImpact.toSignificant(3)).toEqual('17.2');
1129
- expect(mixedTrade.priceImpact.toSignificant(3)).toEqual(trade.priceImpact.toSignificant(3));
1130
- });
1131
- });
1132
- describe('tradeType = EXACT_OUTPUT', () => {
1133
- const routev3 = new v3_sdk_1.Route([pool_0_1, pool_1_2], token0, token2);
1134
- const exactOut = new trade_1.Trade({
1135
- v3Routes: [
1136
- {
1137
- routev3,
1138
- inputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token0, 156),
1139
- outputAmount: sdk_core_1.CurrencyAmount.fromRawAmount(token2, 100),
1140
- },
1141
- ],
1142
- tradeType: sdk_core_1.TradeType.EXACT_OUTPUT,
1143
- });
1144
- it('is correct', () => {
1145
- expect(exactOut.priceImpact.toSignificant(3)).toEqual('23.1');
1146
- });
1147
- });
1148
- });
1149
- describe('#executionPrice', () => {
1150
- it('is correct for tradeType = EXACT_INPUT', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1151
- const routeOriginalV2 = new v2_sdk_1.Route([pair_0_1], token0, token1);
1152
- const routev2 = new route_1.RouteV2(routeOriginalV2);
1153
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
1154
- const routeOriginalV3 = new v3_sdk_1.Route([pool_0_1], token0, token1);
1155
- const routev3 = new route_1.RouteV3(routeOriginalV3);
1156
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
1157
- const mixedRouteOriginal = new route_2.MixedRouteSDK([pair_weth_0, pool_weth_1], token0, token1);
1158
- const mixedRoute = new route_1.MixedRoute(mixedRouteOriginal);
1159
- const amountMixed = sdk_core_1.CurrencyAmount.fromRawAmount(token0, jsbi_1.default.BigInt(100));
1160
- const expectedOutV3 = yield pool_0_1.getOutputAmount(amountv3);
1161
- const expectedOutMixed = yield pool_weth_1.getOutputAmount((yield pair_weth_0.getOutputAmount(amountMixed))[0]);
1162
- const expectedOut = expectedOutV3[0].add(pair_0_1.getOutputAmount(amountv2)[0]).add(expectedOutMixed[0]);
1163
- const trade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_INPUT, [{ mixedRoute, amount: amountMixed }]);
1164
- const expectedPrice = new sdk_core_1.Price(token0, token1, sdk_core_1.CurrencyAmount.fromRawAmount(token0, 300).quotient, expectedOut.quotient);
1165
- expect(trade.executionPrice).toEqual(expectedPrice);
1166
- }));
1167
- it('is correct for tradeType = EXACT_OUTPUT', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1168
- const routeOriginalV2 = new v2_sdk_1.Route([pair_0_1], token0, token1);
1169
- const routev2 = new route_1.RouteV2(routeOriginalV2);
1170
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(100));
1171
- const routeOriginalV3 = new v3_sdk_1.Route([pool_0_1], token0, token1);
1172
- const routev3 = new route_1.RouteV3(routeOriginalV3);
1173
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token1, jsbi_1.default.BigInt(100));
1174
- const expectedInV3 = yield pool_0_1.getInputAmount(amountv3);
1175
- const expectedIn = expectedInV3[0].add(pair_0_1.getInputAmount(amountv2)[0]);
1176
- const trade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_OUTPUT);
1177
- const expectedPrice = new sdk_core_1.Price(token0, token1, expectedIn.quotient, sdk_core_1.CurrencyAmount.fromRawAmount(token1, 200).quotient);
1178
- expect(trade.executionPrice).toEqual(expectedPrice);
1179
- }));
1180
- });
1181
- describe('eth-weth split routes', () => {
1182
- it('returns none for trade not involving eth-weth', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1183
- // TRADE OBJECT
1184
- // input : protocol : path : trade requirement
1185
- // [token0] : v2 : [token0 - token1] : NONE
1186
- // [token0] : v4 : [token0 - token1]: NONE
1187
- const routev2 = new v2_sdk_1.Route([pair_0_1], token0, token1);
1188
- const routev3 = new v3_sdk_1.Route([pool_0_1], token0, token1);
1189
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, 999);
1190
- const amountv3 = sdk_core_1.CurrencyAmount.fromRawAmount(token0, 101010);
1191
- const splitTrade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [{ routev3, amount: amountv3 }], sdk_core_1.TradeType.EXACT_INPUT, [], []);
1192
- expect(splitTrade.numberOfInputUnwraps).toEqual(0);
1193
- expect(splitTrade.numberOfInputWraps).toEqual(0);
1194
- expect(splitTrade.nativeInputRoutes.length).toEqual(0);
1195
- expect(splitTrade.wethInputRoutes.length).toEqual(0);
1196
- }));
1197
- it('WETH input exactIn, no unwraps', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1198
- // TRADE OBJECT
1199
- // input : protocol : path : trade requirement
1200
- // [WETH] : v2 : [WETH - token1] : NONE
1201
- // [WETH] : v4 : [WETH - token1]: NONE
1202
- const routev2 = new v2_sdk_1.Route([pair_weth_1], weth, token1);
1203
- const routev4 = new v4_sdk_1.Route([pool_v4_1_weth], weth, token1);
1204
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(weth, 100);
1205
- const amountv4 = sdk_core_1.CurrencyAmount.fromRawAmount(weth, 200);
1206
- const splitTrade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [], sdk_core_1.TradeType.EXACT_INPUT, [], [{ routev4, amount: amountv4 }]);
1207
- expect(splitTrade.numberOfInputUnwraps).toEqual(0);
1208
- expect(splitTrade.numberOfInputWraps).toEqual(0);
1209
- expect(splitTrade.nativeInputRoutes.length).toEqual(0);
1210
- expect(splitTrade.wethInputRoutes.length).toEqual(2);
1211
- expect(splitTrade.wethInputRoutes[0]).toEqual(new route_1.RouteV2(routev2));
1212
- expect(splitTrade.wethInputRoutes[1]).toEqual(new route_1.RouteV4(routev4));
1213
- }));
1214
- it('WETH input exactIn, 1 unwrap', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1215
- // TRADE OBJECT
1216
- // input : protocol : path : trade requirement
1217
- // [WETH] : v2 : [WETH - token1] : NONE
1218
- // [WETH] : v4 : [ETH - token1] : UNWRAP
1219
- const routev2 = new v2_sdk_1.Route([pair_weth_1], weth, token1);
1220
- const routev4 = new v4_sdk_1.Route([pool_v4_1_eth], weth, token1);
1221
- const amountv2 = sdk_core_1.CurrencyAmount.fromRawAmount(weth, 100);
1222
- const amountv4 = sdk_core_1.CurrencyAmount.fromRawAmount(weth, 200);
1223
- const splitTrade = yield trade_1.Trade.fromRoutes([{ routev2, amount: amountv2 }], [], sdk_core_1.TradeType.EXACT_INPUT, [], [{ routev4, amount: amountv4 }]);
1224
- expect(splitTrade.numberOfInputUnwraps).toEqual(1);
1225
- expect(splitTrade.numberOfInputWraps).toEqual(0);
1226
- expect(splitTrade.nativeInputRoutes.length).toEqual(1);
1227
- expect(splitTrade.nativeInputRoutes[0]).toEqual(new route_1.RouteV4(routev4));
1228
- expect(splitTrade.wethInputRoutes.length).toEqual(1);
1229
- expect(splitTrade.wethInputRoutes[0]).toEqual(new route_1.RouteV2(routev2));
1230
- }));
1231
- it('ETH input exactIn, no wraps', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1232
- // TRADE OBJECT
1233
- // input : protocol : path : trade requirement
1234
- // [ETH] : v4 : [ETH - token1] : NONE
1235
- // [ETH] : mixed : [ETH - token0], [token0 - token1] : NONE
1236
- const routev4 = new v4_sdk_1.Route([pool_v4_1_eth], ETHER, token1);
1237
- const mixedRoute = new route_2.MixedRouteSDK([pool_v4_0_eth, pool_0_1], ETHER, token1);
1238
- const amountv4 = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, 1111);
1239
- const amountMixed = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, 2222);
1240
- const splitTrade = yield trade_1.Trade.fromRoutes([], [], sdk_core_1.TradeType.EXACT_INPUT, [{ mixedRoute, amount: amountMixed }], [{ routev4, amount: amountv4 }]);
1241
- expect(splitTrade.numberOfInputUnwraps).toEqual(0);
1242
- expect(splitTrade.numberOfInputWraps).toEqual(0);
1243
- expect(splitTrade.nativeInputRoutes.length).toEqual(2);
1244
- expect(splitTrade.wethInputRoutes.length).toEqual(0);
1245
- expect(splitTrade.nativeInputRoutes[0]).toEqual(new route_1.RouteV4(routev4));
1246
- expect(splitTrade.nativeInputRoutes[1]).toEqual(new route_1.MixedRoute(mixedRoute));
1247
- }));
1248
- it('ETH input exactIn, 1 wrap', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
1249
- // TRADE OBJECT
1250
- // input : protocol : path : trade requirement
1251
- // [ETH] : v4 : [ETH - token1] : NONE
1252
- // [ETH] : mixed : [WETH - token0], [token0 - token1] : WRAP
1253
- const routev4 = new v4_sdk_1.Route([pool_v4_1_eth], ETHER, token1);
1254
- const mixedRoute = new route_2.MixedRouteSDK([pool_weth_0, pool_0_1], ETHER, token1);
1255
- const amountv4 = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, 1111);
1256
- const amountMixed = sdk_core_1.CurrencyAmount.fromRawAmount(ETHER, 2222);
1257
- const splitTrade = yield trade_1.Trade.fromRoutes([], [], sdk_core_1.TradeType.EXACT_INPUT, [{ mixedRoute, amount: amountMixed }], [{ routev4, amount: amountv4 }]);
1258
- expect(splitTrade.numberOfInputUnwraps).toEqual(0);
1259
- expect(splitTrade.numberOfInputWraps).toEqual(1);
1260
- expect(splitTrade.nativeInputRoutes.length).toEqual(1);
1261
- expect(splitTrade.wethInputRoutes.length).toEqual(1);
1262
- expect(splitTrade.nativeInputRoutes[0]).toEqual(new route_1.RouteV4(routev4));
1263
- expect(splitTrade.wethInputRoutes[0]).toEqual(new route_1.MixedRoute(mixedRoute));
1264
- }));
1265
- });
1266
- });
1267
- //# sourceMappingURL=trade.test.js.map