-
Notifications
You must be signed in to change notification settings - Fork 0
/
alchemyFullTxStats.ts
51 lines (47 loc) · 1.28 KB
/
alchemyFullTxStats.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import { createAlchemyWeb3 } from "@alch/alchemy-web3";
import { getDefaultLogger } from "./logger";
const logger = getDefaultLogger();
if (!process.env.ALCHEMY_WSS_ENDPOINT) {
console.log('Please first run "export ALCHEMY_WSS_ENDPOINT=..."');
process.exit(1);
}
const web3 = createAlchemyWeb3(process.env.ALCHEMY_WSS_ENDPOINT);
const fullTxsSub = web3.eth.subscribe(
"alchemy_fullPendingTransactions",
async function (error, tx) {
if (error) {
logger.error(error);
}
txStats.numTxs += 1;
if (tx.blockNumber != null) {
txStats.numTxsAlreadyMined += 1;
}
const queriedTx = await web3.eth.getTransaction(tx.hash);
if (queriedTx == null) {
txStats.numTxsNotFound += 1;
}
}
);
const txStats = {
numTxs: 0,
numTxsNotFound: 0,
numTxsAlreadyMined: 0,
};
function logTxStats() {
const txsNotFoundPerc = (
(txStats.numTxsNotFound / txStats.numTxs) *
100
).toFixed(1);
const txsAlreadyMinedPerc = (
(txStats.numTxsAlreadyMined / txStats.numTxs) *
100
).toFixed(1);
logger.info(
`numTxs: ${txStats.numTxs}, ` +
`numTxsAlreadyMined: ${txStats.numTxsAlreadyMined} (${txsAlreadyMinedPerc}%), ` +
`numTxsNotFound: ${txStats.numTxsNotFound} (${txsNotFoundPerc}%)`
);
}
setInterval(() => {
logTxStats();
}, 1000);