@uniswap/router-sdk 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{cjs/src/approveAndCall.d.ts → approveAndCall.d.ts} +33 -33
- package/dist/{types/src/constants.d.ts → constants.d.ts} +13 -13
- package/dist/{types/src/entities → entities}/mixedRoute/route.d.ts +29 -29
- package/dist/{esm/src/entities → entities}/mixedRoute/trade.d.ts +183 -183
- package/dist/{cjs/src/entities → entities}/protocol.d.ts +6 -6
- package/dist/{esm/src/entities → entities}/route.d.ts +40 -40
- package/dist/{esm/src/entities → entities}/trade.d.ts +127 -127
- package/dist/{cjs/src/index.d.ts → index.d.ts} +14 -14
- package/dist/index.js +8 -0
- package/dist/{cjs/src/multicallExtended.d.ts → multicallExtended.d.ts} +11 -11
- package/dist/{types/src/paymentsExtended.d.ts → paymentsExtended.d.ts} +15 -15
- package/dist/router-sdk.cjs.development.js +2460 -0
- package/dist/router-sdk.cjs.development.js.map +1 -0
- package/dist/router-sdk.cjs.production.min.js +2 -0
- package/dist/router-sdk.cjs.production.min.js.map +1 -0
- package/dist/router-sdk.esm.js +2427 -0
- package/dist/router-sdk.esm.js.map +1 -0
- package/dist/{cjs/src/swapRouter.d.ts → swapRouter.d.ts} +95 -95
- package/dist/{cjs/src/utils → utils}/TPool.d.ts +4 -4
- package/dist/{cjs/src/utils → utils}/encodeMixedRouteToPath.d.ts +9 -9
- package/dist/{types/src/utils → utils}/index.d.ts +16 -16
- package/dist/{cjs/src/utils → utils}/pathCurrency.d.ts +4 -4
- package/package.json +18 -33
- package/dist/cjs/src/approveAndCall.js +0 -111
- package/dist/cjs/src/approveAndCall.js.map +0 -1
- package/dist/cjs/src/constants.d.ts +0 -13
- package/dist/cjs/src/constants.js +0 -22
- package/dist/cjs/src/constants.js.map +0 -1
- package/dist/cjs/src/entities/mixedRoute/route.d.ts +0 -29
- package/dist/cjs/src/entities/mixedRoute/route.js +0 -119
- package/dist/cjs/src/entities/mixedRoute/route.js.map +0 -1
- package/dist/cjs/src/entities/mixedRoute/route.test.d.ts +0 -1
- package/dist/cjs/src/entities/mixedRoute/route.test.js +0 -469
- package/dist/cjs/src/entities/mixedRoute/route.test.js.map +0 -1
- package/dist/cjs/src/entities/mixedRoute/trade.d.ts +0 -183
- package/dist/cjs/src/entities/mixedRoute/trade.js +0 -357
- package/dist/cjs/src/entities/mixedRoute/trade.js.map +0 -1
- package/dist/cjs/src/entities/mixedRoute/trade.test.d.ts +0 -1
- package/dist/cjs/src/entities/mixedRoute/trade.test.js +0 -1010
- package/dist/cjs/src/entities/mixedRoute/trade.test.js.map +0 -1
- package/dist/cjs/src/entities/protocol.js +0 -11
- package/dist/cjs/src/entities/protocol.js.map +0 -1
- package/dist/cjs/src/entities/route.d.ts +0 -40
- package/dist/cjs/src/entities/route.js +0 -63
- package/dist/cjs/src/entities/route.js.map +0 -1
- package/dist/cjs/src/entities/route.test.d.ts +0 -1
- package/dist/cjs/src/entities/route.test.js +0 -192
- package/dist/cjs/src/entities/route.test.js.map +0 -1
- package/dist/cjs/src/entities/trade.d.ts +0 -127
- package/dist/cjs/src/entities/trade.js +0 -366
- package/dist/cjs/src/entities/trade.js.map +0 -1
- package/dist/cjs/src/entities/trade.test.d.ts +0 -1
- package/dist/cjs/src/entities/trade.test.js +0 -1267
- package/dist/cjs/src/entities/trade.test.js.map +0 -1
- package/dist/cjs/src/index.js +0 -18
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/src/multicallExtended.js +0 -43
- package/dist/cjs/src/multicallExtended.js.map +0 -1
- package/dist/cjs/src/multicallExtended.test.d.ts +0 -1
- package/dist/cjs/src/multicallExtended.test.js +0 -22
- package/dist/cjs/src/multicallExtended.test.js.map +0 -1
- package/dist/cjs/src/paymentsExtended.d.ts +0 -15
- package/dist/cjs/src/paymentsExtended.js +0 -65
- package/dist/cjs/src/paymentsExtended.js.map +0 -1
- package/dist/cjs/src/paymentsExtended.test.d.ts +0 -1
- package/dist/cjs/src/paymentsExtended.test.js +0 -60
- package/dist/cjs/src/paymentsExtended.test.js.map +0 -1
- package/dist/cjs/src/swapRouter.js +0 -439
- package/dist/cjs/src/swapRouter.js.map +0 -1
- package/dist/cjs/src/swapRouter.test.d.ts +0 -1
- package/dist/cjs/src/swapRouter.test.js +0 -1161
- package/dist/cjs/src/swapRouter.test.js.map +0 -1
- package/dist/cjs/src/utils/TPool.js +0 -3
- package/dist/cjs/src/utils/TPool.js.map +0 -1
- package/dist/cjs/src/utils/encodeMixedRouteToPath.js +0 -90
- package/dist/cjs/src/utils/encodeMixedRouteToPath.js.map +0 -1
- package/dist/cjs/src/utils/encodeMixedRouteToPath.test.d.ts +0 -1
- package/dist/cjs/src/utils/encodeMixedRouteToPath.test.js +0 -136
- package/dist/cjs/src/utils/encodeMixedRouteToPath.test.js.map +0 -1
- package/dist/cjs/src/utils/index.d.ts +0 -16
- package/dist/cjs/src/utils/index.js +0 -51
- package/dist/cjs/src/utils/index.js.map +0 -1
- package/dist/cjs/src/utils/pathCurrency.js +0 -35
- package/dist/cjs/src/utils/pathCurrency.js.map +0 -1
- package/dist/cjs/src/utils/pathCurrency.test.d.ts +0 -1
- package/dist/cjs/src/utils/pathCurrency.test.js +0 -17
- package/dist/cjs/src/utils/pathCurrency.test.js.map +0 -1
- package/dist/esm/src/approveAndCall.d.ts +0 -33
- package/dist/esm/src/approveAndCall.js +0 -105
- package/dist/esm/src/approveAndCall.js.map +0 -1
- package/dist/esm/src/constants.d.ts +0 -13
- package/dist/esm/src/constants.js +0 -18
- package/dist/esm/src/constants.js.map +0 -1
- package/dist/esm/src/entities/mixedRoute/route.d.ts +0 -29
- package/dist/esm/src/entities/mixedRoute/route.js +0 -114
- package/dist/esm/src/entities/mixedRoute/route.js.map +0 -1
- package/dist/esm/src/entities/mixedRoute/route.test.d.ts +0 -1
- package/dist/esm/src/entities/mixedRoute/route.test.js +0 -467
- package/dist/esm/src/entities/mixedRoute/route.test.js.map +0 -1
- package/dist/esm/src/entities/mixedRoute/trade.js +0 -352
- package/dist/esm/src/entities/mixedRoute/trade.js.map +0 -1
- package/dist/esm/src/entities/mixedRoute/trade.test.d.ts +0 -1
- package/dist/esm/src/entities/mixedRoute/trade.test.js +0 -1008
- package/dist/esm/src/entities/mixedRoute/trade.test.js.map +0 -1
- package/dist/esm/src/entities/protocol.d.ts +0 -6
- package/dist/esm/src/entities/protocol.js +0 -8
- package/dist/esm/src/entities/protocol.js.map +0 -1
- package/dist/esm/src/entities/route.js +0 -55
- package/dist/esm/src/entities/route.js.map +0 -1
- package/dist/esm/src/entities/route.test.d.ts +0 -1
- package/dist/esm/src/entities/route.test.js +0 -190
- package/dist/esm/src/entities/route.test.js.map +0 -1
- package/dist/esm/src/entities/trade.js +0 -362
- package/dist/esm/src/entities/trade.js.map +0 -1
- package/dist/esm/src/entities/trade.test.d.ts +0 -1
- package/dist/esm/src/entities/trade.test.js +0 -1265
- package/dist/esm/src/entities/trade.test.js.map +0 -1
- package/dist/esm/src/index.d.ts +0 -14
- package/dist/esm/src/index.js +0 -15
- package/dist/esm/src/index.js.map +0 -1
- package/dist/esm/src/multicallExtended.d.ts +0 -11
- package/dist/esm/src/multicallExtended.js +0 -39
- package/dist/esm/src/multicallExtended.js.map +0 -1
- package/dist/esm/src/multicallExtended.test.d.ts +0 -1
- package/dist/esm/src/multicallExtended.test.js +0 -20
- package/dist/esm/src/multicallExtended.test.js.map +0 -1
- package/dist/esm/src/paymentsExtended.d.ts +0 -15
- package/dist/esm/src/paymentsExtended.js +0 -61
- package/dist/esm/src/paymentsExtended.js.map +0 -1
- package/dist/esm/src/paymentsExtended.test.d.ts +0 -1
- package/dist/esm/src/paymentsExtended.test.js +0 -57
- package/dist/esm/src/paymentsExtended.test.js.map +0 -1
- package/dist/esm/src/swapRouter.d.ts +0 -95
- package/dist/esm/src/swapRouter.js +0 -434
- package/dist/esm/src/swapRouter.js.map +0 -1
- package/dist/esm/src/swapRouter.test.d.ts +0 -1
- package/dist/esm/src/swapRouter.test.js +0 -1159
- package/dist/esm/src/swapRouter.test.js.map +0 -1
- package/dist/esm/src/utils/TPool.d.ts +0 -4
- package/dist/esm/src/utils/TPool.js +0 -2
- package/dist/esm/src/utils/TPool.js.map +0 -1
- package/dist/esm/src/utils/encodeMixedRouteToPath.d.ts +0 -9
- package/dist/esm/src/utils/encodeMixedRouteToPath.js +0 -86
- package/dist/esm/src/utils/encodeMixedRouteToPath.js.map +0 -1
- package/dist/esm/src/utils/encodeMixedRouteToPath.test.d.ts +0 -1
- package/dist/esm/src/utils/encodeMixedRouteToPath.test.js +0 -134
- package/dist/esm/src/utils/encodeMixedRouteToPath.test.js.map +0 -1
- package/dist/esm/src/utils/index.d.ts +0 -16
- package/dist/esm/src/utils/index.js +0 -46
- package/dist/esm/src/utils/index.js.map +0 -1
- package/dist/esm/src/utils/pathCurrency.d.ts +0 -4
- package/dist/esm/src/utils/pathCurrency.js +0 -30
- package/dist/esm/src/utils/pathCurrency.js.map +0 -1
- package/dist/esm/src/utils/pathCurrency.test.d.ts +0 -1
- package/dist/esm/src/utils/pathCurrency.test.js +0 -15
- package/dist/esm/src/utils/pathCurrency.test.js.map +0 -1
- package/dist/types/src/approveAndCall.d.ts +0 -33
- package/dist/types/src/entities/mixedRoute/route.test.d.ts +0 -1
- package/dist/types/src/entities/mixedRoute/trade.d.ts +0 -183
- package/dist/types/src/entities/mixedRoute/trade.test.d.ts +0 -1
- package/dist/types/src/entities/protocol.d.ts +0 -6
- package/dist/types/src/entities/route.d.ts +0 -40
- package/dist/types/src/entities/route.test.d.ts +0 -1
- package/dist/types/src/entities/trade.d.ts +0 -127
- package/dist/types/src/entities/trade.test.d.ts +0 -1
- package/dist/types/src/index.d.ts +0 -14
- package/dist/types/src/multicallExtended.d.ts +0 -11
- package/dist/types/src/multicallExtended.test.d.ts +0 -1
- package/dist/types/src/paymentsExtended.test.d.ts +0 -1
- package/dist/types/src/swapRouter.d.ts +0 -95
- package/dist/types/src/swapRouter.test.d.ts +0 -1
- package/dist/types/src/utils/TPool.d.ts +0 -4
- package/dist/types/src/utils/encodeMixedRouteToPath.d.ts +0 -9
- package/dist/types/src/utils/encodeMixedRouteToPath.test.d.ts +0 -1
- package/dist/types/src/utils/pathCurrency.d.ts +0 -4
- 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
|