El método eth_getBlockTransactionCountByNumber
devuelve el número de transacciones en un bloque, identificado por el número del bloque o etiqueta de bloque. Este método ligero proporciona una forma simple de verificar el volumen de transacciones y la actividad de red sin recuperar datos completos del bloque, haciéndolo esencial para monitorear la actividad de la cadena.
Este método permite consultar recuentos de transacciones para cualquier bloque en la cadena, incluyendo etiquetas especiales de bloque como 'latest' y 'pending'.
Número de bloque en formato hexadecimal o etiquetas: latest, earliest, pending, safe, finalized
El número de transacciones en el bloque especificado (hexadecimal)
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x9B" // 155 transacciones
}
Este método admite estas etiquetas especiales de bloque como parámetros:
latest
: Bloque minado más recientemente (uso más común)earliest
: Bloque génesis (bloque 0)pending
: Bloque actualmente pendiente (transacciones en mempool esperando ser minadas)safe
: Último bloque considerado seguro por la red (finalidad en progreso)finalized
: Último bloque que ha logrado finalidad (solo post-Merge)La respuesta es una cadena hexadecimal que necesita ser convertida a decimal:
// Convertir recuento de transacciones hex a decimal
const txCountHex = "0x9B";
const txCountDecimal = parseInt(txCountHex, 16); // 155
Los recuentos de transacciones proporcionan información valiosa sobre:
// Ejemplo: Rastrear rendimiento de transacciones a lo largo del tiempo
async function analyzeNetworkThroughput(startBlock, blockCount = 100) {
const counts = [];
let totalTxs = 0;
for (let i = 0; i < blockCount; i++) {
const blockNum = (BigInt(startBlock) + BigInt(i)).toString(16);
const txCount = await provider.send('eth_getBlockTransactionCountByNumber', [`0x${blockNum}`]);
const block = await provider.send('eth_getBlockByNumber', [`0x${blockNum}`, false]);
const timestamp = parseInt(block.timestamp, 16);
const count = parseInt(txCount, 16);
counts.push({
blockNumber: `0x${blockNum}`,
timestamp,
transactionCount: count,
});
totalTxs += count;
}
// Calcular promedios y tendencias
const avgTxPerBlock = totalTxs / blockCount;
const timespan = counts[counts.length - 1].timestamp - counts[0].timestamp;
const txPerSecond = totalTxs / timespan;
return {
blocks: counts,
averageTransactionsPerBlock: avgTxPerBlock,
transactionsPerSecond: txPerSecond,
totalTransactions: totalTxs,
timeSpanSeconds: timespan,
};
}
// Uso
const stats = await analyzeNetworkThroughput('0x118F500', 50);
console.log(`Average TPS: ${stats.transactionsPerSecond.toFixed(2)}`);
console.log(`Average transactions per block: ${stats.averageTransactionsPerBlock.toFixed(2)}`);
Los recuentos de transacciones varían significativamente entre diferentes redes compatibles con Ethereum:
Esta variación refleja diferencias en tiempos de bloque, estructuras de tarifas y patrones de uso del ecosistema.