El método eth_getUncleByBlockNumberAndIndex
devuelve información sobre un bloque tío (ommer) mediante un número de bloque y la posición del índice del tío.
Devuelve información sobre el bloque tío (ommer) mediante el número del bloque y la posición del índice del tío.
Número de bloque en formato hexadecimal o etiquetas: latest, earliest, pending, safe, finalized
La posición del índice del tío (hex)
El objeto de bloque tío, o null si no se encuentra
Número del bloque tío (hex)
Hash del bloque tío
Hash del bloque padre
Nonce usado en minería/validación de bloques (solo bloques PoW)
Hash SHA3 de los datos de tíos en el bloque
Filtro Bloom para que los clientes ligeros recuperen rápidamente logs relacionados
Raíz del trie de transacciones para este bloque
Raíz del trie de estado para este bloque
Raíz del trie de recibos para este bloque
Dirección que recibió la recompensa de minería
Objetivo de dificultad para este bloque (hex)
Dificultad total de la cadena hasta este bloque (hex)
Datos extra incluidos por el minero en el bloque
Tamaño del bloque en bytes (hex)
Gas máximo permitido en este bloque (hex)
Gas total usado por todas las transacciones en este bloque (hex)
Marca de tiempo Unix cuando se recopiló el bloque (hex)
Array de hashes de tíos (estará vacío para bloques tío)
El parámetro blockNumber
acepta:
"earliest"
para el bloque génesis"latest"
para el bloque minado más recientemente"pending"
para el estado/transacciones pendientes"safe"
para el bloque más reciente que está a salvo de reorganizaciones"finalized"
para el bloque finalizado más reciente{
"jsonrpc": "2.0",
"id": 1,
"result": {
"difficulty": "0x57f17a09378",
"extraData": "0x476574682f76312e302e302f6c696e75782f676f312e342e32",
"gasLimit": "0x1388",
"gasUsed": "0x0",
"hash": "0x932bdf904546a2287a2c9b2ede37925f698a7657484b172d4e5184f80bdd464d",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171",
"mixHash": "0x4500aa4ee2b3044a155252e35273770edeb2ab6f8cb19ca8e732771484462169",
"nonce": "0x24732773618271bc",
"number": "0x299",
"parentHash": "0xa779859b1ee558258b7008bbabff272280136c5dd3eb3ea3bfa8f6ae03bf91e5",
"receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size": "0x21d",
"stateRoot": "0x2604fbf5183f5360da249b51f1b9f1e0f315d2ff3ffa1a4143ff221ad9ca1fec",
"timestamp": "0x55ba4827",
"totalDifficulty": null,
"transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"uncles": []
}
}
Los bloques tío (también llamados ommers) son bloques válidos que fueron minados pero no incluidos en la blockchain principal. Esto sucede cuando dos mineros encuentran un bloque válido casi al mismo tiempo, pero solo uno puede ser aceptado en la cadena principal.
Ambos métodos recuperan los mismos datos de bloque tío, pero utilizan diferentes métodos de referencia:
eth_getUncleByBlockNumberAndIndex
- Usa el número de bloque (o etiqueta nombrada como "latest") para identificar el bloque que contiene al tíoeth_getUncleByBlockHashAndIndex
- Usa el hash del bloque para identificar el bloque que contiene al tíoEl parámetro de número es a menudo más conveniente ya que permite usar etiquetas de bloque como "latest" y es más fácil trabajar secuencialmente, mientras que las búsquedas basadas en hash proporcionan certeza de referencia absoluta.
Las tasas de tíos en Ethereum han sido métricas importantes históricamente:
// Obtener el último bloque tío
async function getLatestUncle() {
// Primero, encontrar un bloque reciente con tíos
let blockNumber = "latest";
let uncleCount = 0;
while (uncleCount === 0) {
// Obtener el bloque
const block = await provider.send("eth_getBlockByNumber", [blockNumber, false]);
// Verificar el conteo de tíos
uncleCount = block.uncles.length;
// Si no hay tíos, verificar el bloque anterior
if (uncleCount === 0) {
blockNumber = "0x" + (parseInt(block.number, 16) - 1).toString(16);
}
}
// Una vez que encontramos un bloque con tíos, obtener el primer tío
const uncleBlock = await provider.send("eth_getUncleByBlockNumberAndIndex", [
blockNumber,
"0x0"
]);
return uncleBlock;
}