@paraswap/dex-lib 2.42.6 → 2.42.7-add-morphex
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/build/abi/kyberswap-elastic/IAntiSnipAttackPositionManager.json +1276 -0
- package/build/abi/kyberswap-elastic/IFactory.json +550 -0
- package/build/abi/kyberswap-elastic/IPool.json +1042 -0
- package/build/abi/kyberswap-elastic/IQuoterV2.json +226 -0
- package/build/abi/kyberswap-elastic/IRouter.json +239 -0
- package/build/abi/kyberswap-elastic/TicksFeesReader.json +142 -0
- package/build/abi/wombat/asset.json +769 -0
- package/build/abi/wombat/bmw.json +1247 -0
- package/build/abi/wombat/pool.json +1364 -0
- package/build/config.js +2 -2
- package/build/dex/baseswap-v3/baseswap-v3-factory.d.ts +26 -0
- package/build/dex/baseswap-v3/baseswap-v3-factory.js +44 -0
- package/build/dex/baseswap-v3/baseswap-v3-factory.js.map +1 -0
- package/build/dex/{algebra/algebra-pool.d.ts → baseswap-v3/baseswap-v3-pool.d.ts} +16 -16
- package/build/dex/{algebra/algebra-pool.js → baseswap-v3/baseswap-v3-pool.js} +137 -161
- package/build/dex/baseswap-v3/baseswap-v3-pool.js.map +1 -0
- package/build/dex/baseswap-v3/baseswap-v3.d.ts +71 -0
- package/build/dex/baseswap-v3/baseswap-v3.js +752 -0
- package/build/dex/baseswap-v3/baseswap-v3.js.map +1 -0
- package/build/dex/baseswap-v3/config.d.ts +9 -0
- package/build/dex/baseswap-v3/config.js +48 -0
- package/build/dex/baseswap-v3/config.js.map +1 -0
- package/build/dex/baseswap-v3/constants.d.ts +28 -0
- package/build/dex/baseswap-v3/constants.js +35 -0
- package/build/dex/baseswap-v3/constants.js.map +1 -0
- package/build/dex/baseswap-v3/contract-math/BitMath.d.ts +4 -0
- package/build/dex/baseswap-v3/contract-math/BitMath.js +93 -0
- package/build/dex/baseswap-v3/contract-math/BitMath.js.map +1 -0
- package/build/dex/baseswap-v3/contract-math/FixedPoint128.d.ts +3 -0
- package/build/dex/baseswap-v3/contract-math/FixedPoint128.js +8 -0
- package/build/dex/baseswap-v3/contract-math/FixedPoint128.js.map +1 -0
- package/build/dex/baseswap-v3/contract-math/FixedPoint96.d.ts +4 -0
- package/build/dex/baseswap-v3/contract-math/FixedPoint96.js +9 -0
- package/build/dex/baseswap-v3/contract-math/FixedPoint96.js.map +1 -0
- package/build/dex/baseswap-v3/contract-math/FullMath.d.ts +4 -0
- package/build/dex/baseswap-v3/contract-math/FullMath.js +19 -0
- package/build/dex/baseswap-v3/contract-math/FullMath.js.map +1 -0
- package/build/dex/baseswap-v3/contract-math/LiquidityMath.d.ts +3 -0
- package/build/dex/baseswap-v3/contract-math/LiquidityMath.js +22 -0
- package/build/dex/baseswap-v3/contract-math/LiquidityMath.js.map +1 -0
- package/build/dex/baseswap-v3/contract-math/Oracle.d.ts +10 -0
- package/build/dex/baseswap-v3/contract-math/Oracle.js +133 -0
- package/build/dex/baseswap-v3/contract-math/Oracle.js.map +1 -0
- package/build/dex/baseswap-v3/contract-math/SqrtPriceMath.d.ts +10 -0
- package/build/dex/baseswap-v3/contract-math/SqrtPriceMath.js +91 -0
- package/build/dex/baseswap-v3/contract-math/SqrtPriceMath.js.map +1 -0
- package/build/dex/baseswap-v3/contract-math/SwapMath.d.ts +8 -0
- package/build/dex/baseswap-v3/contract-math/SwapMath.js +70 -0
- package/build/dex/baseswap-v3/contract-math/SwapMath.js.map +1 -0
- package/build/dex/baseswap-v3/contract-math/Tick.d.ts +7 -0
- package/build/dex/baseswap-v3/contract-math/Tick.js +45 -0
- package/build/dex/baseswap-v3/contract-math/Tick.js.map +1 -0
- package/build/dex/baseswap-v3/contract-math/TickBitMap.d.ts +7 -0
- package/build/dex/baseswap-v3/contract-math/TickBitMap.js +84 -0
- package/build/dex/baseswap-v3/contract-math/TickBitMap.js.map +1 -0
- package/build/dex/baseswap-v3/contract-math/TickMath.d.ts +8 -0
- package/build/dex/baseswap-v3/contract-math/TickMath.js +162 -0
- package/build/dex/baseswap-v3/contract-math/TickMath.js.map +1 -0
- package/build/dex/baseswap-v3/contract-math/UnsafeMath.d.ts +3 -0
- package/build/dex/baseswap-v3/contract-math/UnsafeMath.js +10 -0
- package/build/dex/baseswap-v3/contract-math/UnsafeMath.js.map +1 -0
- package/build/dex/baseswap-v3/contract-math/uniswap-v3-math.d.ts +37 -0
- package/build/dex/baseswap-v3/contract-math/uniswap-v3-math.js +393 -0
- package/build/dex/baseswap-v3/contract-math/uniswap-v3-math.js.map +1 -0
- package/build/dex/baseswap-v3/contract-math/utils.d.ts +7 -0
- package/build/dex/baseswap-v3/contract-math/utils.js +42 -0
- package/build/dex/baseswap-v3/contract-math/utils.js.map +1 -0
- package/build/dex/baseswap-v3/types.d.ts +164 -0
- package/build/dex/baseswap-v3/types.js +9 -0
- package/build/dex/baseswap-v3/types.js.map +1 -0
- package/build/dex/baseswap-v3/utils.d.ts +6 -0
- package/build/dex/baseswap-v3/utils.js +65 -0
- package/build/dex/baseswap-v3/utils.js.map +1 -0
- package/build/dex/dexalot/dexalot.d.ts +2 -2
- package/build/dex/dexalot/dexalot.js +16 -14
- package/build/dex/dexalot/dexalot.js.map +1 -1
- package/build/dex/gmx/config.js +34 -0
- package/build/dex/gmx/config.js.map +1 -1
- package/build/dex/hello/config.d.ts +4 -0
- package/build/dex/hello/config.js +15 -0
- package/build/dex/hello/config.js.map +1 -0
- package/build/dex/hello/hello-pool.d.ts +39 -0
- package/build/dex/hello/hello-pool.js +64 -0
- package/build/dex/hello/hello-pool.js.map +1 -0
- package/build/dex/hello/hello.d.ts +37 -0
- package/build/dex/hello/hello.js +126 -0
- package/build/dex/hello/hello.js.map +1 -0
- package/build/dex/hello/types.d.ts +6 -0
- package/build/dex/hello/types.js +3 -0
- package/build/dex/hello/types.js.map +1 -0
- package/build/dex/kyberswap-elastic/config.d.ts +4 -0
- package/build/dex/kyberswap-elastic/config.js +80 -0
- package/build/dex/kyberswap-elastic/config.js.map +1 -0
- package/build/dex/kyberswap-elastic/constants.d.ts +17 -0
- package/build/dex/kyberswap-elastic/constants.js +42 -0
- package/build/dex/kyberswap-elastic/constants.js.map +1 -0
- package/build/dex/kyberswap-elastic/contract-math/FixedPoint96.d.ts +4 -0
- package/build/dex/kyberswap-elastic/contract-math/FixedPoint96.js +9 -0
- package/build/dex/kyberswap-elastic/contract-math/FixedPoint96.js.map +1 -0
- package/build/dex/kyberswap-elastic/contract-math/FullMath.d.ts +5 -0
- package/build/dex/kyberswap-elastic/contract-math/FullMath.js +22 -0
- package/build/dex/kyberswap-elastic/contract-math/FullMath.js.map +1 -0
- package/build/dex/kyberswap-elastic/contract-math/LiqDeltaMath.d.ts +3 -0
- package/build/dex/kyberswap-elastic/contract-math/LiqDeltaMath.js +12 -0
- package/build/dex/kyberswap-elastic/contract-math/LiqDeltaMath.js.map +1 -0
- package/build/dex/kyberswap-elastic/contract-math/LiquidityMath.d.ts +3 -0
- package/build/dex/kyberswap-elastic/contract-math/LiquidityMath.js +22 -0
- package/build/dex/kyberswap-elastic/contract-math/LiquidityMath.js.map +1 -0
- package/build/dex/kyberswap-elastic/contract-math/QtyDeltaMath.d.ts +5 -0
- package/build/dex/kyberswap-elastic/contract-math/QtyDeltaMath.js +25 -0
- package/build/dex/kyberswap-elastic/contract-math/QtyDeltaMath.js.map +1 -0
- package/build/dex/kyberswap-elastic/contract-math/QuadMath.d.ts +4 -0
- package/build/dex/kyberswap-elastic/contract-math/QuadMath.js +27 -0
- package/build/dex/kyberswap-elastic/contract-math/QuadMath.js.map +1 -0
- package/build/dex/kyberswap-elastic/contract-math/ReinvestmentMath.d.ts +3 -0
- package/build/dex/kyberswap-elastic/contract-math/ReinvestmentMath.js +14 -0
- package/build/dex/kyberswap-elastic/contract-math/ReinvestmentMath.js.map +1 -0
- package/build/dex/kyberswap-elastic/contract-math/SafeCast.d.ts +8 -0
- package/build/dex/kyberswap-elastic/contract-math/SafeCast.js +30 -0
- package/build/dex/kyberswap-elastic/contract-math/SafeCast.js.map +1 -0
- package/build/dex/kyberswap-elastic/contract-math/SqrtPriceMath.d.ts +10 -0
- package/build/dex/kyberswap-elastic/contract-math/SqrtPriceMath.js +91 -0
- package/build/dex/kyberswap-elastic/contract-math/SqrtPriceMath.js.map +1 -0
- package/build/dex/kyberswap-elastic/contract-math/SwapMath.d.ts +13 -0
- package/build/dex/kyberswap-elastic/contract-math/SwapMath.js +188 -0
- package/build/dex/kyberswap-elastic/contract-math/SwapMath.js.map +1 -0
- package/build/dex/kyberswap-elastic/contract-math/TickLinkedList.d.ts +6 -0
- package/build/dex/kyberswap-elastic/contract-math/TickLinkedList.js +41 -0
- package/build/dex/kyberswap-elastic/contract-math/TickLinkedList.js.map +1 -0
- package/build/dex/kyberswap-elastic/contract-math/TickMath.d.ts +9 -0
- package/build/dex/kyberswap-elastic/contract-math/TickMath.js +165 -0
- package/build/dex/kyberswap-elastic/contract-math/TickMath.js.map +1 -0
- package/build/dex/kyberswap-elastic/contract-math/UnsafeMath.d.ts +3 -0
- package/build/dex/kyberswap-elastic/contract-math/UnsafeMath.js +10 -0
- package/build/dex/kyberswap-elastic/contract-math/UnsafeMath.js.map +1 -0
- package/build/dex/kyberswap-elastic/contract-math/kyberswap-elastic-math.d.ts +28 -0
- package/build/dex/kyberswap-elastic/contract-math/kyberswap-elastic-math.js +502 -0
- package/build/dex/kyberswap-elastic/contract-math/kyberswap-elastic-math.js.map +1 -0
- package/build/dex/kyberswap-elastic/contract-math/utils.d.ts +3 -0
- package/build/dex/kyberswap-elastic/contract-math/utils.js +16 -0
- package/build/dex/kyberswap-elastic/contract-math/utils.js.map +1 -0
- package/build/dex/kyberswap-elastic/errors.d.ts +2 -0
- package/build/dex/kyberswap-elastic/errors.js +6 -0
- package/build/dex/kyberswap-elastic/errors.js.map +1 -0
- package/build/dex/kyberswap-elastic/kyberswap-elastic-pool.d.ts +80 -0
- package/build/dex/kyberswap-elastic/kyberswap-elastic-pool.js +458 -0
- package/build/dex/kyberswap-elastic/kyberswap-elastic-pool.js.map +1 -0
- package/build/dex/kyberswap-elastic/kyberswap-elastic.d.ts +53 -0
- package/build/dex/kyberswap-elastic/kyberswap-elastic.js +610 -0
- package/build/dex/kyberswap-elastic/kyberswap-elastic.js.map +1 -0
- package/build/dex/kyberswap-elastic/types.d.ts +134 -0
- package/build/dex/kyberswap-elastic/types.js +9 -0
- package/build/dex/kyberswap-elastic/types.js.map +1 -0
- package/build/dex/kyberswap-elastic/utils/decoders.d.ts +9 -0
- package/build/dex/kyberswap-elastic/utils/decoders.js +78 -0
- package/build/dex/kyberswap-elastic/utils/decoders.js.map +1 -0
- package/build/dex/morphex/config.d.ts +11 -0
- package/build/dex/morphex/config.js +43 -0
- package/build/dex/morphex/config.js.map +1 -0
- package/build/dex/morphex/morphex.d.ts +25 -0
- package/build/dex/morphex/morphex.js +19 -0
- package/build/dex/morphex/morphex.js.map +1 -0
- package/build/dex/my-test-dex/config.d.ts +4 -0
- package/build/dex/my-test-dex/config.js +15 -0
- package/build/dex/my-test-dex/config.js.map +1 -0
- package/build/dex/my-test-dex/my-test-dex-pool.d.ts +39 -0
- package/build/dex/my-test-dex/my-test-dex-pool.js +64 -0
- package/build/dex/my-test-dex/my-test-dex-pool.js.map +1 -0
- package/build/dex/my-test-dex/my-test-dex.d.ts +37 -0
- package/build/dex/my-test-dex/my-test-dex.js +126 -0
- package/build/dex/my-test-dex/my-test-dex.js.map +1 -0
- package/build/dex/my-test-dex/types.d.ts +6 -0
- package/build/dex/my-test-dex/types.js +3 -0
- package/build/dex/my-test-dex/types.js.map +1 -0
- package/build/dex/solidly/forks-override/fvm.d.ts +20 -0
- package/build/dex/solidly/forks-override/fvm.js +42 -0
- package/build/dex/solidly/forks-override/fvm.js.map +1 -0
- package/build/dex/wombat/config.d.ts +5 -0
- package/build/dex/wombat/config.js +50 -0
- package/build/dex/wombat/config.js.map +1 -0
- package/build/dex/wombat/types.d.ts +33 -0
- package/build/dex/wombat/types.js +3 -0
- package/build/dex/wombat/types.js.map +1 -0
- package/build/dex/wombat/utils.d.ts +9 -0
- package/build/dex/wombat/utils.js +66 -0
- package/build/dex/wombat/utils.js.map +1 -0
- package/build/dex/wombat/wombat-bmw.d.ts +40 -0
- package/build/dex/wombat/wombat-bmw.js +145 -0
- package/build/dex/wombat/wombat-bmw.js.map +1 -0
- package/build/dex/wombat/wombat-pool.d.ts +22 -0
- package/build/dex/wombat/wombat-pool.js +161 -0
- package/build/dex/wombat/wombat-pool.js.map +1 -0
- package/build/dex/wombat/wombat-quoter.d.ts +16 -0
- package/build/dex/wombat/wombat-quoter.js +176 -0
- package/build/dex/wombat/wombat-quoter.js.map +1 -0
- package/build/dex/wombat/wombat.d.ts +55 -0
- package/build/dex/wombat/wombat.js +292 -0
- package/build/dex/wombat/wombat.js.map +1 -0
- package/package.json +1 -1
- package/src/config.ts +2 -2
- package/src/dex/dexalot/dexalot.ts +16 -16
- package/src/dex/gmx/config.ts +34 -0
- package/src/dex/gmx/gmx-e2e.test.ts +153 -0
- package/src/dex/gmx/gmx-integration.test.ts +109 -12
- package/tests/constants-e2e.ts +5 -1
- package/build/abi/algebra/AlgebraPool.abi.json +0 -727
- package/build/abi/uniswap-v3/UniswapV3Quoter.abi.json +0 -193
- package/build/dex/algebra/algebra-pool.js.map +0 -1
- package/build/dex/quickswap/camelot-v3.d.ts +0 -6
- package/build/dex/quickswap/camelot-v3.js +0 -19
- package/build/dex/quickswap/camelot-v3.js.map +0 -1
- package/build/dex/quickswap/zyberswap-v3.d.ts +0 -6
- package/build/dex/quickswap/zyberswap-v3.js +0 -19
- package/build/dex/quickswap/zyberswap-v3.js.map +0 -1
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.Wombat = void 0;
|
|
30
|
+
const abi_1 = require("@ethersproject/abi");
|
|
31
|
+
const core_1 = require("@paraswap/core");
|
|
32
|
+
const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
|
|
33
|
+
const utils_1 = require("../../utils");
|
|
34
|
+
const simple_exchange_1 = require("../simple-exchange");
|
|
35
|
+
const config_1 = require("./config");
|
|
36
|
+
const pool_json_1 = __importDefault(require("../../abi/wombat/pool.json"));
|
|
37
|
+
const asset_json_1 = __importDefault(require("../../abi/wombat/asset.json"));
|
|
38
|
+
const erc20_json_1 = __importDefault(require("../../abi/erc20.json"));
|
|
39
|
+
const wombat_quoter_1 = require("./wombat-quoter");
|
|
40
|
+
const wombat_bmw_1 = require("./wombat-bmw");
|
|
41
|
+
const utils_2 = require("./utils");
|
|
42
|
+
const wombat_pool_1 = require("./wombat-pool");
|
|
43
|
+
class Wombat extends simple_exchange_1.SimpleExchange {
|
|
44
|
+
constructor(network, dexKey, dexHelper, adapters = config_1.Adapters[network] || {}) {
|
|
45
|
+
super(dexHelper, dexKey);
|
|
46
|
+
this.network = network;
|
|
47
|
+
this.dexKey = dexKey;
|
|
48
|
+
this.dexHelper = dexHelper;
|
|
49
|
+
this.adapters = adapters;
|
|
50
|
+
this.pools = {};
|
|
51
|
+
this.hasConstantPriceLargeAmounts = false;
|
|
52
|
+
this.needWrapNative = true;
|
|
53
|
+
this.isFeeOnTransferSupported = false;
|
|
54
|
+
this.onAssetAdded = (pool, asset2TokenMap, blockNumber) => {
|
|
55
|
+
if (!this.pools[pool]) {
|
|
56
|
+
this.pools[pool] = new wombat_pool_1.WombatPool(this.dexKey, this.getPoolIdentifier(pool), this.dexHelper, pool, asset2TokenMap);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
this.pools[pool].addAssets(asset2TokenMap);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
this.logger = dexHelper.getLogger(dexKey);
|
|
63
|
+
this.config = config_1.WombatConfig[dexKey][network];
|
|
64
|
+
this.bmw = new wombat_bmw_1.WombatBmw(dexKey, this.config.bmwAddress, network, dexHelper, this.logger, this.config.bmwAddress, this.onAssetAdded.bind(this));
|
|
65
|
+
}
|
|
66
|
+
async init(blockNumber) {
|
|
67
|
+
if (!this.bmw.isInitialized) {
|
|
68
|
+
await this.bmw.initialize(blockNumber);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Initialize pricing is called once in the start of
|
|
72
|
+
// pricing service. It is intended to setup the integration
|
|
73
|
+
// for pricing requests. It is optional for a DEX to
|
|
74
|
+
// implement this function
|
|
75
|
+
async initializePricing(blockNumber) {
|
|
76
|
+
await this.init(blockNumber);
|
|
77
|
+
const bmwState = this.bmw.getState(blockNumber);
|
|
78
|
+
if (!bmwState) {
|
|
79
|
+
throw new Error('initializePricing: bmwState still null after init');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Returns the list of contract adapters (name and index)
|
|
83
|
+
// for a buy/sell. Return null if there are no adapters.
|
|
84
|
+
getAdapters(side) {
|
|
85
|
+
return this.adapters[side] ? this.adapters[side] : null;
|
|
86
|
+
}
|
|
87
|
+
// Returns list of pool identifiers that can be used
|
|
88
|
+
// for a given swap. poolIdentifiers must be unique
|
|
89
|
+
// across DEXes. It is recommended to use
|
|
90
|
+
// ${dexKey}_${poolAddress} as a poolIdentifier
|
|
91
|
+
async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
|
|
92
|
+
await this.updatePoolState();
|
|
93
|
+
return (await this.findPools(srcToken.address.toLowerCase(), destToken.address.toLowerCase(), blockNumber, config_1.LIQUIDITY_THRESHOLD_IN_USD)).map(p => this.getPoolIdentifier(p));
|
|
94
|
+
}
|
|
95
|
+
getPoolIdentifier(poolAddress) {
|
|
96
|
+
return `${this.dexKey}_${poolAddress}`;
|
|
97
|
+
}
|
|
98
|
+
// Returns pool prices for amounts.
|
|
99
|
+
// If limitPools is defined only pools in limitPools
|
|
100
|
+
// should be used. If limitPools is undefined then
|
|
101
|
+
// any pools can be used.
|
|
102
|
+
async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
|
|
103
|
+
if (!this.pools) {
|
|
104
|
+
this.logger.error(`Missing pools for ${this.dexKey} in getPricesVolume`);
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
const srcTokenAddress = srcToken.address.toLowerCase();
|
|
108
|
+
const destTokenAddress = destToken.address.toLowerCase();
|
|
109
|
+
if (srcTokenAddress === destTokenAddress)
|
|
110
|
+
return null;
|
|
111
|
+
const pools = (await this.findPools(srcTokenAddress, destTokenAddress, blockNumber)).filter(poolAddress => !limitPools || limitPools.includes(this.getPoolIdentifier(poolAddress)));
|
|
112
|
+
const promises = [];
|
|
113
|
+
for (const poolAddress of pools) {
|
|
114
|
+
let state = await this.pools[poolAddress].getState(blockNumber);
|
|
115
|
+
if (!state) {
|
|
116
|
+
this.logger.warn(`State of pool ${poolAddress} is null in getPricesVolume, skipping...`);
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const [unit, ...prices] = this.computePrices(srcTokenAddress, destTokenAddress, [(0, utils_1.getBigIntPow)(srcToken.decimals), ...amounts], side, state.value);
|
|
120
|
+
promises.push({
|
|
121
|
+
prices,
|
|
122
|
+
unit,
|
|
123
|
+
data: {
|
|
124
|
+
exchange: poolAddress,
|
|
125
|
+
},
|
|
126
|
+
poolAddresses: [poolAddress],
|
|
127
|
+
exchange: this.dexKey,
|
|
128
|
+
/** @todo specify gas cost */
|
|
129
|
+
gasCost: 260 * 1000,
|
|
130
|
+
poolIdentifier: this.getPoolIdentifier(poolAddress),
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return await Promise.all(promises);
|
|
134
|
+
}
|
|
135
|
+
// take PoolState to compute price
|
|
136
|
+
computePrices(srcTokenAddress, destTokenAddress, amounts, side, state) {
|
|
137
|
+
const srcAsset = state.asset[srcTokenAddress];
|
|
138
|
+
const destAsset = state.asset[destTokenAddress];
|
|
139
|
+
const quoter = new wombat_quoter_1.WombatQuoter(state.params);
|
|
140
|
+
return amounts.map(fromAmount => {
|
|
141
|
+
return side === core_1.SwapSide.SELL
|
|
142
|
+
? quoter.getQuote(srcAsset, destAsset, fromAmount)
|
|
143
|
+
: quoter.getQuote(destAsset, srcAsset, -fromAmount);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
async findPools(srcTokenAddress, destTokenAddress, blockNumber, liquidityThresholdInUSD = 0) {
|
|
147
|
+
const pools = [];
|
|
148
|
+
for (const [poolAddress, pool] of Object.entries(this.pools)) {
|
|
149
|
+
let stateOj = await pool.getState(blockNumber);
|
|
150
|
+
if (!stateOj) {
|
|
151
|
+
this.logger.warn(`State of pool ${poolAddress} is null in findPools, skipping...`);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
const state = stateOj.value;
|
|
155
|
+
if (state &&
|
|
156
|
+
!state.params.paused &&
|
|
157
|
+
state.asset[srcTokenAddress] &&
|
|
158
|
+
state.asset[destTokenAddress] &&
|
|
159
|
+
(liquidityThresholdInUSD === 0 ||
|
|
160
|
+
(this.poolLiquidityUSD[poolAddress] &&
|
|
161
|
+
this.poolLiquidityUSD[poolAddress] > liquidityThresholdInUSD))) {
|
|
162
|
+
pools.push(poolAddress);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return pools;
|
|
166
|
+
}
|
|
167
|
+
// Returns estimated gas cost of calldata for this DEX in multiSwap
|
|
168
|
+
getCalldataGasCost(poolPrices) {
|
|
169
|
+
// TODO: update if there is any payload in getAdapterParam
|
|
170
|
+
return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
|
|
171
|
+
}
|
|
172
|
+
// Encode params required by the exchange adapter
|
|
173
|
+
// Used for multiSwap, buy & megaSwap
|
|
174
|
+
// Hint: abiCoder.encodeParameter() could be useful
|
|
175
|
+
getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
|
|
176
|
+
// TODO: complete me!
|
|
177
|
+
const { exchange } = data;
|
|
178
|
+
// Encode here the payload for adapter
|
|
179
|
+
const payload = '0x';
|
|
180
|
+
return {
|
|
181
|
+
targetExchange: exchange,
|
|
182
|
+
payload,
|
|
183
|
+
networkFee: '0',
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
// Encode call data used by simpleSwap like routers
|
|
187
|
+
// Used for simpleSwap & simpleBuy
|
|
188
|
+
// Hint: this.buildSimpleParamWithoutWETHConversion
|
|
189
|
+
// could be useful
|
|
190
|
+
async getSimpleParam(srcToken, destToken, srcAmount, destAmount, data, side) {
|
|
191
|
+
const { exchange } = data;
|
|
192
|
+
// Encode here the transaction arguments
|
|
193
|
+
const swapData = Wombat.poolInterface.encodeFunctionData('swap', [
|
|
194
|
+
srcToken,
|
|
195
|
+
destToken,
|
|
196
|
+
srcAmount,
|
|
197
|
+
1 /** @todo assume slippage tolorence is 2% and set the minimum receive accordingly */,
|
|
198
|
+
this.augustusAddress,
|
|
199
|
+
(0, simple_exchange_1.getLocalDeadlineAsFriendlyPlaceholder)(),
|
|
200
|
+
]);
|
|
201
|
+
return this.buildSimpleParamWithoutWETHConversion(srcToken, srcAmount, destToken, destAmount, swapData, exchange);
|
|
202
|
+
}
|
|
203
|
+
// This is called once before getTopPoolsForToken is
|
|
204
|
+
// called for multiple tokens. This can be helpful to
|
|
205
|
+
// update common state required for calculating
|
|
206
|
+
// getTopPoolsForToken. For example, poolLiquidityUSD.
|
|
207
|
+
async updatePoolState() {
|
|
208
|
+
const blockNumber = await this.dexHelper.provider.getBlockNumber();
|
|
209
|
+
await this.init(blockNumber);
|
|
210
|
+
const bmwState = this.bmw.getState(blockNumber);
|
|
211
|
+
if (!bmwState) {
|
|
212
|
+
throw new Error('updatePoolState: bmwState still null after init');
|
|
213
|
+
}
|
|
214
|
+
// All tokens are USD stablecoins so to estimate liquidity can just add
|
|
215
|
+
// the cash balances of all the tokens
|
|
216
|
+
const poolLiquidityUSD = {};
|
|
217
|
+
const usdPromises = [];
|
|
218
|
+
const poolStates = {};
|
|
219
|
+
const poolStateObjs = await Promise.all(Object.values(this.pools).map(pool => pool.getState()));
|
|
220
|
+
for (const [poolAddress, pool] of Object.entries(this.pools)) {
|
|
221
|
+
const index = Object.keys(this.pools).indexOf(poolAddress);
|
|
222
|
+
let state = poolStateObjs[index];
|
|
223
|
+
if (!state) {
|
|
224
|
+
this.logger.warn(`State of ${poolAddress} is null in updatePoolState, skipping...`);
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
poolStates[poolAddress] = state.value;
|
|
228
|
+
for (const [tokenAddress, assetState] of Object.entries(state.value.asset)) {
|
|
229
|
+
usdPromises.push(this.dexHelper.getTokenUSDPrice({
|
|
230
|
+
address: tokenAddress,
|
|
231
|
+
decimals: assetState.underlyingTokenDecimals,
|
|
232
|
+
}, (0, utils_2.fromWad)(assetState.cash, BigInt(assetState.underlyingTokenDecimals))));
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const usdValues = await Promise.all(usdPromises);
|
|
236
|
+
for (const [poolAddress, poolState] of Object.entries(poolStates)) {
|
|
237
|
+
poolLiquidityUSD[poolAddress] = 0;
|
|
238
|
+
for (let i = 0; i < poolState.underlyingAddresses.length; i++) {
|
|
239
|
+
poolLiquidityUSD[poolAddress] += usdValues[i];
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
this.poolLiquidityUSD = poolLiquidityUSD;
|
|
243
|
+
}
|
|
244
|
+
// Returns list of top pools based on liquidity. Max
|
|
245
|
+
// limit number pools should be returned.
|
|
246
|
+
async getTopPoolsForToken(tokenAddress, limit) {
|
|
247
|
+
if (!this.poolLiquidityUSD)
|
|
248
|
+
await this.updatePoolState();
|
|
249
|
+
tokenAddress = tokenAddress.toLowerCase();
|
|
250
|
+
const pools = [];
|
|
251
|
+
const poolStates = {};
|
|
252
|
+
for (const [poolAddress, eventPool] of Object.entries(this.pools)) {
|
|
253
|
+
let state = await eventPool.getState();
|
|
254
|
+
if (!state) {
|
|
255
|
+
this.logger.warn(`State of ${poolAddress} is null in getTopPoolsForToken, skipping...`);
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
if (state.value.underlyingAddresses.includes(tokenAddress) &&
|
|
259
|
+
this.poolLiquidityUSD[poolAddress]) {
|
|
260
|
+
poolStates[poolAddress] = state.value;
|
|
261
|
+
pools.push(poolAddress);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// sort by liquidity
|
|
265
|
+
pools.sort((a, b) => this.poolLiquidityUSD[b] - this.poolLiquidityUSD[a]);
|
|
266
|
+
return pools.slice(0, limit).map(poolAddress => ({
|
|
267
|
+
exchange: this.dexKey,
|
|
268
|
+
address: poolAddress,
|
|
269
|
+
// other tokens in the same pool
|
|
270
|
+
connectorTokens: poolStates[poolAddress].underlyingAddresses
|
|
271
|
+
.filter(t => t !== tokenAddress)
|
|
272
|
+
.map(t => ({
|
|
273
|
+
decimals: poolStates[poolAddress].asset[t].underlyingTokenDecimals,
|
|
274
|
+
address: t,
|
|
275
|
+
})),
|
|
276
|
+
liquidityUSD: this.poolLiquidityUSD[poolAddress],
|
|
277
|
+
}));
|
|
278
|
+
}
|
|
279
|
+
// This is optional function in case if your implementation has acquired any resources
|
|
280
|
+
// you need to release for graceful shutdown. For example, it may be any interval timer
|
|
281
|
+
releaseResources() {
|
|
282
|
+
// TODO: complete me!
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
exports.Wombat = Wombat;
|
|
286
|
+
// export class Wombat implements IDex<WombatData> {
|
|
287
|
+
// contract interfaces
|
|
288
|
+
Wombat.erc20Interface = new abi_1.Interface(erc20_json_1.default);
|
|
289
|
+
Wombat.poolInterface = new abi_1.Interface(pool_json_1.default);
|
|
290
|
+
Wombat.assetInterface = new abi_1.Interface(asset_json_1.default);
|
|
291
|
+
Wombat.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.WombatConfig);
|
|
292
|
+
//# sourceMappingURL=wombat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wombat.js","sourceRoot":"","sources":["../../../src/dex/wombat/wombat.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/config.ts
CHANGED
|
@@ -165,7 +165,7 @@ const baseConfigs: { [network: number]: BaseConfig } = {
|
|
|
165
165
|
process.env[`HASHFLOW_DISABLED_MMS_56`]?.split(',') || [],
|
|
166
166
|
adapterAddresses: {
|
|
167
167
|
BscAdapter01: '0xA31d9C571DF00e0F428B0bD24c34D103E8112222',
|
|
168
|
-
BscAdapter02: '
|
|
168
|
+
BscAdapter02: '0xEECA9223063bD13e8ca77ed9e39a07f2BD1923E6',
|
|
169
169
|
BscBuyAdapter: '0x301c2813e3ceb43A448a12f21551EDBcdC37F157',
|
|
170
170
|
},
|
|
171
171
|
rpcPollingMaxAllowedStateDelayInBlocks: 1,
|
|
@@ -252,7 +252,7 @@ const baseConfigs: { [network: number]: BaseConfig } = {
|
|
|
252
252
|
process.env[`HASHFLOW_DISABLED_MMS_250`]?.split(',') || [],
|
|
253
253
|
|
|
254
254
|
adapterAddresses: {
|
|
255
|
-
FantomAdapter01: '
|
|
255
|
+
FantomAdapter01: '0x654dE10890f8B2C5bF54E50Af169a7E93165C416',
|
|
256
256
|
FantomBuyAdapter: '0xb2634B3CBc1E401AB3C2743DB44d459C5c9aA662',
|
|
257
257
|
},
|
|
258
258
|
uniswapV2ExchangeRouterAddress:
|
|
@@ -323,7 +323,7 @@ export class Dexalot extends SimpleExchange implements IDex<DexalotData> {
|
|
|
323
323
|
orderbook: string[][],
|
|
324
324
|
baseToken: Token,
|
|
325
325
|
quoteToken: Token,
|
|
326
|
-
|
|
326
|
+
isInputQuote: boolean,
|
|
327
327
|
) {
|
|
328
328
|
let result = [];
|
|
329
329
|
|
|
@@ -345,7 +345,7 @@ export class Dexalot extends SimpleExchange implements IDex<DexalotData> {
|
|
|
345
345
|
.parseUnits(orderbook[mid][1], quoteToken.decimals)
|
|
346
346
|
.toString(),
|
|
347
347
|
);
|
|
348
|
-
if (
|
|
348
|
+
if (isInputQuote) {
|
|
349
349
|
const price = BigInt(
|
|
350
350
|
ethers.utils
|
|
351
351
|
.parseUnits(orderbook[mid][0], baseToken.decimals)
|
|
@@ -371,6 +371,8 @@ export class Dexalot extends SimpleExchange implements IDex<DexalotData> {
|
|
|
371
371
|
.toString(),
|
|
372
372
|
);
|
|
373
373
|
amount = amounts[i];
|
|
374
|
+
} else if (left === 0) {
|
|
375
|
+
price = 0n;
|
|
374
376
|
} else if (left < orderbook.length) {
|
|
375
377
|
const lPrice = BigInt(
|
|
376
378
|
ethers.utils
|
|
@@ -392,9 +394,8 @@ export class Dexalot extends SimpleExchange implements IDex<DexalotData> {
|
|
|
392
394
|
.parseUnits(orderbook[left][1], quoteToken.decimals)
|
|
393
395
|
.toString(),
|
|
394
396
|
);
|
|
395
|
-
if (
|
|
396
|
-
lQty =
|
|
397
|
-
(lQty * BigInt(10 ** (baseToken.decimals * 2))) /
|
|
397
|
+
if (isInputQuote) {
|
|
398
|
+
lQty = (lQty * BigInt(10 ** (baseToken.decimals * 2))) /
|
|
398
399
|
(lPrice * BigInt(10 ** quoteToken.decimals));
|
|
399
400
|
rQty =
|
|
400
401
|
(rQty * BigInt(10 ** (baseToken.decimals * 2))) /
|
|
@@ -404,18 +405,18 @@ export class Dexalot extends SimpleExchange implements IDex<DexalotData> {
|
|
|
404
405
|
amount = amounts[i];
|
|
405
406
|
}
|
|
406
407
|
|
|
407
|
-
if (
|
|
408
|
+
if (isInputQuote) {
|
|
409
|
+
result.push(
|
|
410
|
+
(price * amount * BigInt(10 ** quoteToken.decimals)) /
|
|
411
|
+
BigInt(10 ** (baseToken.decimals * 2)),
|
|
412
|
+
);
|
|
413
|
+
} else {
|
|
408
414
|
result.push(
|
|
409
415
|
price !== 0n // To avoid division by zero error
|
|
410
416
|
? (amount * BigInt(10 ** (baseToken.decimals * 2))) /
|
|
411
417
|
(price * BigInt(10 ** quoteToken.decimals))
|
|
412
418
|
: 0n,
|
|
413
419
|
);
|
|
414
|
-
} else {
|
|
415
|
-
result.push(
|
|
416
|
-
(price * amount * BigInt(10 ** quoteToken.decimals)) /
|
|
417
|
-
BigInt(10 ** (baseToken.decimals * 2)),
|
|
418
|
-
);
|
|
419
420
|
}
|
|
420
421
|
}
|
|
421
422
|
return result;
|
|
@@ -496,10 +497,7 @@ export class Dexalot extends SimpleExchange implements IDex<DexalotData> {
|
|
|
496
497
|
// convert from swap to clob side
|
|
497
498
|
let orderbook = priceData.asks;
|
|
498
499
|
let clobSide = ClobSide.BID;
|
|
499
|
-
if (
|
|
500
|
-
(side === SwapSide.SELL && pairData.isSrcBase) ||
|
|
501
|
-
(side === SwapSide.BUY && !pairData.isSrcBase)
|
|
502
|
-
) {
|
|
500
|
+
if (pairData.isSrcBase) {
|
|
503
501
|
orderbook = priceData.bids;
|
|
504
502
|
clobSide = ClobSide.ASK;
|
|
505
503
|
}
|
|
@@ -507,12 +505,14 @@ export class Dexalot extends SimpleExchange implements IDex<DexalotData> {
|
|
|
507
505
|
throw new Error(`Empty orderbook for ${pairKey}`);
|
|
508
506
|
}
|
|
509
507
|
|
|
508
|
+
const isInputQuote = (clobSide === ClobSide.ASK && side === SwapSide.SELL) || (clobSide === ClobSide.BID && side === SwapSide.BUY);
|
|
509
|
+
|
|
510
510
|
const prices = this.calculateOrderPrice(
|
|
511
511
|
amounts,
|
|
512
512
|
orderbook,
|
|
513
513
|
baseToken,
|
|
514
514
|
quoteToken,
|
|
515
|
-
|
|
515
|
+
isInputQuote
|
|
516
516
|
);
|
|
517
517
|
const outDecimals =
|
|
518
518
|
clobSide === ClobSide.BID ? baseToken.decimals : quoteToken.decimals;
|
package/src/dex/gmx/config.ts
CHANGED
|
@@ -21,6 +21,24 @@ export const GMXConfig: DexConfigMap<DexParams> = {
|
|
|
21
21
|
usdg: '0x45096e7aA921f27590f8F19e457794EB09678141',
|
|
22
22
|
},
|
|
23
23
|
},
|
|
24
|
+
Morphex: {
|
|
25
|
+
[Network.FANTOM]: {
|
|
26
|
+
vault: '0x245cD6d33578de9aF75a3C0c636c726b1A8cbdAa',
|
|
27
|
+
reader: '0xcA47b9b612a152ece991F31d8D3547D73BaF2Ecc',
|
|
28
|
+
priceFeed: '0x7a451DE877CbB6551AACa671d0458B6f9dF1e29A',
|
|
29
|
+
fastPriceFeed: '0x7f54C35A38D89fcf5Fe516206E6628745ed38CC7',
|
|
30
|
+
fastPriceEvents: '0xDc7C389be5da32e326A261dC0126feCa7AE04d79',
|
|
31
|
+
usdg: '0xe135c7BFfda932b5B862Da442cF4CbC4d43DC3Ad',
|
|
32
|
+
},
|
|
33
|
+
[Network.BSC]: {
|
|
34
|
+
vault: '0x46940Dc651bFe3F2CC3E04cf9dC5579B50Cf0765',
|
|
35
|
+
reader: '0x49A97680938B4F1f73816d1B70C3Ab801FAd124B',
|
|
36
|
+
priceFeed: '0x0144b19D1B9338fC7C286d6767bd9b29F0347f27',
|
|
37
|
+
fastPriceFeed: '0x55e6e6A968e485abEC1e1d957f408586e45a4f99',
|
|
38
|
+
fastPriceEvents: '0x491Df61db853761d42C4F38BeD220E9D807143dE',
|
|
39
|
+
usdg: '0x548f93779fBC992010C07467cBaf329DD5F059B7',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
24
42
|
};
|
|
25
43
|
|
|
26
44
|
export const Adapters: {
|
|
@@ -44,4 +62,20 @@ export const Adapters: {
|
|
|
44
62
|
},
|
|
45
63
|
],
|
|
46
64
|
},
|
|
65
|
+
[Network.BSC]: {
|
|
66
|
+
[SwapSide.SELL]: [
|
|
67
|
+
{
|
|
68
|
+
name: 'BscAdapter02',
|
|
69
|
+
index: 6,
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
[Network.FANTOM]: {
|
|
74
|
+
[SwapSide.SELL]: [
|
|
75
|
+
{
|
|
76
|
+
name: 'FantomAdapter01',
|
|
77
|
+
index: 12,
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
},
|
|
47
81
|
};
|
|
@@ -164,3 +164,156 @@ describe('GMX E2E', () => {
|
|
|
164
164
|
);
|
|
165
165
|
});
|
|
166
166
|
});
|
|
167
|
+
|
|
168
|
+
describe('Morphex E2E', () => {
|
|
169
|
+
const dexKey = 'Morphex';
|
|
170
|
+
|
|
171
|
+
describe('Fantom', () => {
|
|
172
|
+
const network = Network.FANTOM;
|
|
173
|
+
const tokens = Tokens[network];
|
|
174
|
+
const holders = Holders[network];
|
|
175
|
+
const provider = new StaticJsonRpcProvider(
|
|
176
|
+
generateConfig(network).privateHttpProvider,
|
|
177
|
+
network,
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
const tokenASymbol: string = 'axlUSDC';
|
|
181
|
+
const tokenBSymbol: string = 'lzUSDC';
|
|
182
|
+
const nativeTokenSymbol = NativeTokenSymbols[network];
|
|
183
|
+
|
|
184
|
+
const tokenAAmount: string = '500000000'; // 500 Axelar USDC
|
|
185
|
+
const tokenBAmount: string = '500000000'; // 500 Layer Zero USDC
|
|
186
|
+
const nativeTokenAmount = '100000000000000000000'; // 100 FTM
|
|
187
|
+
|
|
188
|
+
const sideToContractMethods = new Map([
|
|
189
|
+
[
|
|
190
|
+
SwapSide.SELL,
|
|
191
|
+
[
|
|
192
|
+
ContractMethod.simpleSwap,
|
|
193
|
+
ContractMethod.multiSwap,
|
|
194
|
+
ContractMethod.megaSwap,
|
|
195
|
+
],
|
|
196
|
+
],
|
|
197
|
+
]);
|
|
198
|
+
|
|
199
|
+
sideToContractMethods.forEach((contractMethods, side) =>
|
|
200
|
+
contractMethods.forEach((contractMethod: ContractMethod) => {
|
|
201
|
+
describe(`${contractMethod}`, () => {
|
|
202
|
+
it(`${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
|
|
203
|
+
await testE2E(
|
|
204
|
+
tokens[nativeTokenSymbol],
|
|
205
|
+
tokens[tokenASymbol],
|
|
206
|
+
holders[nativeTokenSymbol],
|
|
207
|
+
side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
|
|
208
|
+
side,
|
|
209
|
+
dexKey,
|
|
210
|
+
contractMethod,
|
|
211
|
+
network,
|
|
212
|
+
provider,
|
|
213
|
+
);
|
|
214
|
+
});
|
|
215
|
+
it(`${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
|
|
216
|
+
await testE2E(
|
|
217
|
+
tokens[tokenASymbol],
|
|
218
|
+
tokens[nativeTokenSymbol],
|
|
219
|
+
holders[tokenASymbol],
|
|
220
|
+
side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
|
|
221
|
+
side,
|
|
222
|
+
dexKey,
|
|
223
|
+
contractMethod,
|
|
224
|
+
network,
|
|
225
|
+
provider,
|
|
226
|
+
);
|
|
227
|
+
});
|
|
228
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
229
|
+
await testE2E(
|
|
230
|
+
tokens[tokenASymbol],
|
|
231
|
+
tokens[tokenBSymbol],
|
|
232
|
+
holders[tokenASymbol],
|
|
233
|
+
side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
|
|
234
|
+
side,
|
|
235
|
+
dexKey,
|
|
236
|
+
contractMethod,
|
|
237
|
+
network,
|
|
238
|
+
provider,
|
|
239
|
+
);
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
}),
|
|
243
|
+
);
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
describe('BSC', () => {
|
|
247
|
+
const network = Network.BSC;
|
|
248
|
+
const tokens = Tokens[network];
|
|
249
|
+
const holders = Holders[network];
|
|
250
|
+
const provider = new StaticJsonRpcProvider(
|
|
251
|
+
generateConfig(network).privateHttpProvider,
|
|
252
|
+
network,
|
|
253
|
+
);
|
|
254
|
+
const tokenASymbol: string = 'USDC';
|
|
255
|
+
const tokenBSymbol: string = 'XRP';
|
|
256
|
+
const nativeTokenSymbol = NativeTokenSymbols[network];
|
|
257
|
+
|
|
258
|
+
const tokenAAmount: string = '100000';
|
|
259
|
+
const tokenBAmount: string = '100000';
|
|
260
|
+
const nativeTokenAmount = '1000000000000000000';
|
|
261
|
+
|
|
262
|
+
const sideToContractMethods = new Map([
|
|
263
|
+
[
|
|
264
|
+
SwapSide.SELL,
|
|
265
|
+
[
|
|
266
|
+
ContractMethod.simpleSwap,
|
|
267
|
+
ContractMethod.multiSwap,
|
|
268
|
+
ContractMethod.megaSwap,
|
|
269
|
+
],
|
|
270
|
+
],
|
|
271
|
+
]);
|
|
272
|
+
|
|
273
|
+
sideToContractMethods.forEach((contractMethods, side) =>
|
|
274
|
+
contractMethods.forEach((contractMethod: ContractMethod) => {
|
|
275
|
+
describe(`${contractMethod}`, () => {
|
|
276
|
+
it(`${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
|
|
277
|
+
await testE2E(
|
|
278
|
+
tokens[nativeTokenSymbol],
|
|
279
|
+
tokens[tokenASymbol],
|
|
280
|
+
holders[nativeTokenSymbol],
|
|
281
|
+
side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
|
|
282
|
+
side,
|
|
283
|
+
dexKey,
|
|
284
|
+
contractMethod,
|
|
285
|
+
network,
|
|
286
|
+
provider,
|
|
287
|
+
);
|
|
288
|
+
});
|
|
289
|
+
it(`${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
|
|
290
|
+
await testE2E(
|
|
291
|
+
tokens[tokenASymbol],
|
|
292
|
+
tokens[nativeTokenSymbol],
|
|
293
|
+
holders[tokenASymbol],
|
|
294
|
+
side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
|
|
295
|
+
side,
|
|
296
|
+
dexKey,
|
|
297
|
+
contractMethod,
|
|
298
|
+
network,
|
|
299
|
+
provider,
|
|
300
|
+
);
|
|
301
|
+
});
|
|
302
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
303
|
+
await testE2E(
|
|
304
|
+
tokens[tokenASymbol],
|
|
305
|
+
tokens[tokenBSymbol],
|
|
306
|
+
holders[tokenASymbol],
|
|
307
|
+
side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
|
|
308
|
+
side,
|
|
309
|
+
dexKey,
|
|
310
|
+
contractMethod,
|
|
311
|
+
network,
|
|
312
|
+
provider,
|
|
313
|
+
);
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
}),
|
|
317
|
+
);
|
|
318
|
+
});
|
|
319
|
+
});
|