@clonegod/ttd-bsc-common 1.0.3 → 1.0.5
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.
|
@@ -21,6 +21,7 @@ export declare class PoolEventListener {
|
|
|
21
21
|
private connectionTimeoutMs;
|
|
22
22
|
private lastProcessedBlockNumber;
|
|
23
23
|
private isBlockListenerActive;
|
|
24
|
+
private metrics;
|
|
24
25
|
constructor(appConfig: AppConfig, wsProvider: ethers.providers.WebSocketProvider);
|
|
25
26
|
init(poolList: StandardPoolInfoType[]): Promise<void>;
|
|
26
27
|
start(): Promise<void>;
|
|
@@ -27,6 +27,11 @@ class PoolEventListener {
|
|
|
27
27
|
this.connectionTimeoutMs = 15000;
|
|
28
28
|
this.lastProcessedBlockNumber = 0;
|
|
29
29
|
this.isBlockListenerActive = false;
|
|
30
|
+
this.metrics = {
|
|
31
|
+
lastBlockTime: 0,
|
|
32
|
+
blockInterval: 0,
|
|
33
|
+
missedBlocks: 0
|
|
34
|
+
};
|
|
30
35
|
this.appConfig = appConfig;
|
|
31
36
|
this.wsProvider = wsProvider;
|
|
32
37
|
}
|
|
@@ -46,7 +51,7 @@ class PoolEventListener {
|
|
|
46
51
|
(0, dist_1.log_warn)('WebSocket 尚未连接,无法启动监听', '');
|
|
47
52
|
return;
|
|
48
53
|
}
|
|
49
|
-
this.startBlockListener();
|
|
54
|
+
yield this.startBlockListener();
|
|
50
55
|
this.isStarted = true;
|
|
51
56
|
(0, dist_1.log_info)('区块监听已成功启动');
|
|
52
57
|
});
|
|
@@ -118,11 +123,12 @@ class PoolEventListener {
|
|
|
118
123
|
yield this.initProvider();
|
|
119
124
|
if (this.isStarted) {
|
|
120
125
|
(0, dist_1.log_info)('重连成功,正在重新启动区块监听...');
|
|
121
|
-
yield this.
|
|
126
|
+
yield this.startBlockListener();
|
|
122
127
|
}
|
|
123
128
|
}
|
|
124
129
|
catch (err) {
|
|
125
130
|
(0, dist_1.log_error)('重新连接失败:', err, '');
|
|
131
|
+
this.handleConnectionIssue();
|
|
126
132
|
}
|
|
127
133
|
});
|
|
128
134
|
}
|
|
@@ -168,40 +174,49 @@ class PoolEventListener {
|
|
|
168
174
|
}
|
|
169
175
|
}
|
|
170
176
|
startBlockListener() {
|
|
171
|
-
(0,
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
(
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
.then(blockNumber => {
|
|
179
|
-
this.lastProcessedBlockNumber = blockNumber;
|
|
180
|
-
(0, dist_1.log_info)(`初始化区块监听,当前区块: ${blockNumber}`);
|
|
181
|
-
})
|
|
182
|
-
.catch(error => {
|
|
183
|
-
(0, dist_1.log_error)(`获取当前区块失败:`, error, '');
|
|
184
|
-
});
|
|
185
|
-
this.wsProvider.on('block', (blockNumber) => __awaiter(this, void 0, void 0, function* () {
|
|
177
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
178
|
+
(0, dist_1.log_info)(`开始启动区块监听...`);
|
|
179
|
+
this.stopBlockListener();
|
|
180
|
+
if (!this.isConnected || !this.wsProvider) {
|
|
181
|
+
(0, dist_1.log_warn)(`无法启动区块监听: WebSocket未连接`);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
186
184
|
try {
|
|
187
|
-
|
|
188
|
-
return;
|
|
189
|
-
(0, dist_1.log_info)(`------- Block: ${blockNumber} -------`);
|
|
190
|
-
const previousBlockNumber = this.lastProcessedBlockNumber;
|
|
185
|
+
const blockNumber = yield this.wsProvider.getBlockNumber();
|
|
191
186
|
this.lastProcessedBlockNumber = blockNumber;
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
187
|
+
(0, dist_1.log_info)(`初始化区块监听,当前区块: ${blockNumber}`);
|
|
188
|
+
this.wsProvider.on('block', (blockNumber) => __awaiter(this, void 0, void 0, function* () {
|
|
189
|
+
try {
|
|
190
|
+
if (!this.isConnected || !this.isBlockListenerActive)
|
|
191
|
+
return;
|
|
192
|
+
this.metrics.blockInterval = Date.now() - this.metrics.lastBlockTime;
|
|
193
|
+
this.metrics.lastBlockTime = Date.now();
|
|
194
|
+
if (this.metrics.blockInterval > 30000) {
|
|
195
|
+
(0, dist_1.log_warn)(`区块间隔异常: ${this.metrics.blockInterval}ms`);
|
|
196
|
+
this.metrics.missedBlocks++;
|
|
197
|
+
}
|
|
198
|
+
(0, dist_1.log_info)(`------- Block: ${blockNumber} -------`);
|
|
199
|
+
const previousBlockNumber = this.lastProcessedBlockNumber;
|
|
200
|
+
this.lastProcessedBlockNumber = blockNumber;
|
|
201
|
+
const blockUpdateEvent = {
|
|
202
|
+
blockNumber: blockNumber,
|
|
203
|
+
previousBlockNumber: previousBlockNumber,
|
|
204
|
+
timestamp: Date.now()
|
|
205
|
+
};
|
|
206
|
+
this.appConfig.emit(constants_1.EVENT_NAMES.BLOCK_UPDATE, blockUpdateEvent);
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
(0, dist_1.log_error)(`处理区块事件出错:`, error, '');
|
|
210
|
+
}
|
|
211
|
+
}));
|
|
212
|
+
this.isBlockListenerActive = true;
|
|
213
|
+
(0, dist_1.log_info)(`区块监听已启动,使用WebSocket事件订阅方式`);
|
|
198
214
|
}
|
|
199
215
|
catch (error) {
|
|
200
|
-
(0, dist_1.log_error)(
|
|
216
|
+
(0, dist_1.log_error)(`启动区块监听失败:`, error, '');
|
|
217
|
+
this.isBlockListenerActive = false;
|
|
201
218
|
}
|
|
202
|
-
})
|
|
203
|
-
this.isBlockListenerActive = true;
|
|
204
|
-
(0, dist_1.log_info)(`区块监听已启动,使用WebSocket事件订阅方式`);
|
|
219
|
+
});
|
|
205
220
|
}
|
|
206
221
|
stopBlockListener() {
|
|
207
222
|
if (this.isBlockListenerActive && this.wsProvider) {
|
|
@@ -224,7 +239,8 @@ class PoolEventListener {
|
|
|
224
239
|
? this.wsProvider._websocket.readyState
|
|
225
240
|
: null,
|
|
226
241
|
trackingPools: this.poolList.length,
|
|
227
|
-
lastProcessedBlock: this.lastProcessedBlockNumber
|
|
242
|
+
lastProcessedBlock: this.lastProcessedBlockNumber,
|
|
243
|
+
metrics: Object.assign(Object.assign({}, this.metrics), { lastBlockTime: new Date(this.metrics.lastBlockTime).toISOString() })
|
|
228
244
|
};
|
|
229
245
|
}
|
|
230
246
|
}
|
package/dist/utils/redis_lock.js
CHANGED
|
@@ -90,7 +90,7 @@ class RedisLock {
|
|
|
90
90
|
}
|
|
91
91
|
finally {
|
|
92
92
|
if (acquired) {
|
|
93
|
-
yield (0, dist_1.sleep)(parseInt(process.env.NONCE_LOCK_RELEASE_DELAY_MS || '
|
|
93
|
+
yield (0, dist_1.sleep)(parseInt(process.env.NONCE_LOCK_RELEASE_DELAY_MS || '1500'));
|
|
94
94
|
yield this.releaseLock(lock_key, lock_value);
|
|
95
95
|
}
|
|
96
96
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clonegod/ttd-bsc-common",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "BSC common library",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"push": "npm run build && npm publish"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@clonegod/ttd-core": "2.0.
|
|
17
|
+
"@clonegod/ttd-core": "2.0.22",
|
|
18
18
|
"axios": "^1.8.4",
|
|
19
19
|
"dotenv": "^16.4.7",
|
|
20
20
|
"ethers": "^5.8.0"
|