@paraswap/dex-lib 2.12.12-rfqtests.0 → 2.12.12

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 (102) hide show
  1. package/build/abi/augustus.json +375 -0
  2. package/build/abi/woo-fi-v2/IntegrationHelper.abi.json +116 -0
  3. package/build/abi/woo-fi-v2/WooOracleV2.abi.json +358 -0
  4. package/build/abi/woo-fi-v2/WooPPV2.abi.json +580 -0
  5. package/build/config.js +3 -3
  6. package/build/dex/aave-v3/tokens/arbitrum.json +20 -20
  7. package/build/dex/aave-v3/tokens/avalanche.json +44 -20
  8. package/build/dex/aave-v3/tokens/fantom.json +30 -30
  9. package/build/dex/aave-v3/tokens/optimism.json +18 -18
  10. package/build/dex/aave-v3/tokens/polygon.json +60 -42
  11. package/build/dex/generic-rfq/validators.d.ts +1 -1
  12. package/build/dex/generic-rfq/validators.js +26 -36
  13. package/build/dex/generic-rfq/validators.js.map +1 -1
  14. package/build/dex/hashflow/rate-fetcher.d.ts +14 -0
  15. package/build/dex/hashflow/rate-fetcher.js +37 -0
  16. package/build/dex/hashflow/rate-fetcher.js.map +1 -0
  17. package/build/dex/hashflow/validators.d.ts +3 -0
  18. package/build/dex/hashflow/validators.js +12 -0
  19. package/build/dex/hashflow/validators.js.map +1 -0
  20. package/build/dex/{test-aave-v3 → test-dex}/config.d.ts +1 -1
  21. package/build/dex/{test-aave-v3 → test-dex}/config.js +3 -3
  22. package/build/dex/test-dex/config.js.map +1 -0
  23. package/build/dex/{test-aave-v3/test-aave-v3-pool.d.ts → test-dex/test-dex-pool.d.ts} +3 -3
  24. package/build/dex/{test-aave-v3/test-aave-v3-pool.js → test-dex/test-dex-pool.js} +7 -7
  25. package/build/dex/test-dex/test-dex-pool.js.map +1 -0
  26. package/build/dex/{test-aave-v3/test-aave-v3.d.ts → test-dex/test-dex.d.ts} +8 -8
  27. package/build/dex/{test-aave-v3/test-aave-v3.js → test-dex/test-dex.js} +7 -7
  28. package/build/dex/test-dex/test-dex.js.map +1 -0
  29. package/build/dex/{test-aave-v3 → test-dex}/types.d.ts +1 -1
  30. package/build/dex/{test-aave-v3 → test-dex}/types.js.map +1 -1
  31. package/build/dex/uniswap-v3/config.js +13 -0
  32. package/build/dex/uniswap-v3/config.js.map +1 -1
  33. package/build/dex/woo-fi-v2/config.d.ts +4 -0
  34. package/build/dex/woo-fi-v2/config.js +87 -0
  35. package/build/dex/woo-fi-v2/config.js.map +1 -0
  36. package/build/dex/woo-fi-v2/constants.d.ts +5 -0
  37. package/build/dex/woo-fi-v2/constants.js +15 -0
  38. package/build/dex/woo-fi-v2/constants.js.map +1 -0
  39. package/build/dex/woo-fi-v2/decoders.d.ts +6 -0
  40. package/build/dex/woo-fi-v2/decoders.js +29 -0
  41. package/build/dex/woo-fi-v2/decoders.js.map +1 -0
  42. package/build/dex/woo-fi-v2/types.d.ts +41 -0
  43. package/build/dex/woo-fi-v2/types.js +3 -0
  44. package/build/dex/woo-fi-v2/types.js.map +1 -0
  45. package/build/dex/woo-fi-v2/utils.d.ts +2 -0
  46. package/build/dex/woo-fi-v2/utils.js +24 -0
  47. package/build/dex/woo-fi-v2/utils.js.map +1 -0
  48. package/build/dex/woo-fi-v2/woo-fi-math.d.ts +16 -0
  49. package/build/dex/woo-fi-v2/woo-fi-math.js +137 -0
  50. package/build/dex/woo-fi-v2/woo-fi-math.js.map +1 -0
  51. package/build/dex/woo-fi-v2/woo-fi-v2-math.d.ts +16 -0
  52. package/build/dex/woo-fi-v2/woo-fi-v2-math.js +137 -0
  53. package/build/dex/woo-fi-v2/woo-fi-v2-math.js.map +1 -0
  54. package/build/dex/woo-fi-v2/woo-fi-v2-pool.d.ts +12 -0
  55. package/build/dex/woo-fi-v2/woo-fi-v2-pool.js +79 -0
  56. package/build/dex/woo-fi-v2/woo-fi-v2-pool.js.map +1 -0
  57. package/build/dex/woo-fi-v2/woo-fi-v2.d.ts +52 -0
  58. package/build/dex/woo-fi-v2/woo-fi-v2.js +310 -0
  59. package/build/dex/woo-fi-v2/woo-fi-v2.js.map +1 -0
  60. package/build/lib/log-messages-suppressor.d.ts +30 -0
  61. package/build/lib/log-messages-suppressor.js +107 -0
  62. package/build/lib/log-messages-suppressor.js.map +1 -0
  63. package/build/lib/stateful-rpc-poller/state-polling-manager.d.ts +23 -0
  64. package/build/lib/stateful-rpc-poller/state-polling-manager.js +173 -0
  65. package/build/lib/stateful-rpc-poller/state-polling-manager.js.map +1 -0
  66. package/build/lib/stateful-rpc-poller/stateful-rpc-poller.d.ts +72 -0
  67. package/build/lib/stateful-rpc-poller/stateful-rpc-poller.js +369 -0
  68. package/build/lib/stateful-rpc-poller/stateful-rpc-poller.js.map +1 -0
  69. package/build/lib/stateful-rpc-poller/types.d.ts +35 -0
  70. package/build/lib/stateful-rpc-poller/types.js +10 -0
  71. package/build/lib/stateful-rpc-poller/types.js.map +1 -0
  72. package/build/lib/stateful-rpc-poller/utils.d.ts +4 -0
  73. package/build/lib/stateful-rpc-poller/utils.js +17 -0
  74. package/build/lib/stateful-rpc-poller/utils.js.map +1 -0
  75. package/build/lib/validators.d.ts +7 -0
  76. package/build/lib/validators.js +27 -0
  77. package/build/lib/validators.js.map +1 -0
  78. package/package.json +1 -1
  79. package/src/config.ts +3 -3
  80. package/src/dex/generic-rfq/generic-rfq-e2e.test.ts +71 -85
  81. package/src/dex/generic-rfq/validators.test.ts +32 -6
  82. package/src/dex/generic-rfq/validators.ts +32 -57
  83. package/src/dex/uniswap-v3/config.ts +13 -0
  84. package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +76 -0
  85. package/tests/constants-e2e.ts +0 -2
  86. package/tests/utils-e2e.ts +48 -59
  87. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  88. package/.idea/misc.xml +0 -6
  89. package/.idea/modules.xml +0 -8
  90. package/.idea/vcs.xml +0 -6
  91. package/.vscode/launch.json +0 -21
  92. package/build/dex/aave-v3/tokens/mainnet.json +0 -44
  93. package/build/dex/balancer-v2/VirtualBoostedPool.d.ts +0 -79
  94. package/build/dex/balancer-v2/VirtualBoostedPool.js +0 -382
  95. package/build/dex/balancer-v2/VirtualBoostedPool.js.map +0 -1
  96. package/build/dex/test-aave-v3/config.js.map +0 -1
  97. package/build/dex/test-aave-v3/test-aave-v3-pool.js.map +0 -1
  98. package/build/dex/test-aave-v3/test-aave-v3.js.map +0 -1
  99. package/src/dex/generic-rfq/generic-rfq-e2e-arbitrum.test.ts +0 -360
  100. package/src/dex/generic-rfq/generic-rfq-e2e-bsc.test.ts +0 -346
  101. package/src/dex/generic-rfq/generic-rfq-e2e-polygon.test.ts +0 -360
  102. /package/build/dex/{test-aave-v3 → test-dex}/types.js +0 -0
