El método eth_getBlockReceipts
devuelve todos los recibos de transacciones para un bloque dado en una sola llamada. Este método altamente eficiente es significativamente más eficaz que solicitar recibos individuales cuando necesitas datos para múltiples transacciones en el mismo bloque, haciéndolo esencial para indexadores de blockchain y plataformas de análisis.
Este método recupera resultados completos de transacciones, incluyendo estado, uso de gas, logs y eventos para todas las transacciones en un bloque especificado.
Número de bloque en formato hexadecimal o etiquetas: latest, earliest, pending, safe, finalized
Array de objetos de recibo de transacción, cada uno contiene:
Hash del bloque que contiene esta transacción
Número de bloque en hexadecimal
Dirección del contrato creado (si es creación de contrato), de lo contrario null
Gas total usado en el bloque hasta e incluyendo esta transacción
Precio por gas realmente pagado, en wei (hexadecimal)
Dirección del remitente
Gas usado por esta transacción específica
Array de objetos de log generados por esta transacción
Filtro Bloom para que los clientes ligeros recuperen rápidamente los logs relacionados
1 (éxito) o 0 (fracaso)
Dirección del destinatario, o null para creación de contrato
Hash de la transacción
Posición del índice de la transacción en el bloque
Tipo de transacción (0=legacy, 1=EIP2930, 2=EIP1559)
{
"jsonrpc": "2.0",
"id": 1,
"result": [
{
"blockHash": "0xb5876cd604e2234f800817ef7d744b55e3de0750679923ad3c8f3a3439f8095c",
"blockNumber": "0x112bde2",
"contractAddress": null,
"cumulativeGasUsed": "0x21880",
"effectiveGasPrice": "0x4940d0306",
"from": "0x95222290DD7278Aa3Ddd389Cc1E1d165CC4BAfe5",
"gasUsed": "0x21880",
"logs": [
{
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"topics": [
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"0x00000000000000000000000095222290dd7278aa3ddd389cc1e1d165cc4bafe5",
"0x000000000000000000000000333cb957ceaab5a7d2fd1f046f6a4481a52d7378"
],
"data": "0x000000000000000000000000000000000000000000000000000000000513cafb",
"blockNumber": "0x112bde2",
"transactionHash": "0x4e7c53bec74550e8c4bb3642c21708134f434994b122a3d6321ec718e743281d",
"transactionIndex": "0x0",
"blockHash": "0xb5876cd604e2234f800817ef7d744b55e3de0750679923ad3c8f3a3439f8095c",
"logIndex": "0x0",
"removed": false
}
],
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000000000000000000000020000000004000000000000000000000000000000000000000000000000000000000",
"status": "0x1",
"to": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"transactionHash": "0x4e7c53bec74550e8c4bb3642c21708134f434994b122a3d6321ec718e743281d",
"transactionIndex": "0x0",
"type": "0x2"
},
{
"blockHash": "0xb5876cd604e2234f800817ef7d744b55e3de0750679923ad3c8f3a3439f8095c",
"blockNumber": "0x112bde2",
"contractAddress": null,
"cumulativeGasUsed": "0x36f10",
"effectiveGasPrice": "0x484c172f0",
"from": "0xE4395bc3d18B93D5F22e75bA15704e7a5B0ca77f",
"gasUsed": "0x15690",
"logs": [
{
"address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"topics": [
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"0x000000000000000000000000e4395bc3d18b93d5f22e75ba15704e7a5b0ca77f",
"0x00000000000000000000000001d1d3b37d6a73adcbe2d6c4a330b6b244f48d5a"
],
"data": "0x0000000000000000000000000000000000000000000000000000000016be7dbf",
"blockNumber": "0x112bde2",
"transactionHash": "0x87c3f77d7c2755c9a3b94985c17b97cedd96b2afb2a916e50e4357e2188a46ec",
"transactionIndex": "0x1",
"blockHash": "0xb5876cd604e2234f800817ef7d744b55e3de0750679923ad3c8f3a3439f8095c",
"logIndex": "0x1",
"removed": false
}
],
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000000000000000000000020000010000000000000000000000000000000000000000000000000000000000000",
"status": "0x1",
"to": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"transactionHash": "0x87c3f77d7c2755c9a3b94985c17b97cedd96b2afb2a916e50e4357e2188a46ec",
"transactionIndex": "0x1",
"type": "0x2"
}
// Recibos adicionales...
]
}
0x1
para transacciones exitosas, 0x0
para transacciones fallidasLas firmas de eventos más comunes que encontrarás en los logs:
0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925
0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
(igual que ERC-20)0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62
0x4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb
Este método ofrece beneficios significativos de rendimiento sobre solicitudes individuales de recibos:
// Ejemplo: Analizar transferencias de tokens en un bloque
async function analyzeTokenTransfers(blockNumber) {
const receipts = await provider.send('eth_getBlockReceipts', [blockNumber]);
// Firma de evento común de transferencia ERC-20
const transferTopic = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';
// Rastrear todas las transferencias de tokens
const tokenTransfers = {};
receipts.forEach((receipt) => {
// Omitir transacciones fallidas
if (receipt.status !== '0x1') return;
receipt.logs.forEach((log) => {
if (log.topics[0] === transferTopic) {
const token = log.address;
const from = '0x' + log.topics[1].slice(26);
const to = '0x' + log.topics[2].slice(26);
const value = BigInt(log.data);
if (!tokenTransfers[token]) {
tokenTransfers[token] = [];
}
tokenTransfers[token].push({ from, to, value });
}
});
});
return tokenTransfers;
}
// Uso
const transfers = await analyzeTokenTransfers('0x112BDE2');
console.log(`Found transfers for ${Object.keys(transfers).length} different tokens`);