@paraswap/dex-lib 2.42.22 → 2.42.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/build/abi/hashflow/HashflowRouter.abi.json +816 -246
  2. package/build/abi/kyberswap-elastic/IAntiSnipAttackPositionManager.json +1276 -0
  3. package/build/abi/kyberswap-elastic/IFactory.json +550 -0
  4. package/build/abi/kyberswap-elastic/IPool.json +1042 -0
  5. package/build/abi/kyberswap-elastic/IQuoterV2.json +226 -0
  6. package/build/abi/kyberswap-elastic/IRouter.json +239 -0
  7. package/build/abi/kyberswap-elastic/TicksFeesReader.json +142 -0
  8. package/build/abi/wombat/asset.json +769 -0
  9. package/build/abi/wombat/bmw.json +1247 -0
  10. package/build/abi/wombat/pool.json +1364 -0
  11. package/build/config.js +14 -14
  12. package/build/dex/baseswap-v3/baseswap-v3-factory.d.ts +26 -0
  13. package/build/dex/baseswap-v3/baseswap-v3-factory.js +44 -0
  14. package/build/dex/baseswap-v3/baseswap-v3-factory.js.map +1 -0
  15. package/build/dex/baseswap-v3/baseswap-v3-pool.d.ts +46 -0
  16. package/build/dex/baseswap-v3/baseswap-v3-pool.js +312 -0
  17. package/build/dex/baseswap-v3/baseswap-v3-pool.js.map +1 -0
  18. package/build/dex/baseswap-v3/baseswap-v3.d.ts +71 -0
  19. package/build/dex/baseswap-v3/baseswap-v3.js +752 -0
  20. package/build/dex/baseswap-v3/baseswap-v3.js.map +1 -0
  21. package/build/dex/baseswap-v3/config.d.ts +9 -0
  22. package/build/dex/baseswap-v3/config.js +48 -0
  23. package/build/dex/baseswap-v3/config.js.map +1 -0
  24. package/build/dex/baseswap-v3/constants.d.ts +28 -0
  25. package/build/dex/baseswap-v3/constants.js +35 -0
  26. package/build/dex/baseswap-v3/constants.js.map +1 -0
  27. package/build/dex/baseswap-v3/contract-math/BitMath.d.ts +4 -0
  28. package/build/dex/baseswap-v3/contract-math/BitMath.js +93 -0
  29. package/build/dex/baseswap-v3/contract-math/BitMath.js.map +1 -0
  30. package/build/dex/baseswap-v3/contract-math/FixedPoint128.d.ts +3 -0
  31. package/build/dex/baseswap-v3/contract-math/FixedPoint128.js +8 -0
  32. package/build/dex/baseswap-v3/contract-math/FixedPoint128.js.map +1 -0
  33. package/build/dex/baseswap-v3/contract-math/FixedPoint96.d.ts +4 -0
  34. package/build/dex/baseswap-v3/contract-math/FixedPoint96.js +9 -0
  35. package/build/dex/baseswap-v3/contract-math/FixedPoint96.js.map +1 -0
  36. package/build/dex/baseswap-v3/contract-math/FullMath.d.ts +4 -0
  37. package/build/dex/baseswap-v3/contract-math/FullMath.js +19 -0
  38. package/build/dex/baseswap-v3/contract-math/FullMath.js.map +1 -0
  39. package/build/dex/baseswap-v3/contract-math/LiquidityMath.d.ts +3 -0
  40. package/build/dex/baseswap-v3/contract-math/LiquidityMath.js +22 -0
  41. package/build/dex/baseswap-v3/contract-math/LiquidityMath.js.map +1 -0
  42. package/build/dex/baseswap-v3/contract-math/Oracle.d.ts +10 -0
  43. package/build/dex/baseswap-v3/contract-math/Oracle.js +133 -0
  44. package/build/dex/baseswap-v3/contract-math/Oracle.js.map +1 -0
  45. package/build/dex/baseswap-v3/contract-math/SqrtPriceMath.d.ts +10 -0
  46. package/build/dex/baseswap-v3/contract-math/SqrtPriceMath.js +91 -0
  47. package/build/dex/baseswap-v3/contract-math/SqrtPriceMath.js.map +1 -0
  48. package/build/dex/baseswap-v3/contract-math/SwapMath.d.ts +8 -0
  49. package/build/dex/baseswap-v3/contract-math/SwapMath.js +70 -0
  50. package/build/dex/baseswap-v3/contract-math/SwapMath.js.map +1 -0
  51. package/build/dex/baseswap-v3/contract-math/Tick.d.ts +7 -0
  52. package/build/dex/baseswap-v3/contract-math/Tick.js +45 -0
  53. package/build/dex/baseswap-v3/contract-math/Tick.js.map +1 -0
  54. package/build/dex/baseswap-v3/contract-math/TickBitMap.d.ts +7 -0
  55. package/build/dex/baseswap-v3/contract-math/TickBitMap.js +84 -0
  56. package/build/dex/baseswap-v3/contract-math/TickBitMap.js.map +1 -0
  57. package/build/dex/baseswap-v3/contract-math/TickMath.d.ts +8 -0
  58. package/build/dex/baseswap-v3/contract-math/TickMath.js +162 -0
  59. package/build/dex/baseswap-v3/contract-math/TickMath.js.map +1 -0
  60. package/build/dex/baseswap-v3/contract-math/UnsafeMath.d.ts +3 -0
  61. package/build/dex/baseswap-v3/contract-math/UnsafeMath.js +10 -0
  62. package/build/dex/baseswap-v3/contract-math/UnsafeMath.js.map +1 -0
  63. package/build/dex/baseswap-v3/contract-math/uniswap-v3-math.d.ts +37 -0
  64. package/build/dex/baseswap-v3/contract-math/uniswap-v3-math.js +393 -0
  65. package/build/dex/baseswap-v3/contract-math/uniswap-v3-math.js.map +1 -0
  66. package/build/dex/baseswap-v3/contract-math/utils.d.ts +7 -0
  67. package/build/dex/baseswap-v3/contract-math/utils.js +42 -0
  68. package/build/dex/baseswap-v3/contract-math/utils.js.map +1 -0
  69. package/build/dex/baseswap-v3/types.d.ts +164 -0
  70. package/build/dex/baseswap-v3/types.js +9 -0
  71. package/build/dex/baseswap-v3/types.js.map +1 -0
  72. package/build/dex/baseswap-v3/utils.d.ts +6 -0
  73. package/build/dex/baseswap-v3/utils.js +65 -0
  74. package/build/dex/baseswap-v3/utils.js.map +1 -0
  75. package/build/dex/hashflow/config.d.ts +1 -1
  76. package/build/dex/hashflow/config.js +6 -6
  77. package/build/dex/hashflow/config.js.map +1 -1
  78. package/build/dex/hashflow/hashflow.d.ts +7 -7
  79. package/build/dex/hashflow/hashflow.js +47 -54
  80. package/build/dex/hashflow/hashflow.js.map +1 -1
  81. package/build/dex/hashflow/rate-fetcher.d.ts +1 -1
  82. package/build/dex/hashflow/rate-fetcher.js +2 -4
  83. package/build/dex/hashflow/rate-fetcher.js.map +1 -1
  84. package/build/dex/hashflow/types.d.ts +5 -6
  85. package/build/dex/hashflow/types.js.map +1 -1
  86. package/build/dex/hashflow/validators.js +11 -4
  87. package/build/dex/hashflow/validators.js.map +1 -1
  88. package/build/dex/hello/config.d.ts +4 -0
  89. package/build/dex/hello/config.js +15 -0
  90. package/build/dex/hello/config.js.map +1 -0
  91. package/build/dex/hello/hello-pool.d.ts +39 -0
  92. package/build/dex/hello/hello-pool.js +64 -0
  93. package/build/dex/hello/hello-pool.js.map +1 -0
  94. package/build/dex/hello/hello.d.ts +37 -0
  95. package/build/dex/hello/hello.js +126 -0
  96. package/build/dex/hello/hello.js.map +1 -0
  97. package/build/dex/hello/types.d.ts +6 -0
  98. package/build/dex/hello/types.js +3 -0
  99. package/build/dex/hello/types.js.map +1 -0
  100. package/build/dex/kyberswap-elastic/config.d.ts +4 -0
  101. package/build/dex/kyberswap-elastic/config.js +80 -0
  102. package/build/dex/kyberswap-elastic/config.js.map +1 -0
  103. package/build/dex/kyberswap-elastic/constants.d.ts +17 -0
  104. package/build/dex/kyberswap-elastic/constants.js +42 -0
  105. package/build/dex/kyberswap-elastic/constants.js.map +1 -0
  106. package/build/dex/kyberswap-elastic/contract-math/FixedPoint96.d.ts +4 -0
  107. package/build/dex/kyberswap-elastic/contract-math/FixedPoint96.js +9 -0
  108. package/build/dex/kyberswap-elastic/contract-math/FixedPoint96.js.map +1 -0
  109. package/build/dex/kyberswap-elastic/contract-math/FullMath.d.ts +5 -0
  110. package/build/dex/kyberswap-elastic/contract-math/FullMath.js +22 -0
  111. package/build/dex/kyberswap-elastic/contract-math/FullMath.js.map +1 -0
  112. package/build/dex/kyberswap-elastic/contract-math/LiqDeltaMath.d.ts +3 -0
  113. package/build/dex/kyberswap-elastic/contract-math/LiqDeltaMath.js +12 -0
  114. package/build/dex/kyberswap-elastic/contract-math/LiqDeltaMath.js.map +1 -0
  115. package/build/dex/kyberswap-elastic/contract-math/LiquidityMath.d.ts +3 -0
  116. package/build/dex/kyberswap-elastic/contract-math/LiquidityMath.js +22 -0
  117. package/build/dex/kyberswap-elastic/contract-math/LiquidityMath.js.map +1 -0
  118. package/build/dex/kyberswap-elastic/contract-math/QtyDeltaMath.d.ts +5 -0
  119. package/build/dex/kyberswap-elastic/contract-math/QtyDeltaMath.js +25 -0
  120. package/build/dex/kyberswap-elastic/contract-math/QtyDeltaMath.js.map +1 -0
  121. package/build/dex/kyberswap-elastic/contract-math/QuadMath.d.ts +4 -0
  122. package/build/dex/kyberswap-elastic/contract-math/QuadMath.js +27 -0
  123. package/build/dex/kyberswap-elastic/contract-math/QuadMath.js.map +1 -0
  124. package/build/dex/kyberswap-elastic/contract-math/ReinvestmentMath.d.ts +3 -0
  125. package/build/dex/kyberswap-elastic/contract-math/ReinvestmentMath.js +14 -0
  126. package/build/dex/kyberswap-elastic/contract-math/ReinvestmentMath.js.map +1 -0
  127. package/build/dex/kyberswap-elastic/contract-math/SafeCast.d.ts +8 -0
  128. package/build/dex/kyberswap-elastic/contract-math/SafeCast.js +30 -0
  129. package/build/dex/kyberswap-elastic/contract-math/SafeCast.js.map +1 -0
  130. package/build/dex/kyberswap-elastic/contract-math/SqrtPriceMath.d.ts +10 -0
  131. package/build/dex/kyberswap-elastic/contract-math/SqrtPriceMath.js +91 -0
  132. package/build/dex/kyberswap-elastic/contract-math/SqrtPriceMath.js.map +1 -0
  133. package/build/dex/kyberswap-elastic/contract-math/SwapMath.d.ts +13 -0
  134. package/build/dex/kyberswap-elastic/contract-math/SwapMath.js +188 -0
  135. package/build/dex/kyberswap-elastic/contract-math/SwapMath.js.map +1 -0
  136. package/build/dex/kyberswap-elastic/contract-math/TickLinkedList.d.ts +6 -0
  137. package/build/dex/kyberswap-elastic/contract-math/TickLinkedList.js +41 -0
  138. package/build/dex/kyberswap-elastic/contract-math/TickLinkedList.js.map +1 -0
  139. package/build/dex/kyberswap-elastic/contract-math/TickMath.d.ts +9 -0
  140. package/build/dex/kyberswap-elastic/contract-math/TickMath.js +165 -0
  141. package/build/dex/kyberswap-elastic/contract-math/TickMath.js.map +1 -0
  142. package/build/dex/kyberswap-elastic/contract-math/UnsafeMath.d.ts +3 -0
  143. package/build/dex/kyberswap-elastic/contract-math/UnsafeMath.js +10 -0
  144. package/build/dex/kyberswap-elastic/contract-math/UnsafeMath.js.map +1 -0
  145. package/build/dex/kyberswap-elastic/contract-math/kyberswap-elastic-math.d.ts +28 -0
  146. package/build/dex/kyberswap-elastic/contract-math/kyberswap-elastic-math.js +502 -0
  147. package/build/dex/kyberswap-elastic/contract-math/kyberswap-elastic-math.js.map +1 -0
  148. package/build/dex/kyberswap-elastic/contract-math/utils.d.ts +3 -0
  149. package/build/dex/kyberswap-elastic/contract-math/utils.js +16 -0
  150. package/build/dex/kyberswap-elastic/contract-math/utils.js.map +1 -0
  151. package/build/dex/kyberswap-elastic/errors.d.ts +2 -0
  152. package/build/dex/kyberswap-elastic/errors.js +6 -0
  153. package/build/dex/kyberswap-elastic/errors.js.map +1 -0
  154. package/build/dex/kyberswap-elastic/kyberswap-elastic-pool.d.ts +80 -0
  155. package/build/dex/kyberswap-elastic/kyberswap-elastic-pool.js +458 -0
  156. package/build/dex/kyberswap-elastic/kyberswap-elastic-pool.js.map +1 -0
  157. package/build/dex/kyberswap-elastic/kyberswap-elastic.d.ts +53 -0
  158. package/build/dex/kyberswap-elastic/kyberswap-elastic.js +610 -0
  159. package/build/dex/kyberswap-elastic/kyberswap-elastic.js.map +1 -0
  160. package/build/dex/kyberswap-elastic/types.d.ts +134 -0
  161. package/build/dex/kyberswap-elastic/types.js +9 -0
  162. package/build/dex/kyberswap-elastic/types.js.map +1 -0
  163. package/build/dex/kyberswap-elastic/utils/decoders.d.ts +9 -0
  164. package/build/dex/kyberswap-elastic/utils/decoders.js +78 -0
  165. package/build/dex/kyberswap-elastic/utils/decoders.js.map +1 -0
  166. package/build/dex/morphex/config.d.ts +11 -0
  167. package/build/dex/morphex/config.js +43 -0
  168. package/build/dex/morphex/config.js.map +1 -0
  169. package/build/dex/morphex/morphex.d.ts +25 -0
  170. package/build/dex/morphex/morphex.js +19 -0
  171. package/build/dex/morphex/morphex.js.map +1 -0
  172. package/build/dex/my-test-dex/config.d.ts +4 -0
  173. package/build/dex/my-test-dex/config.js +15 -0
  174. package/build/dex/my-test-dex/config.js.map +1 -0
  175. package/build/dex/my-test-dex/my-test-dex-pool.d.ts +39 -0
  176. package/build/dex/my-test-dex/my-test-dex-pool.js +64 -0
  177. package/build/dex/my-test-dex/my-test-dex-pool.js.map +1 -0
  178. package/build/dex/my-test-dex/my-test-dex.d.ts +37 -0
  179. package/build/dex/my-test-dex/my-test-dex.js +126 -0
  180. package/build/dex/my-test-dex/my-test-dex.js.map +1 -0
  181. package/build/dex/my-test-dex/types.d.ts +6 -0
  182. package/build/dex/my-test-dex/types.js +3 -0
  183. package/build/dex/my-test-dex/types.js.map +1 -0
  184. package/build/dex/solidly/forks-override/fvm.d.ts +20 -0
  185. package/build/dex/solidly/forks-override/fvm.js +42 -0
  186. package/build/dex/solidly/forks-override/fvm.js.map +1 -0
  187. package/build/dex/wombat/config.d.ts +4 -0
  188. package/build/dex/wombat/config.js +99 -0
  189. package/build/dex/wombat/config.js.map +1 -0
  190. package/build/dex/wombat/types.d.ts +33 -0
  191. package/build/dex/wombat/types.js +3 -0
  192. package/build/dex/wombat/types.js.map +1 -0
  193. package/build/dex/wombat/utils.d.ts +9 -0
  194. package/build/dex/wombat/utils.js +66 -0
  195. package/build/dex/wombat/utils.js.map +1 -0
  196. package/build/dex/wombat/wombat-bmw.d.ts +40 -0
  197. package/build/dex/wombat/wombat-bmw.js +147 -0
  198. package/build/dex/wombat/wombat-bmw.js.map +1 -0
  199. package/build/dex/wombat/wombat-pool.d.ts +22 -0
  200. package/build/dex/wombat/wombat-pool.js +161 -0
  201. package/build/dex/wombat/wombat-pool.js.map +1 -0
  202. package/build/dex/wombat/wombat-quoter.d.ts +16 -0
  203. package/build/dex/wombat/wombat-quoter.js +176 -0
  204. package/build/dex/wombat/wombat-quoter.js.map +1 -0
  205. package/build/dex/wombat/wombat.d.ts +55 -0
  206. package/build/dex/wombat/wombat.js +290 -0
  207. package/build/dex/wombat/wombat.js.map +1 -0
  208. package/build/lib/fetcher/fetcher.d.ts +1 -1
  209. package/build/lib/fetcher/fetcher.js.map +1 -1
  210. package/package.json +2 -2
  211. package/src/abi/hashflow/HashflowRouter.abi.json +816 -246
  212. package/src/config.ts +14 -14
  213. package/src/dex/hashflow/config.ts +8 -8
  214. package/src/dex/hashflow/hashflow-e2e.test.ts +4 -4
  215. package/src/dex/hashflow/hashflow-integration.test.ts +9 -6
  216. package/src/dex/hashflow/hashflow.ts +70 -87
  217. package/src/dex/hashflow/rate-fetcher.ts +6 -8
  218. package/src/dex/hashflow/types.ts +5 -6
  219. package/src/dex/hashflow/validators.ts +11 -4
  220. package/src/lib/fetcher/fetcher.ts +2 -2
  221. package/tests/constants-e2e.ts +1 -1
  222. package/tests/tenderly-simulation.ts +5 -2
  223. package/.vscode/launch.json +0 -39
  224. package/.vscode/settings.json +0 -2
  225. package/.vscode/tasks.json +0 -15
@@ -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
+ }