El método eth_getBlockByNumber
recupera información detallada sobre un bloque por su número o utilizando identificadores especiales de bloque como "latest". Este método esencial proporciona acceso completo a datos del bloque incluyendo transacciones, uso de gas, marcas de tiempo y otras métricas cruciales de la blockchain, convirtiéndolo en una herramienta fundamental para aplicaciones blockchain.
Este método permite consultar bloques por su altura en la cadena o usando etiquetas predefinidas, con opciones para incluir objetos completos de transacción o solo hashes.
Número de bloque en formato hexadecimal o etiquetas: latest, earliest, pending, safe, finalized
Si es true, devuelve objetos completos de transacción; si es false, devuelve solo hashes de transacción
Un objeto de bloque, o null si no se encontró ningún bloque
Tarifa base por gas en hexadecimal (post EIP-1559)
La dificultad de este bloque en hexadecimal
Campo de datos extra de este bloque
Gas máximo permitido en este bloque en hexadecimal
Gas total utilizado por todas las transacciones en hexadecimal
Hash del bloque, null si está pendiente
Filtro Bloom para los logs, null si está pendiente
Dirección del minero/validador
Hash de 256 bits en hexadecimal
Hash de la prueba de trabajo, null si está pendiente
Número de bloque en hexadecimal, null si está pendiente
Hash del bloque padre
Raíz del trie de recibos
SHA3 de los datos de los tíos
Tamaño de este bloque en bytes (hexadecimal)
Raíz del trie de estado final
Marca de tiempo Unix cuando se recopiló el bloque
Dificultad total de la cadena hasta este bloque
Array de objetos de transacción o hashes
Raíz del trie de transacciones
Array de hashes de tíos
Array de retiros de validadores (post EIP-4895)
Raíz Merkle de retiros (post EIP-4895)
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"baseFeePerGas": "0x41a2b3591",
"difficulty": "0x0",
"extraData": "0x556e697377617020426c6f636b20231242353045",
"gasLimit": "0x1c9c380",
"gasUsed": "0x189b1f1",
"hash": "0x4f32106f6ac5b44248aeda10c3e718f1048ddc274629cd1897a0ff1f7926c41e",
"logsBloom": "0xe54b0921498ad482b83...[truncated]",
"miner": "0x690B9A9E9aa1C9dB991C7721a92d351Db4FaC990",
"mixHash": "0x51c1b337d7ec2023e7bfd47907a1ee256668e46fb9feb0007c62f9bc2a8a19a7",
"nonce": "0x0000000000000000",
"number": "0x112a880",
"parentHash": "0xeea8dce30e2d7c2a7ffe35b6fc2c60782f59a123ff2812e85bf4a49839c6d5a2",
"receiptsRoot": "0x14a87619e588c1ef9f8c69fd8e3dff2a49b2c73f19871a74a7e1d97d67d00416",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size": "0x1284d",
"stateRoot": "0xb87823a3aea0dd94ffe84481962c8f988e3c2ffac98a9af2b81c1c3e4fcc6dc0",
"timestamp": "0x65f0d46e",
"totalDifficulty": "0xc70d815d562d3cfa955",
"transactions": [
"0x5a8b22ab3e70ee6ee4b15b48b1c88d8c01806a677ab8938c68dc4323cf51ae7a",
"0x8d2fcaa1aef4f4f19aa35bf9d91b34e24902efcaf670953a0bf7e0a6dc585e53"
// ... hashes de transacciones adicionales
],
"transactionsRoot": "0x39f9c7a211b008becd35bfbceaf186d564fcb737a9c026f8af7b5d89a8989143",
"uncles": [],
"withdrawals": [
{
"index": "0x57ca86",
"validatorIndex": "0x17384",
"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"amount": "0x12a05f200"
}
// ... retiros adicionales
],
"withdrawalsRoot": "0x36a75a6993b676f8196354ed14e3c77167b9ae823211706b30aa125c3a5dac28"
}
}
latest
: El bloque minado más recientemente (uso más común)earliest
: Bloque génesis (bloque 0)pending
: Bloque actualmente pendiente (transacciones en el mempool)safe
: Último bloque considerado seguro por la red (finalidad en progreso)finalized
: Último bloque que ha logrado finalidad (post-Merge)El segundo parámetro determina cómo se devuelven los datos de transacción:
false
: Solo se devuelven los hashes de transacción (más eficiente para escaneo de bloques)true
: Se devuelven objetos completos de transacción (útil para análisis detallado de transacciones)// Ejemplo de seguimiento de tiempos de bloque y volúmenes de transacciones
async function analyzeNetworkActivity() {
const latestBlock = await provider.send('eth_getBlockByNumber', ['latest', false]);
const prevBlockNum = (parseInt(latestBlock.number, 16) - 100).toString(16);
const prevBlock = await provider.send('eth_getBlockByNumber', [`0x${prevBlockNum}`, false]);
// Calcular tiempo entre bloques
const latestTime = parseInt(latestBlock.timestamp, 16);
const prevTime = parseInt(prevBlock.timestamp, 16);
const timespan = latestTime - prevTime;
const avgBlockTime = timespan / 100;
// Volumen de transacciones
const txCount = latestBlock.transactions.length;
const gasUsed = parseInt(latestBlock.gasUsed, 16);
console.log(`Average block time: ${avgBlockTime.toFixed(2)} seconds`);
console.log(`Latest block transactions: ${txCount}`);
console.log(`Gas used: ${gasUsed.toLocaleString()} units`);
}