@paraswap/dex-lib 2.42.2 → 2.42.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +3 -2
- package/build/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/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/swaap-v2/config.js +5 -2
- package/build/dex/swaap-v2/config.js.map +1 -1
- package/build/dex/wombat/config.d.ts +5 -0
- package/build/dex/wombat/config.js +36 -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 +3 -2
- package/src/dex/swaap-v2/config.ts +5 -2
- package/src/dex/swaap-v2/swaap-v2-e2e.test.ts +74 -41
- 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.d.ts +0 -46
- package/build/dex/algebra/algebra-pool.js +0 -336
- 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,80 @@
|
|
|
1
|
+
import { Interface } from '@ethersproject/abi';
|
|
2
|
+
import { Contract } from 'web3-eth-contract';
|
|
3
|
+
import { DeepReadonly } from 'ts-essentials';
|
|
4
|
+
import { Log, Logger, Address, BlockHeader } from '../../types';
|
|
5
|
+
import { StatefulEventSubscriber, InitializeStateOptions } from '../../stateful-event-subscriber';
|
|
6
|
+
import { IDexHelper } from '../../dex-helper/idex-helper';
|
|
7
|
+
import { PoolState } from './types';
|
|
8
|
+
export declare class KyberswapElasticEventPool extends StatefulEventSubscriber<PoolState> {
|
|
9
|
+
readonly parentName: string;
|
|
10
|
+
protected network: number;
|
|
11
|
+
protected dexHelper: IDexHelper;
|
|
12
|
+
protected logger: Logger;
|
|
13
|
+
protected config: import("./types").DexParams;
|
|
14
|
+
readonly swapFeeUnits: bigint;
|
|
15
|
+
readonly token0: Address;
|
|
16
|
+
readonly token1: Address;
|
|
17
|
+
handlers: {
|
|
18
|
+
[event: string]: (event: any, pool: PoolState, log: Log, blockHeader: Readonly<BlockHeader>) => PoolState;
|
|
19
|
+
};
|
|
20
|
+
poolLogDecoder: (log: Log) => any;
|
|
21
|
+
pmLogDecoder: (log: Log) => any;
|
|
22
|
+
addressesSubscribed: string[];
|
|
23
|
+
poolContract: Contract;
|
|
24
|
+
readonly erc20Iface: Interface;
|
|
25
|
+
readonly kyberswapElasticIface: Interface;
|
|
26
|
+
readonly positionManagerIface: Interface;
|
|
27
|
+
readonly multicallContract: Contract;
|
|
28
|
+
readonly factoryContract: Contract;
|
|
29
|
+
readonly ticksFeesReaderContract: Contract;
|
|
30
|
+
private _poolAddress?;
|
|
31
|
+
private _stateRequestCallData?;
|
|
32
|
+
constructor(parentName: string, network: number, dexHelper: IDexHelper, logger: Logger, config: import("./types").DexParams, swapFeeUnits: bigint, token0: Address, token1: Address);
|
|
33
|
+
set poolAddress(address: Address);
|
|
34
|
+
get poolAddress(): Address;
|
|
35
|
+
computePoolAddress(token0: Address, token1: Address, fee: bigint): Address;
|
|
36
|
+
initialize(blockNumber: number, options?: InitializeStateOptions<PoolState>): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* The function is called every time any of the subscribed
|
|
39
|
+
* addresses release log. The function accepts the current
|
|
40
|
+
* state, updates the state according to the log, and returns
|
|
41
|
+
* the updated state.
|
|
42
|
+
* @param state - Current state of event subscriber
|
|
43
|
+
* @param log - Log released by one of the subscribed addresses
|
|
44
|
+
* @returns Updates state of the event subscriber after the log
|
|
45
|
+
*/
|
|
46
|
+
protected processLog(state: DeepReadonly<PoolState>, log: Readonly<Log>, blockHeader: Readonly<BlockHeader>): DeepReadonly<PoolState> | null;
|
|
47
|
+
/**
|
|
48
|
+
* The function generates state using on-chain calls. This
|
|
49
|
+
* function is called to regenerate state if the event based
|
|
50
|
+
* system fails to fetch events and the local state is no
|
|
51
|
+
* more correct.
|
|
52
|
+
* @param blockNumber - Blocknumber for which the state should
|
|
53
|
+
* should be generated
|
|
54
|
+
* @returns state of the event subscriber at blocknumber
|
|
55
|
+
*/
|
|
56
|
+
generateState(blockNumber: number): Promise<Readonly<PoolState>>;
|
|
57
|
+
/**
|
|
58
|
+
* Fetch Pool States
|
|
59
|
+
*/
|
|
60
|
+
private _fetchPoolData;
|
|
61
|
+
private _constructPoolDataCalldata;
|
|
62
|
+
/**
|
|
63
|
+
* Fetch Ticks States
|
|
64
|
+
*/
|
|
65
|
+
private _fetchTicks;
|
|
66
|
+
private _fetchTickInRange;
|
|
67
|
+
private _fetchInitializedTickIndice;
|
|
68
|
+
private _constructTickCalldata;
|
|
69
|
+
private _reduceInitializedTicks;
|
|
70
|
+
private _reduceTicks;
|
|
71
|
+
/**
|
|
72
|
+
* Handle events
|
|
73
|
+
*/
|
|
74
|
+
private _handleSwapEvent;
|
|
75
|
+
private _handleMintEvent;
|
|
76
|
+
private _handleBurnEvent;
|
|
77
|
+
private _handleBurnREvent;
|
|
78
|
+
private _handleFlashEvent;
|
|
79
|
+
private _handleSyncFeeGrowth;
|
|
80
|
+
}
|
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.KyberswapElasticEventPool = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const abi_1 = require("@ethersproject/abi");
|
|
9
|
+
const ethers_1 = require("ethers");
|
|
10
|
+
const ts_essentials_1 = require("ts-essentials");
|
|
11
|
+
const utils_1 = require("../../utils");
|
|
12
|
+
const config_1 = require("../../config");
|
|
13
|
+
const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
|
|
14
|
+
const bigint_constants_1 = require("../../bigint-constants");
|
|
15
|
+
const decoders_1 = require("../../lib/decoders");
|
|
16
|
+
const erc20_json_1 = __importDefault(require("../../abi/erc20.json"));
|
|
17
|
+
const multi_v2_json_1 = __importDefault(require("../../abi/multi-v2.json"));
|
|
18
|
+
const IFactory_json_1 = __importDefault(require("../../abi/kyberswap-elastic/IFactory.json"));
|
|
19
|
+
const IPool_json_1 = __importDefault(require("../../abi/kyberswap-elastic/IPool.json"));
|
|
20
|
+
const TicksFeesReader_json_1 = __importDefault(require("../../abi/kyberswap-elastic/TicksFeesReader.json"));
|
|
21
|
+
const IAntiSnipAttackPositionManager_json_1 = __importDefault(require("../../abi/kyberswap-elastic/IAntiSnipAttackPositionManager.json"));
|
|
22
|
+
const config_2 = require("./config");
|
|
23
|
+
const constants_1 = require("./constants");
|
|
24
|
+
const TickMath_1 = require("./contract-math/TickMath");
|
|
25
|
+
const kyberswap_elastic_math_1 = require("./contract-math/kyberswap-elastic-math");
|
|
26
|
+
const decoders_2 = require("./utils/decoders");
|
|
27
|
+
const errors_1 = require("./errors");
|
|
28
|
+
const constants_2 = require("./constants");
|
|
29
|
+
class KyberswapElasticEventPool extends stateful_event_subscriber_1.StatefulEventSubscriber {
|
|
30
|
+
constructor(parentName, network, dexHelper, logger, config = config_2.KyberswapElasticConfig[parentName][network], swapFeeUnits, token0, token1) {
|
|
31
|
+
super(parentName, `${token0}_${token1}_${swapFeeUnits}`, dexHelper, logger);
|
|
32
|
+
this.parentName = parentName;
|
|
33
|
+
this.network = network;
|
|
34
|
+
this.dexHelper = dexHelper;
|
|
35
|
+
this.logger = logger;
|
|
36
|
+
this.config = config;
|
|
37
|
+
this.swapFeeUnits = swapFeeUnits;
|
|
38
|
+
this.token0 = token0;
|
|
39
|
+
this.token1 = token1;
|
|
40
|
+
this.handlers = {};
|
|
41
|
+
this.erc20Iface = new abi_1.Interface(erc20_json_1.default);
|
|
42
|
+
this.kyberswapElasticIface = new abi_1.Interface(IPool_json_1.default);
|
|
43
|
+
this.positionManagerIface = new abi_1.Interface(IAntiSnipAttackPositionManager_json_1.default);
|
|
44
|
+
this.poolLogDecoder = (log) => this.kyberswapElasticIface.parseLog(log);
|
|
45
|
+
this.pmLogDecoder = (log) => this.positionManagerIface.parseLog(log);
|
|
46
|
+
this.addressesSubscribed = new Array(2);
|
|
47
|
+
this.token0 = token0.toLowerCase();
|
|
48
|
+
this.token1 = token1.toLowerCase();
|
|
49
|
+
// Initialize contract instances
|
|
50
|
+
this.poolContract = new this.dexHelper.web3Provider.eth.Contract(IPool_json_1.default, this.poolAddress);
|
|
51
|
+
this.multicallContract = new this.dexHelper.web3Provider.eth.Contract(multi_v2_json_1.default, this.dexHelper.config.data.multicallV2Address);
|
|
52
|
+
this.factoryContract = new this.dexHelper.web3Provider.eth.Contract(IFactory_json_1.default, config.factory);
|
|
53
|
+
this.ticksFeesReaderContract = new this.dexHelper.web3Provider.eth.Contract(TicksFeesReader_json_1.default, config.ticksFeesReader);
|
|
54
|
+
// Event handlers
|
|
55
|
+
this.handlers['Swap'] = this._handleSwapEvent.bind(this);
|
|
56
|
+
this.handlers['Burn'] = this._handleBurnEvent.bind(this);
|
|
57
|
+
this.handlers['Mint'] = this._handleMintEvent.bind(this);
|
|
58
|
+
this.handlers['BurnRTokens'] = this._handleBurnREvent.bind(this);
|
|
59
|
+
this.handlers['Flash'] = this._handleFlashEvent.bind(this);
|
|
60
|
+
this.handlers['SyncFeeGrowth'] = this._handleSyncFeeGrowth.bind(this);
|
|
61
|
+
}
|
|
62
|
+
set poolAddress(address) {
|
|
63
|
+
this._poolAddress = address.toLowerCase();
|
|
64
|
+
}
|
|
65
|
+
get poolAddress() {
|
|
66
|
+
if (this._poolAddress === undefined) {
|
|
67
|
+
this._poolAddress = this.computePoolAddress(this.token0, this.token1, this.swapFeeUnits);
|
|
68
|
+
}
|
|
69
|
+
return this._poolAddress;
|
|
70
|
+
}
|
|
71
|
+
computePoolAddress(token0, token1, fee) {
|
|
72
|
+
if (token0 > token1)
|
|
73
|
+
[token0, token1] = [token1, token0];
|
|
74
|
+
const encodedKey = ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.defaultAbiCoder.encode(['address', 'address', 'uint24'], [token0, token1, BigInt.asUintN(24, fee)]));
|
|
75
|
+
return ethers_1.ethers.utils.getCreate2Address(this.config.factory, encodedKey, this.config.poolInitHash);
|
|
76
|
+
}
|
|
77
|
+
async initialize(blockNumber, options) {
|
|
78
|
+
await super.initialize(blockNumber, options);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The function is called every time any of the subscribed
|
|
82
|
+
* addresses release log. The function accepts the current
|
|
83
|
+
* state, updates the state according to the log, and returns
|
|
84
|
+
* the updated state.
|
|
85
|
+
* @param state - Current state of event subscriber
|
|
86
|
+
* @param log - Log released by one of the subscribed addresses
|
|
87
|
+
* @returns Updates state of the event subscriber after the log
|
|
88
|
+
*/
|
|
89
|
+
processLog(state, log, blockHeader) {
|
|
90
|
+
try {
|
|
91
|
+
let event;
|
|
92
|
+
switch (log.address) {
|
|
93
|
+
case this.addressesSubscribed[0]:
|
|
94
|
+
event = this.poolLogDecoder(log);
|
|
95
|
+
break;
|
|
96
|
+
case this.addressesSubscribed[1]:
|
|
97
|
+
event = this.pmLogDecoder(log);
|
|
98
|
+
break;
|
|
99
|
+
default:
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
if (event.name in this.handlers) {
|
|
103
|
+
// Because we have observations in array which is mutable by nature, there is a
|
|
104
|
+
// ts compile error: https://stackoverflow.com/questions/53412934/disable-allowing-assigning-readonly-types-to-non-readonly-types
|
|
105
|
+
// And there is no good workaround, so turn off the type checker for this line
|
|
106
|
+
const _state = lodash_1.default.cloneDeep(state);
|
|
107
|
+
try {
|
|
108
|
+
return this.handlers[event.name](event, _state, log, blockHeader);
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
this.logger.error(`${this.parentName}: Pool ${this.poolAddress}, ` +
|
|
112
|
+
`network=${this.dexHelper.config.data.network}: Unexpected ` +
|
|
113
|
+
`error while handling event on blockNumber=${blockHeader.number}, ` +
|
|
114
|
+
`blockHash=${blockHeader.hash} and parentHash=${blockHeader.parentHash} for Kyberswap Elastic, ${JSON.stringify(event)}`, e);
|
|
115
|
+
_state.isValid = false;
|
|
116
|
+
return _state;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
(0, utils_1.catchParseLogError)(e, this.logger);
|
|
122
|
+
}
|
|
123
|
+
return null; // ignore unrecognized event
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* The function generates state using on-chain calls. This
|
|
127
|
+
* function is called to regenerate state if the event based
|
|
128
|
+
* system fails to fetch events and the local state is no
|
|
129
|
+
* more correct.
|
|
130
|
+
* @param blockNumber - Blocknumber for which the state should
|
|
131
|
+
* should be generated
|
|
132
|
+
* @returns state of the event subscriber at blocknumber
|
|
133
|
+
*/
|
|
134
|
+
async generateState(blockNumber) {
|
|
135
|
+
this.addressesSubscribed[0] = this.poolAddress;
|
|
136
|
+
this.addressesSubscribed[1] = this.config.positionManager;
|
|
137
|
+
const [_poolData, _feeTo, _governmentFeeUnits, _balance0, _balance1, _blockTimestamp,] = await this._fetchPoolData(blockNumber);
|
|
138
|
+
const [_initializedTicks, _ticks] = await this._fetchTicks(blockNumber);
|
|
139
|
+
const _tickDistance = constants_1.KS_TICK_DISTANCE[this.swapFeeUnits.toString()];
|
|
140
|
+
const _maxTickLiquidity = bigint_constants_1.BI_MAX_UINT128 / TickMath_1.TickMath.getMaxNumberTicks(_tickDistance);
|
|
141
|
+
return {
|
|
142
|
+
pool: this.poolAddress,
|
|
143
|
+
tickDistance: _tickDistance,
|
|
144
|
+
poolOracle: undefined,
|
|
145
|
+
poolObservation: undefined,
|
|
146
|
+
maxTickLiquidity: _maxTickLiquidity,
|
|
147
|
+
swapFeeUnits: this.swapFeeUnits,
|
|
148
|
+
governmentFeeTo: _feeTo,
|
|
149
|
+
governmentFeeUnits: _governmentFeeUnits,
|
|
150
|
+
poolData: _poolData,
|
|
151
|
+
ticks: _ticks,
|
|
152
|
+
initializedTicks: _initializedTicks,
|
|
153
|
+
reinvestLiquidity: _poolData.reinvestL,
|
|
154
|
+
currentTick: _poolData.currentTick,
|
|
155
|
+
balance0: _balance0,
|
|
156
|
+
balance1: _balance1,
|
|
157
|
+
isValid: !_poolData.locked,
|
|
158
|
+
blockTimestamp: _blockTimestamp,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Fetch Pool States
|
|
163
|
+
*/
|
|
164
|
+
async _fetchPoolData(blockNumber) {
|
|
165
|
+
const _poolStateCalldata = this._constructPoolDataCalldata();
|
|
166
|
+
const _fetchedPoolStates = await this.dexHelper.multiWrapper.tryAggregate(false, _poolStateCalldata, blockNumber, this.dexHelper.multiWrapper.defaultBatchSize, false);
|
|
167
|
+
// Check the poolState call, if failed -> the pool doesn't exist
|
|
168
|
+
(0, ts_essentials_1.assert)(_fetchedPoolStates[0].success, errors_1.ERR_POOL_DOES_NOT_EXIST);
|
|
169
|
+
const [_poolState, _liquidityState, _feeGrowthGlobal, _secondsPerLiquidity, _rTokenSupply, _governmentFeeUnits, _blockTimestamp, _balance0, _balance1,] = [
|
|
170
|
+
_fetchedPoolStates[0].returnData,
|
|
171
|
+
_fetchedPoolStates[1].returnData,
|
|
172
|
+
_fetchedPoolStates[2].returnData,
|
|
173
|
+
_fetchedPoolStates[3].returnData,
|
|
174
|
+
_fetchedPoolStates[4].returnData,
|
|
175
|
+
_fetchedPoolStates[5].returnData,
|
|
176
|
+
_fetchedPoolStates[6].returnData,
|
|
177
|
+
_fetchedPoolStates[7].returnData,
|
|
178
|
+
_fetchedPoolStates[8].returnData,
|
|
179
|
+
];
|
|
180
|
+
const _poolData = {
|
|
181
|
+
sqrtP: BigInt(_poolState.sqrtP),
|
|
182
|
+
nearestCurrentTick: BigInt(_poolState.nearestCurrentTick),
|
|
183
|
+
currentTick: BigInt(_poolState.currentTick),
|
|
184
|
+
baseL: BigInt(_liquidityState.baseL),
|
|
185
|
+
reinvestL: BigInt(_liquidityState.reinvestL),
|
|
186
|
+
reinvestLLast: BigInt(_liquidityState.reinvestLLast),
|
|
187
|
+
feeGrowthGlobal: BigInt(_feeGrowthGlobal),
|
|
188
|
+
secondsPerLiquidityGlobal: BigInt(_secondsPerLiquidity.secondsPerLiquidityGlobal),
|
|
189
|
+
secondsPerLiquidityUpdateTime: BigInt(_secondsPerLiquidity.lastUpdateTime),
|
|
190
|
+
rTokenSupply: BigInt(_rTokenSupply),
|
|
191
|
+
locked: _poolState.locked,
|
|
192
|
+
};
|
|
193
|
+
return [
|
|
194
|
+
_poolData,
|
|
195
|
+
_governmentFeeUnits._feeTo,
|
|
196
|
+
BigInt(_governmentFeeUnits._governmentFeeUnits),
|
|
197
|
+
BigInt(_balance0),
|
|
198
|
+
BigInt(_balance1),
|
|
199
|
+
BigInt(_blockTimestamp),
|
|
200
|
+
];
|
|
201
|
+
}
|
|
202
|
+
_constructPoolDataCalldata() {
|
|
203
|
+
if (!this._stateRequestCallData) {
|
|
204
|
+
this._stateRequestCallData = [
|
|
205
|
+
{
|
|
206
|
+
target: this.poolAddress,
|
|
207
|
+
callData: this.poolContract.methods.getPoolState().encodeABI(),
|
|
208
|
+
decodeFunction: decoders_2.decodePoolState,
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
target: this.poolAddress,
|
|
212
|
+
callData: this.poolContract.methods.getLiquidityState().encodeABI(),
|
|
213
|
+
decodeFunction: decoders_2.decodeLiquidityState,
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
target: this.poolAddress,
|
|
217
|
+
callData: this.poolContract.methods.getFeeGrowthGlobal().encodeABI(),
|
|
218
|
+
decodeFunction: decoders_1.uint256ToBigInt,
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
target: this.poolAddress,
|
|
222
|
+
callData: this.poolContract.methods
|
|
223
|
+
.getSecondsPerLiquidityData()
|
|
224
|
+
.encodeABI(),
|
|
225
|
+
decodeFunction: decoders_2.decodeSecondsPerLiquidity,
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
target: this.poolAddress,
|
|
229
|
+
callData: this.poolContract.methods.totalSupply().encodeABI(),
|
|
230
|
+
decodeFunction: decoders_1.uint256ToBigInt,
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
target: this.config.factory,
|
|
234
|
+
callData: this.factoryContract.methods.feeConfiguration().encodeABI(),
|
|
235
|
+
decodeFunction: decoders_2.decodeFeeConfiguration,
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
target: (0, config_1.generateConfig)(this.network).multicallV2Address,
|
|
239
|
+
callData: this.dexHelper.multiContract.methods
|
|
240
|
+
.getCurrentBlockTimestamp()
|
|
241
|
+
.encodeABI(),
|
|
242
|
+
decodeFunction: decoders_1.uint256ToBigInt,
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
target: this.token0,
|
|
246
|
+
callData: this.erc20Iface.encodeFunctionData('balanceOf', [
|
|
247
|
+
this.poolAddress,
|
|
248
|
+
]),
|
|
249
|
+
decodeFunction: decoders_1.uint256ToBigInt,
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
target: this.token1,
|
|
253
|
+
callData: this.erc20Iface.encodeFunctionData('balanceOf', [
|
|
254
|
+
this.poolAddress,
|
|
255
|
+
]),
|
|
256
|
+
decodeFunction: decoders_1.uint256ToBigInt,
|
|
257
|
+
},
|
|
258
|
+
];
|
|
259
|
+
}
|
|
260
|
+
return this._stateRequestCallData;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Fetch Ticks States
|
|
264
|
+
*/
|
|
265
|
+
async _fetchTicks(blockNumber) {
|
|
266
|
+
let _initializedTicks = {};
|
|
267
|
+
let _ticks = {};
|
|
268
|
+
const _tickIndice = await this._fetchInitializedTickIndice(blockNumber);
|
|
269
|
+
const _tickCallata = this._constructTickCalldata(_tickIndice);
|
|
270
|
+
const _fetchedTickData = await this.dexHelper.multiWrapper.tryAggregate(false, _tickCallata, blockNumber, this.dexHelper.multiWrapper.defaultBatchSize, false);
|
|
271
|
+
const _fetchedInitializedTicks = _fetchedTickData.filter((value, index) => index % 2 == 0);
|
|
272
|
+
const _fetchedTicks = _fetchedTickData.filter((value, index) => index % 2 == 1);
|
|
273
|
+
this._reduceInitializedTicks(_tickIndice, _initializedTicks, _fetchedInitializedTicks.map(value => value.returnData));
|
|
274
|
+
this._reduceTicks(_tickIndice, _ticks, _fetchedTicks.map(value => value.returnData));
|
|
275
|
+
return [_initializedTicks, _ticks];
|
|
276
|
+
}
|
|
277
|
+
async _fetchTickInRange(poolAddress, startTick, length, blockNumber) {
|
|
278
|
+
const callRequest = {
|
|
279
|
+
funcName: 'getTicksInRange',
|
|
280
|
+
params: [poolAddress, startTick, length],
|
|
281
|
+
};
|
|
282
|
+
return this.ticksFeesReaderContract.methods[callRequest.funcName](...callRequest.params).call({}, blockNumber || 'latest');
|
|
283
|
+
}
|
|
284
|
+
async _fetchInitializedTickIndice(blockNumber) {
|
|
285
|
+
let allTickIndice = [];
|
|
286
|
+
let startTick = -887272;
|
|
287
|
+
let size = 2000; // The highest number of ticks in a pool (include ks elastic, uniswapv3 is about 1700 ticks)
|
|
288
|
+
let fetchedDone = false;
|
|
289
|
+
while (!fetchedDone) {
|
|
290
|
+
let tickInRage = await this._fetchTickInRange(this.poolAddress, startTick, size, blockNumber);
|
|
291
|
+
if (tickInRage.length < size || tickInRage[size - 1] == 0) {
|
|
292
|
+
fetchedDone = true;
|
|
293
|
+
}
|
|
294
|
+
allTickIndice = lodash_1.default.concat(allTickIndice, tickInRage);
|
|
295
|
+
}
|
|
296
|
+
let index = allTickIndice.length - 1;
|
|
297
|
+
while (allTickIndice[index] == 0) {
|
|
298
|
+
index--;
|
|
299
|
+
}
|
|
300
|
+
return allTickIndice.slice(0, index);
|
|
301
|
+
}
|
|
302
|
+
_constructTickCalldata(_tickIndice) {
|
|
303
|
+
const _tickCallData = [];
|
|
304
|
+
_tickIndice.push(Number(TickMath_1.TickMath.MAX_TICK)); // since TicksFeesReader does not return index of MAX_TICK
|
|
305
|
+
for (const tickIndex of _tickIndice) {
|
|
306
|
+
_tickCallData.push({
|
|
307
|
+
target: this.poolAddress,
|
|
308
|
+
callData: this.kyberswapElasticIface.encodeFunctionData('initializedTicks', [tickIndex]),
|
|
309
|
+
decodeFunction: decoders_2.decodeInitializedTicks,
|
|
310
|
+
}, {
|
|
311
|
+
target: this.poolAddress,
|
|
312
|
+
callData: this.kyberswapElasticIface.encodeFunctionData('ticks', [
|
|
313
|
+
tickIndex,
|
|
314
|
+
]),
|
|
315
|
+
decodeFunction: decoders_2.decodeTicks,
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
return _tickCallData;
|
|
319
|
+
}
|
|
320
|
+
_reduceInitializedTicks(tickIndice, initializedTicks, initializedTicksToReduce) {
|
|
321
|
+
return initializedTicksToReduce.reduce((acc, curr, index) => {
|
|
322
|
+
const value = curr;
|
|
323
|
+
acc[tickIndice[index]] = {
|
|
324
|
+
previous: BigInt(value.previous),
|
|
325
|
+
next: BigInt(value.next),
|
|
326
|
+
};
|
|
327
|
+
return acc;
|
|
328
|
+
}, initializedTicks);
|
|
329
|
+
}
|
|
330
|
+
_reduceTicks(tickIndice, ticks, ticksToReduce) {
|
|
331
|
+
return ticksToReduce.reduce((acc, curr, index) => {
|
|
332
|
+
const value = curr;
|
|
333
|
+
acc[tickIndice[index]] = {
|
|
334
|
+
liquidityGross: BigInt(value.liquidityGross),
|
|
335
|
+
liquidityNet: BigInt(value.liquidityNet),
|
|
336
|
+
feeGrowthOutside: BigInt(value.feeGrowthOutside),
|
|
337
|
+
secondsPerLiquidityOutside: BigInt(value.secondsPerLiquidityOutside),
|
|
338
|
+
};
|
|
339
|
+
return acc;
|
|
340
|
+
}, ticks);
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Handle events
|
|
344
|
+
*/
|
|
345
|
+
_handleSwapEvent(event, pool, log, blockHeader) {
|
|
346
|
+
const sqrtP = (0, utils_1.bigIntify)(event.args.sqrtP);
|
|
347
|
+
const deltaQty0 = (0, utils_1.bigIntify)(event.args.deltaQty0);
|
|
348
|
+
const deltaQty1 = (0, utils_1.bigIntify)(event.args.deltaQty1);
|
|
349
|
+
const newCurrentTick = (0, utils_1.bigIntify)(event.args.currentTick);
|
|
350
|
+
const newLiquidity = (0, utils_1.bigIntify)(event.args.liquidity);
|
|
351
|
+
pool.blockTimestamp = (0, utils_1.bigIntify)(blockHeader.timestamp);
|
|
352
|
+
if (deltaQty0 <= 0n && deltaQty1 <= 0n) {
|
|
353
|
+
this.logger.error(`${this.parentName}: amount0 <= 0n && amount1 <= 0n for ` +
|
|
354
|
+
`${this.poolAddress} and ${blockHeader.number}. Check why it happened`);
|
|
355
|
+
pool.isValid = false;
|
|
356
|
+
return pool;
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
const isToken0 = deltaQty0 > 0n;
|
|
360
|
+
let [stateUsingExactInput] = kyberswap_elastic_math_1.ksElasticMath.swapFromEvent(pool, isToken0 ? deltaQty0 : deltaQty1, isToken0 ? deltaQty1 : deltaQty0, sqrtP, newCurrentTick, newLiquidity, isToken0);
|
|
361
|
+
let [stateUsingExactOutput] = kyberswap_elastic_math_1.ksElasticMath.swapFromEvent(pool, isToken0 ? deltaQty1 : deltaQty0, isToken0 ? deltaQty0 : deltaQty1, sqrtP, newCurrentTick, newLiquidity, !isToken0);
|
|
362
|
+
pool =
|
|
363
|
+
stateUsingExactInput.poolData.sqrtP == sqrtP
|
|
364
|
+
? stateUsingExactInput
|
|
365
|
+
: stateUsingExactOutput;
|
|
366
|
+
if (isToken0) {
|
|
367
|
+
if (deltaQty1 < 0n) {
|
|
368
|
+
pool.balance1 -= BigInt.asUintN(256, -deltaQty1);
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
this.logger.error(`In swapEvent for pool ${pool.pool} received incorrect values ${isToken0} and ${deltaQty1}`);
|
|
372
|
+
pool.isValid = false;
|
|
373
|
+
}
|
|
374
|
+
// This is not correct fully, because pool may get more tokens then it needs, but
|
|
375
|
+
// it is not accounted in internal state, it should be good enough
|
|
376
|
+
pool.balance0 += BigInt.asUintN(256, deltaQty0);
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
if (deltaQty0 < 0n) {
|
|
380
|
+
pool.balance0 -= BigInt.asUintN(256, -deltaQty0);
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
this.logger.error(`In swapEvent for pool ${pool.pool} received incorrect values ${isToken0} and ${deltaQty0}`);
|
|
384
|
+
pool.isValid = false;
|
|
385
|
+
}
|
|
386
|
+
pool.balance1 += BigInt.asUintN(256, deltaQty1);
|
|
387
|
+
}
|
|
388
|
+
return pool;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
_handleMintEvent(event, pool, log, blockHeader) {
|
|
392
|
+
const qty = (0, utils_1.bigIntify)(event.args.qty);
|
|
393
|
+
const tickLower = (0, utils_1.bigIntify)(event.args.tickLower);
|
|
394
|
+
const tickUpper = (0, utils_1.bigIntify)(event.args.tickUpper);
|
|
395
|
+
const qty0 = (0, utils_1.bigIntify)(event.args.qty0);
|
|
396
|
+
const qty1 = (0, utils_1.bigIntify)(event.args.qty1);
|
|
397
|
+
pool.blockTimestamp = (0, utils_1.bigIntify)(blockHeader.timestamp);
|
|
398
|
+
kyberswap_elastic_math_1.ksElasticMath.modifyPosition(pool, {
|
|
399
|
+
tickLower,
|
|
400
|
+
tickUpper,
|
|
401
|
+
liquidityDelta: qty,
|
|
402
|
+
});
|
|
403
|
+
pool.balance0 += qty0;
|
|
404
|
+
pool.balance1 += qty1;
|
|
405
|
+
return pool;
|
|
406
|
+
}
|
|
407
|
+
_handleBurnEvent(event, pool, log, blockHeader) {
|
|
408
|
+
const qty = (0, utils_1.bigIntify)(event.args.qty);
|
|
409
|
+
const qty0 = (0, utils_1.bigIntify)(event.args.qty0);
|
|
410
|
+
const qty1 = (0, utils_1.bigIntify)(event.args.qty1);
|
|
411
|
+
const tickLower = (0, utils_1.bigIntify)(event.args.tickLower);
|
|
412
|
+
const tickUpper = (0, utils_1.bigIntify)(event.args.tickUpper);
|
|
413
|
+
pool.blockTimestamp = (0, utils_1.bigIntify)(blockHeader.timestamp);
|
|
414
|
+
kyberswap_elastic_math_1.ksElasticMath.modifyPosition(pool, {
|
|
415
|
+
tickLower,
|
|
416
|
+
tickUpper,
|
|
417
|
+
liquidityDelta: -BigInt.asIntN(128, BigInt.asIntN(256, qty)),
|
|
418
|
+
});
|
|
419
|
+
pool.balance0 -= qty0;
|
|
420
|
+
pool.balance1 -= qty1;
|
|
421
|
+
return pool;
|
|
422
|
+
}
|
|
423
|
+
_handleBurnREvent(event, pool, log, blockHeader) {
|
|
424
|
+
const qty = (0, utils_1.bigIntify)(event.args.qty);
|
|
425
|
+
const qty0 = (0, utils_1.bigIntify)(event.args.qty0);
|
|
426
|
+
const qty1 = (0, utils_1.bigIntify)(event.args.qty1);
|
|
427
|
+
pool.blockTimestamp = (0, utils_1.bigIntify)(blockHeader.timestamp);
|
|
428
|
+
kyberswap_elastic_math_1.ksElasticMath.burnRToken(pool, {
|
|
429
|
+
qty: qty,
|
|
430
|
+
isLogicalBurn: qty0 == 0n && qty1 == 0n,
|
|
431
|
+
});
|
|
432
|
+
pool.balance0 -= qty0;
|
|
433
|
+
pool.balance1 -= qty1;
|
|
434
|
+
return pool;
|
|
435
|
+
}
|
|
436
|
+
_handleFlashEvent(event, pool, log, blockHeader) {
|
|
437
|
+
const qty0 = (0, utils_1.bigIntify)(event.args.qty0);
|
|
438
|
+
const qty1 = (0, utils_1.bigIntify)(event.args.qty1);
|
|
439
|
+
const paid0 = (0, utils_1.bigIntify)(event.args.paid0);
|
|
440
|
+
const paid1 = (0, utils_1.bigIntify)(event.args.paid1);
|
|
441
|
+
pool.blockTimestamp = (0, utils_1.bigIntify)(blockHeader.timestamp);
|
|
442
|
+
if (ethers_1.ethers.utils.getAddress(pool.governmentFeeTo) ==
|
|
443
|
+
ethers_1.ethers.constants.AddressZero) {
|
|
444
|
+
pool.balance0 += (qty0 * pool.swapFeeUnits) / constants_2.FEE_UNITS;
|
|
445
|
+
pool.balance1 += (qty1 * pool.swapFeeUnits) / constants_2.FEE_UNITS;
|
|
446
|
+
}
|
|
447
|
+
return pool;
|
|
448
|
+
}
|
|
449
|
+
_handleSyncFeeGrowth(event, pool, log, blockHeader) {
|
|
450
|
+
const tokenId = (0, utils_1.bigIntify)(event.args.tokenId);
|
|
451
|
+
const additionalRTokenOwed = (0, utils_1.bigIntify)(event.args.additionalRTokenOwed);
|
|
452
|
+
pool.blockTimestamp = (0, utils_1.bigIntify)(blockHeader.timestamp);
|
|
453
|
+
kyberswap_elastic_math_1.ksElasticMath.tweakPosZeroLiq(pool);
|
|
454
|
+
return pool;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
exports.KyberswapElasticEventPool = KyberswapElasticEventPool;
|
|
458
|
+
//# sourceMappingURL=kyberswap-elastic-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kyberswap-elastic-pool.js","sourceRoot":"","sources":["../../../src/dex/kyberswap-elastic/kyberswap-elastic-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Interface } from '@ethersproject/abi';
|
|
2
|
+
import { Token, Address, ExchangePrices, PoolPrices, AdapterExchangeParam, SimpleExchangeParam, PoolLiquidity, Logger } from '../../types';
|
|
3
|
+
import { SwapSide, Network } from '../../constants';
|
|
4
|
+
import { IDex } from '../../dex/idex';
|
|
5
|
+
import { IDexHelper } from '../../dex-helper/idex-helper';
|
|
6
|
+
import { SimpleExchange } from '../simple-exchange';
|
|
7
|
+
import { KyberswapElasticData, DexParams } from './types';
|
|
8
|
+
import { KyberswapElasticEventPool } from './kyberswap-elastic-pool';
|
|
9
|
+
export declare class KyberswapElastic extends SimpleExchange implements IDex<KyberswapElasticData> {
|
|
10
|
+
readonly network: Network;
|
|
11
|
+
readonly dexKey: string;
|
|
12
|
+
readonly dexHelper: IDexHelper;
|
|
13
|
+
protected adapters: import("../../types").AdapterMappings;
|
|
14
|
+
protected config: DexParams;
|
|
15
|
+
static dexKeysWithNetwork: {
|
|
16
|
+
key: string;
|
|
17
|
+
networks: Network[];
|
|
18
|
+
}[];
|
|
19
|
+
logger: Logger;
|
|
20
|
+
readonly eventPools: Record<string, KyberswapElasticEventPool | null>;
|
|
21
|
+
readonly hasConstantPriceLargeAmounts = false;
|
|
22
|
+
readonly needWrapNative = true;
|
|
23
|
+
readonly isFeeOnTransferSupported = false;
|
|
24
|
+
readonly routerIface: Interface;
|
|
25
|
+
readonly quoterIface: Interface;
|
|
26
|
+
private _intervalTask?;
|
|
27
|
+
private notExistingPoolSetKey;
|
|
28
|
+
private multicall;
|
|
29
|
+
constructor(network: Network, dexKey: string, dexHelper: IDexHelper, adapters?: import("../../types").AdapterMappings, config?: DexParams);
|
|
30
|
+
get supportedFees(): bigint[];
|
|
31
|
+
initializePricing(blockNumber: number): Promise<void>;
|
|
32
|
+
getAdapters(side: SwapSide): {
|
|
33
|
+
name: string;
|
|
34
|
+
index: number;
|
|
35
|
+
}[] | null;
|
|
36
|
+
addMasterPool(poolKey: string, blockNumber: number): Promise<boolean>;
|
|
37
|
+
getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
|
|
38
|
+
getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<null | ExchangePrices<KyberswapElasticData>>;
|
|
39
|
+
getCalldataGasCost(poolPrices: PoolPrices<KyberswapElasticData>): number | number[];
|
|
40
|
+
_getPoolIdentifier(srcAddress: Address, destAddress: Address, swapFeeUnits: bigint): string;
|
|
41
|
+
getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: KyberswapElasticData, side: SwapSide): AdapterExchangeParam;
|
|
42
|
+
getSimpleParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: KyberswapElasticData, side: SwapSide): Promise<SimpleExchangeParam>;
|
|
43
|
+
getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
|
|
44
|
+
private _querySubgraph;
|
|
45
|
+
releaseResources(): void;
|
|
46
|
+
private _sortTokens;
|
|
47
|
+
private _getPool;
|
|
48
|
+
private _getPricingFromRpc;
|
|
49
|
+
private _toLowerForAllConfigAddresses;
|
|
50
|
+
private _getLoweredAddresses;
|
|
51
|
+
private _encodePath;
|
|
52
|
+
private _getOutputs;
|
|
53
|
+
}
|