@@ -0,0 +1,30 @@
1
+ import { Logger, LogLevels } from '../types';
2
+ export declare const DEFAULT_LOG_PUBLISH_PERIOD_MS = 60000;
3
+ export declare const DEFAULT_LOG_DISCARD_PERIOD_MS: number;
4
+ export declare const DEFAULT_LOG_MAX_IDENTITIES_TO_SHOW = 10;
5
+ export declare type StandardStringEnum = Readonly<Record<string, string>>;
6
+ export declare type MessageInfo<T extends StandardStringEnum> = {
7
+ key: keyof T;
8
+ message: T[keyof T];
9
+ logLevel: LogLevels;
10
+ };
11
+ export declare type MessageData = {
12
+ counter: number;
13
+ lastLoggedAtMs: number;
14
+ identificationInfos: string[];
15
+ };
16
+ export declare type AggregatedLogForEntity<T extends StandardStringEnum> = {
17
+ [key in keyof T]?: MessageData;
18
+ };
19
+ export declare class LogMessagesSuppressor<T extends StandardStringEnum> {
20
+ readonly entityName: string;
21
+ private _allMessages;
22
+ protected logger: Logger;
23
+ static instances: Record<string, LogMessagesSuppressor<any>>;
24
+ private _aggregatedLogs;
25
+ constructor(entityName: string, _allMessages: Record<keyof T, MessageInfo<T>>, logger: Logger);
26
+ static getLogSuppressorInstance<T extends StandardStringEnum>(entityName: string, allMessages: Record<keyof T, MessageInfo<T>>, logger: Logger): LogMessagesSuppressor<any>;
27
+ logMessage(msgKey: keyof T, identificationInfo?: string, ...args: unknown[]): void;
28
+ private _formatLogMessage;
29
+ private _clearMessageData;
30
+ }
@@ -0,0 +1,107 @@
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.LogMessagesSuppressor = exports.DEFAULT_LOG_MAX_IDENTITIES_TO_SHOW = exports.DEFAULT_LOG_DISCARD_PERIOD_MS = exports.DEFAULT_LOG_PUBLISH_PERIOD_MS = void 0;
7
+ const ts_essentials_1 = require("ts-essentials");
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ exports.DEFAULT_LOG_PUBLISH_PERIOD_MS = 60000;
10
+ // After this period previous logs, even if unpublished, would be discarded
11
+ // Because most likely they are outdated
12
+ exports.DEFAULT_LOG_DISCARD_PERIOD_MS = 15 * 60 * 1000;
13
+ // We may have hundreds of pools failing at the same time,
14
+ // and we don't want to show them all
15
+ exports.DEFAULT_LOG_MAX_IDENTITIES_TO_SHOW = 10;
16
+ /*
17
+ * This is helper module to reduce frequency of logging of spamming messages
18
+ *
19
+ * 1. You can only have predefined set of log messages to log
20
+ * First time log message is received, it is published with all arguments.
21
+ * Limitation - message can not include variables, but you can pass them as args
22
+ * If within cooldown period received another message of the same category, it
23
+ * is not published, but counter is increased with addition of some entity identifier
24
+ *
25
+ * 2. There is no background task running. In order to keep relevance of logs,
26
+ * if after certain amount of time we didn't receive logs, then we discarded accumulated ones
27
+ * on the next received ones and only publish relevant ones
28
+ */
29
+ class LogMessagesSuppressor {
30
+ constructor(entityName, _allMessages, logger) {
31
+ this.entityName = entityName;
32
+ this._allMessages = _allMessages;
33
+ this.logger = logger;
34
+ this._aggregatedLogs = {};
35
+ }
36
+ static getLogSuppressorInstance(entityName, allMessages, logger) {
37
+ const instance = LogMessagesSuppressor.instances[entityName];
38
+ if (instance === undefined) {
39
+ LogMessagesSuppressor.instances[entityName] =
40
+ new LogMessagesSuppressor(entityName, allMessages, logger);
41
+ }
42
+ else {
43
+ (0, ts_essentials_1.assert)(lodash_1.default.isEqual(allMessages, instance._allMessages), 'getLogSuppressorInstance: try to get existing instance with different allMessagesInfo');
44
+ (0, ts_essentials_1.assert)(lodash_1.default.isEqual(logger, instance.logger), 'getLogSuppressorInstance: try to get existing instance with different logger');
45
+ }
46
+ return LogMessagesSuppressor.instances[entityName];
47
+ }
48
+ logMessage(msgKey, identificationInfo = '', ...args) {
49
+ const msgInfo = this._allMessages[msgKey];
50
+ (0, ts_essentials_1.assert)(msgInfo !== undefined, `Used unrecognized msgKey=${String(msgKey)} to get msgInfo`);
51
+ if (this._aggregatedLogs[msgKey] === undefined) {
52
+ this._aggregatedLogs[msgKey] = {
53
+ counter: 0,
54
+ identificationInfos: identificationInfo === '' ? [] : [identificationInfo],
55
+ lastLoggedAtMs: 0,
56
+ };
57
+ }
58
+ const msgData = this._aggregatedLogs[msgKey];
59
+ (0, ts_essentials_1.assert)(msgData !== undefined, `msgData is undefined for msgKey=${String(msgKey)}`);
60
+ const nowMs = Date.now();
61
+ const elapsedSinceLastPublish = nowMs - msgData.lastLoggedAtMs;
62
+ if (elapsedSinceLastPublish > exports.DEFAULT_LOG_PUBLISH_PERIOD_MS) {
63
+ // Accumulated logs are too old to have any relevance, so better to discard them
64
+ if (elapsedSinceLastPublish > exports.DEFAULT_LOG_DISCARD_PERIOD_MS) {
65
+ this._clearMessageData(msgData);
66
+ }
67
+ // Make actual logging
68
+ // Logging is done using original logger of the entity to keep module info
69
+ // and not override it
70
+ this.logger[msgInfo.logLevel](this._formatLogMessage(msgData, msgInfo.message), ...args);
71
+ this._clearMessageData(msgData);
72
+ }
73
+ else {
74
+ msgData.counter++;
75
+ if (identificationInfo !== '') {
76
+ msgData.identificationInfos.push(identificationInfo);
77
+ }
78
+ }
79
+ }
80
+ _formatLogMessage(msgData, message) {
81
+ const { counter, identificationInfos } = msgData;
82
+ let identities = identificationInfos && identificationInfos.length === 0
83
+ ? ''
84
+ : ` for entities: ${identificationInfos.length > exports.DEFAULT_LOG_MAX_IDENTITIES_TO_SHOW
85
+ ? identificationInfos
86
+ .slice(exports.DEFAULT_LOG_MAX_IDENTITIES_TO_SHOW)
87
+ .join(',')
88
+ : identificationInfos.join(',')}`;
89
+ if (identificationInfos &&
90
+ identificationInfos.length > exports.DEFAULT_LOG_MAX_IDENTITIES_TO_SHOW) {
91
+ identities = `${identities}... ${identificationInfos.length} total`;
92
+ }
93
+ return `${this.entityName}: logged ${counter} occurrences of: "${message}"${identities}. `;
94
+ }
95
+ _clearMessageData(messageData) {
96
+ messageData.counter = 0;
97
+ if (messageData.identificationInfos) {
98
+ messageData.identificationInfos.length = 0;
99
+ }
100
+ messageData.lastLoggedAtMs = Date.now();
101
+ }
102
+ }
103
+ exports.LogMessagesSuppressor = LogMessagesSuppressor;
104
+ // I don't really like this any, but couldn't come up with better solution
105
+ // in reasonable time. So, in order to unblock myself, do this
106
+ LogMessagesSuppressor.instances = {};
107
+ //# sourceMappingURL=log-messages-suppressor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-messages-suppressor.js","sourceRoot":"","sources":["../../src/lib/log-messages-suppressor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { IDexHelper } from '../../dex-helper';
2
+ import { IStatefulRpcPoller } from './types';
3
+ export declare class StatePollingManager {
4
+ protected dexHelper: IDexHelper;
5
+ private static __instances;
6
+ static getInstance(dexHelper: IDexHelper): StatePollingManager;
7
+ private _lastProcessedBlockNumber;
8
+ private logger;
9
+ private _registeredPendingPools;
10
+ private _poolsToInstances;
11
+ private _poolsToBeUpdated;
12
+ private _idlePools;
13
+ private constructor();
14
+ get isMaster(): boolean;
15
+ enableStateTracking(identifierKey: string): void;
16
+ disableStateTracking(identifierKey: string): void;
17
+ onBlockNumber(blockNumber: number): Promise<void>;
18
+ protected _updatePoolStates(poolsToBeUpdated: IStatefulRpcPoller<any, any>[], blockNumber?: number | 'latest', numberOfChunks?: number): Promise<number>;
19
+ private _keyToPoolInstance;
20
+ initializeAllPendingPools(): void;
21
+ registerPendingPool<T, M>(statefulRpcPoller: IStatefulRpcPoller<T, M>): void;
22
+ initializePool<T, M>(statefulRpcPoller: IStatefulRpcPoller<T, M>): void;
23
+ }
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StatePollingManager = void 0;
4
+ const console_1 = require("console");
5
+ const log4js_1 = require("../log4js");
6
+ class StatePollingManager {
7
+ constructor(dexHelper) {
8
+ this.dexHelper = dexHelper;
9
+ this._lastProcessedBlockNumber = 0;
10
+ this._registeredPendingPools = [];
11
+ // ALl registered instances from identifier to instance
12
+ this._poolsToInstances = {};
13
+ // This pools will be updated if we see new block and the time has come
14
+ this._poolsToBeUpdated = new Set();
15
+ // This pools wont be updated before we change _isStateToBeUpdated to true
16
+ this._idlePools = new Set();
17
+ this.logger = (0, log4js_1.getLogger)(`${this.constructor.name}-${dexHelper.config.data.network}`);
18
+ if (this.isMaster) {
19
+ }
20
+ }
21
+ static getInstance(dexHelper) {
22
+ const network = dexHelper.config.data.network;
23
+ if (StatePollingManager.__instances[network] === undefined) {
24
+ StatePollingManager.__instances[network] = new StatePollingManager(dexHelper);
25
+ }
26
+ return StatePollingManager.__instances[network];
27
+ }
28
+ get isMaster() {
29
+ return !this.dexHelper.config.isSlave;
30
+ }
31
+ enableStateTracking(identifierKey) {
32
+ (0, console_1.assert)(this._poolsToInstances[identifierKey] !== undefined, `enableTracking: pool with identifierKey=${identifierKey} is not initialized`);
33
+ this._poolsToBeUpdated.add(identifierKey);
34
+ this._idlePools.delete(identifierKey);
35
+ }
36
+ disableStateTracking(identifierKey) {
37
+ (0, console_1.assert)(this._poolsToInstances[identifierKey] !== undefined, `disableStateTracking: pool with identifierKey=${identifierKey} is not initialized`);
38
+ this._poolsToBeUpdated.delete(identifierKey);
39
+ this._idlePools.add(identifierKey);
40
+ }
41
+ async onBlockNumber(blockNumber) {
42
+ if (!this.isMaster) {
43
+ return;
44
+ }
45
+ // Events-client calls several times for the same blockNumber sometimes
46
+ // I want to filter them. The only condition, that matters is that blockNumbers are the same
47
+ if (this._lastProcessedBlockNumber === blockNumber) {
48
+ return;
49
+ }
50
+ this._lastProcessedBlockNumber = blockNumber;
51
+ const poolsToBeUpdated = [];
52
+ Array.from(this._poolsToBeUpdated).forEach(p => {
53
+ const pool = this._keyToPoolInstance(p);
54
+ // We always expect pools in _poolsToBeUpdated to participate in updates
55
+ (0, console_1.assert)(pool.isPoolParticipateInUpdates, `onBlockNumber: pool=${p} from ${pool.dexKey} is not participate in updates`);
56
+ if (!pool.isPoolInTheMiddleOfUpdate &&
57
+ pool.isTimeToTriggerUpdate(blockNumber)) {
58
+ pool.isPoolInTheMiddleOfUpdate = true;
59
+ poolsToBeUpdated.push(pool);
60
+ }
61
+ });
62
+ if (poolsToBeUpdated.length === 0) {
63
+ this.logger.debug(`onBlockNumber=${blockNumber} no pools to be updated. Skipping`);
64
+ return;
65
+ }
66
+ this._updatePoolStates(poolsToBeUpdated)
67
+ .then(receivedBlockNumber => {
68
+ // There is no guarantee that we receive latest state. This is our best effort
69
+ if (receivedBlockNumber < blockNumber) {
70
+ this.logger.warn(`onBlockNumber=${blockNumber} at least for some pools receivedBlockNumber=${receivedBlockNumber} is lower than expected`);
71
+ }
72
+ })
73
+ .catch(e => this.logger.error(`onBlockNumber=${blockNumber} error while updating pools: ${e}`))
74
+ .finally(() => {
75
+ poolsToBeUpdated.forEach(pool => {
76
+ pool.isPoolInTheMiddleOfUpdate = false;
77
+ });
78
+ });
79
+ }
80
+ async _updatePoolStates(poolsToBeUpdated, blockNumber = 'latest', numberOfChunks) {
81
+ const indexDividers = [];
82
+ const multiCalls = poolsToBeUpdated
83
+ .map((p, i) => {
84
+ const callData = p.getFetchStateWithBlockInfoMultiCalls();
85
+ indexDividers.push(callData.length);
86
+ return callData;
87
+ })
88
+ .flat();
89
+ (0, console_1.assert)(indexDividers.length === poolsToBeUpdated.length, 'indexDividers.length === poolsToBeUpdated.length');
90
+ const results = (await this.dexHelper.multiWrapper.tryAggregate(false, multiCalls, blockNumber, numberOfChunks));
91
+ let minBlockNumber = 0;
92
+ const lastUpdatedAtMs = Date.now();
93
+ // Let's pack each result into relevant pools
94
+ const unFlattenedResults = [];
95
+ let accumulatedStart = 0;
96
+ indexDividers.forEach(divider => {
97
+ unFlattenedResults.push(results.slice(accumulatedStart, accumulatedStart + divider));
98
+ accumulatedStart += divider;
99
+ });
100
+ (0, console_1.assert)(unFlattenedResults.length === poolsToBeUpdated.length, 'unFlattenedResults.length === poolsToBeUpdated.length');
101
+ await Promise.all(unFlattenedResults.map(async (result, index) => {
102
+ const pool = poolsToBeUpdated[index];
103
+ try {
104
+ const parsedStateResult = pool.parseStateFromMultiResultsWithBlockInfo(result, lastUpdatedAtMs);
105
+ minBlockNumber = Math.min(parsedStateResult.blockNumber, minBlockNumber);
106
+ await pool.setState(parsedStateResult.value, parsedStateResult.blockNumber, parsedStateResult.lastUpdatedAtMs);
107
+ }
108
+ catch (e) {
109
+ this.logger.error(`onBlockNumber=${blockNumber} error while parsing state from multicall for pool=${pool.identifierKey} from ${pool.dexKey}: ${e}`);
110
+ }
111
+ }));
112
+ return minBlockNumber;
113
+ }
114
+ // When this method is called, we expect that all pools are initialized
115
+ _keyToPoolInstance(identifierKey) {
116
+ const pool = this._poolsToInstances[identifierKey];
117
+ (0, console_1.assert)(pool !== undefined, `keyToPoolInstance: pool=${identifierKey} is undefined`);
118
+ return pool;
119
+ }
120
+ // Once you instantiated all your pools, you should trigger at the end of initializing this method
121
+ // So all state will be initialized. It is not part of constructor, because and that time we don't have
122
+ // all classes built
123
+ initializeAllPendingPools() {
124
+ if (this._registeredPendingPools.length === 0) {
125
+ return;
126
+ }
127
+ this._registeredPendingPools.forEach(p => {
128
+ this.initializePool(p);
129
+ });
130
+ this._registeredPendingPools = [];
131
+ }
132
+ registerPendingPool(statefulRpcPoller) {
133
+ if (this._poolsToInstances[statefulRpcPoller.identifierKey]) {
134
+ this.logger.error(`Attempt to register initialized pool=${statefulRpcPoller.identifierKey}`);
135
+ return;
136
+ }
137
+ const alreadyRegisteredAsPending = this._registeredPendingPools.some(p => p.identifierKey === statefulRpcPoller.identifierKey);
138
+ if (alreadyRegisteredAsPending) {
139
+ this.logger.error(`Attempt to register pool=${statefulRpcPoller.identifierKey} twice`);
140
+ return;
141
+ }
142
+ this._registeredPendingPools.push(statefulRpcPoller);
143
+ }
144
+ initializePool(statefulRpcPoller) {
145
+ const { identifierKey } = statefulRpcPoller;
146
+ if (this._idlePools.has(identifierKey) ||
147
+ this._poolsToBeUpdated.has(identifierKey) ||
148
+ this._poolsToInstances.hasOwnProperty(identifierKey)) {
149
+ this.logger.warn(`Attempt to reinitialize existing poolIdentifier=` +
150
+ `${identifierKey}. Maybe there is memory leak`);
151
+ }
152
+ else {
153
+ this._poolsToInstances[identifierKey] = statefulRpcPoller;
154
+ statefulRpcPoller.isPoolParticipateInUpdates
155
+ ? this._poolsToBeUpdated.add(identifierKey)
156
+ : this._idlePools.add(identifierKey);
157
+ const currentBlockNumber = this.dexHelper.blockManager.getActiveChainHead()?.number;
158
+ (0, console_1.assert)(currentBlockNumber !== undefined, 'currentBlockNumber !== undefined');
159
+ statefulRpcPoller
160
+ .initializeState()
161
+ .then(() => {
162
+ this.logger.info(`Successfully initialized pool=${identifierKey}`);
163
+ })
164
+ .catch(e => {
165
+ // Must never happen
166
+ this.logger.error(`initializePool: pool=${identifierKey} from ${statefulRpcPoller.dexKey} error while initializing state: ${e}`);
167
+ });
168
+ }
169
+ }
170
+ }
171
+ exports.StatePollingManager = StatePollingManager;
172
+ StatePollingManager.__instances = {};
173
+ //# sourceMappingURL=state-polling-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-polling-manager.js","sourceRoot":"","sources":["../../../src/lib/stateful-rpc-poller/state-polling-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import { Logger, LogLevels } from '../../types';
2
+ import { IDexHelper } from '../../dex-helper';
3
+ import { IStatefulRpcPoller, ObjWithUpdateInfo, PollingManagerControllersCb, StateSources } from './types';
4
+ import { MultiCallParams, MultiResult } from '../multi-wrapper';
5
+ import { LogMessagesSuppressor, MessageInfo } from '../log-messages-suppressor';
6
+ declare const StatefulRPCPollerMessages: {
7
+ readonly ERROR_FETCHING_STATE_FROM_CACHE: "Unexpected error while fetching state from Cache";
8
+ readonly ERROR_FETCHING_STATE_FROM_RPC: "Unexpected error while fetching state from RPC";
9
+ readonly ERROR_SAVING_LIQUIDITY_IN_CACHE: "Unexpected error while saving liquidity in Cache";
10
+ readonly ERROR_SAVING_STATE_IN_CACHE: "Unexpected error while saving state in Cache";
11
+ readonly FALLBACK_TO_RPC: "Failed to retrieve updated state from cache. Falling back to RPC";
12
+ readonly LIQUIDITY_INFO_IS_OUTDATED: string;
13
+ };
14
+ export declare abstract class StatefulRpcPoller<State, M> implements IStatefulRpcPoller<State, M> {
15
+ readonly dexKey: string;
16
+ protected dexHelper: IDexHelper;
17
+ protected liquidityThresholdForUpdate: number;
18
+ protected liquidityUpdateAllowedDelayMs: number;
19
+ protected isLiquidityTracked: boolean;
20
+ protected managerCbControllers: PollingManagerControllersCb;
21
+ protected maxAllowedStateDelayInBlocks: number;
22
+ protected blocksBackToTriggerUpdate: number;
23
+ protected liquidityUpdatePeriodMs: number;
24
+ static StatefulRPCPollerMessages: Record<keyof typeof StatefulRPCPollerMessages, MessageInfo<typeof StatefulRPCPollerMessages>>;
25
+ protected _stateWithUpdateInfo?: ObjWithUpdateInfo<State>;
26
+ protected _liquidityInUSDWithUpdateInfo: ObjWithUpdateInfo<number>;
27
+ readonly cacheStateKey: string;
28
+ readonly cacheLiquidityMapKey: string;
29
+ protected _cachedMultiCallData?: [
30
+ MultiCallParams<number>,
31
+ ...MultiCallParams<M>[]
32
+ ];
33
+ protected _getBlockNumberMultiCall: MultiCallParams<number>;
34
+ readonly entityName: string;
35
+ protected logMessagesSuppressor: LogMessagesSuppressor<typeof StatefulRPCPollerMessages>;
36
+ protected _isPoolParticipateInUpdates: boolean;
37
+ protected _isPoolInTheMiddleOfUpdate: boolean;
38
+ readonly identifierKey: string;
39
+ protected logger: Logger;
40
+ constructor(dexKey: string, poolIdentifier: string, dexHelper: IDexHelper, liquidityThresholdForUpdate: number, liquidityUpdateAllowedDelayMs: number, isLiquidityTracked: boolean, managerCbControllers: PollingManagerControllersCb, maxAllowedStateDelayInBlocks?: number, blocksBackToTriggerUpdate?: number, liquidityUpdatePeriodMs?: number);
41
+ get network(): number;
42
+ protected get isMaster(): boolean;
43
+ protected _isStateOutdated(checkForBlockNumber: number, stateValidBlockNumber: number, stateValidityBlockNumDelay: number): boolean;
44
+ protected _isStateOutdatedForUse(checkForBlockNumber: number, stateValidBlockNumber: number): boolean;
45
+ isTimeToTriggerUpdate(blocknumber: number): boolean;
46
+ protected _retrieveStateWithChecks(retriever: () => Promise<ObjWithUpdateInfo<State> | null>, blockNumber: number | 'latest', source: StateSources): Promise<ObjWithUpdateInfo<State> | null>;
47
+ getState(blockNumber?: number | 'latest', forInitialization?: boolean, saveInMemory?: boolean): Promise<ObjWithUpdateInfo<State> | null>;
48
+ protected _logMessageWithSuppression(msgKey: keyof typeof StatefulRPCPollerMessages, ...args: unknown[]): void;
49
+ protected _immediateLogMessage(message: string, level: LogLevels, ...args: unknown[]): void;
50
+ get isPoolParticipateInUpdates(): boolean;
51
+ set isPoolParticipateInUpdates(value: boolean);
52
+ get isPoolInTheMiddleOfUpdate(): boolean;
53
+ set isPoolInTheMiddleOfUpdate(value: boolean);
54
+ protected abstract _getFetchStateMultiCalls(): MultiCallParams<M>[];
55
+ getFetchStateWithBlockInfoMultiCalls(): [
56
+ MultiCallParams<number>,
57
+ ...MultiCallParams<M>[]
58
+ ];
59
+ protected abstract _parseStateFromMultiResults(multiOutputs: M[]): State;
60
+ parseStateFromMultiResultsWithBlockInfo(multiOutputs: [MultiResult<number>, ...MultiResult<M>[]], lastUpdatedAtMs: number): ObjWithUpdateInfo<State>;
61
+ fetchLatestStateFromRpc(): Promise<ObjWithUpdateInfo<State> | null>;
62
+ setState(state: State, blockNumber: number, lastUpdatedAtMs: number): Promise<void>;
63
+ protected _saveStateInCache(): Promise<boolean>;
64
+ protected _saveLiquidityInCache(): Promise<boolean>;
65
+ fetchStateFromCache(): Promise<ObjWithUpdateInfo<State> | null>;
66
+ protected _fetchLiquidityFromCache(): Promise<ObjWithUpdateInfo<number> | null>;
67
+ setLiquidity(newLiquidityInUSD: number, lastUpdatedAtMs: number, blockNumber?: number): Promise<void>;
68
+ protected _adjustIsStateToBeUpdated(): void;
69
+ protected _getExpiryTimeForCachedLiquidity(): number;
70
+ initializeState(): Promise<void>;
71
+ }
72
+ export {};