The eth_getUncleByBlockNumberAndIndex
method returns information about an uncle (ommer) block by a block number and uncle index position.
Returns information about the uncle (ommer) block by the block number and uncle index position.
Block number in hex format or tags: latest, earliest, pending, safe, finalized
The index position of the uncle (hex)
The uncle block object, or null if not found
Uncle block's number (hex)
Hash of the uncle block
Hash of the parent block
Nonce used in block mining/validation (PoW blocks only)
SHA3 hash of the uncles data in the block
Bloom filter for light clients to quickly retrieve related logs
Root of the transaction trie for this block
Root of the state trie for this block
Root of the receipts trie for this block
Address that received the mining reward
Difficulty target for this block (hex)
Total difficulty of chain up to this block (hex)
Extra data included by the miner in the block
Block size in bytes (hex)
Maximum gas allowed in this block (hex)
Total gas used by all transactions in this block (hex)
Unix timestamp when block was collated (hex)
Array of uncle hashes (will be empty for uncle blocks)
The blockNumber
parameter accepts:
"earliest"
for the genesis block"latest"
for the most recently mined block"pending"
for the pending state/transactions"safe"
for the most recent block that's safe from reorgs"finalized"
for the most recent finalized block{
"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": []
}
}
Uncle blocks (also called ommers) are valid blocks that were mined but not included in the main blockchain. This happens when two miners find a valid block at nearly the same time, but only one can be accepted into the main chain.
Both methods retrieve the same uncle block data, but they use different reference methods:
eth_getUncleByBlockNumberAndIndex
- Uses the block number (or named tag like "latest") to identify the block containing the uncleeth_getUncleByBlockHashAndIndex
- Uses the block hash to identify the block containing the uncleThe number parameter is often more convenient as it allows using block tags like "latest" and is easier to work with sequentially, while hash-based lookups provide absolute reference certainty.
Uncle rates in Ethereum have historically been important metrics:
// Get the latest uncle block
async function getLatestUncle() {
// First, find a recent block with uncles
let blockNumber = "latest";
let uncleCount = 0;
while (uncleCount === 0) {
// Get the block
const block = await provider.send("eth_getBlockByNumber", [blockNumber, false]);
// Check uncle count
uncleCount = block.uncles.length;
// If no uncles, check previous block
if (uncleCount === 0) {
blockNumber = "0x" + (parseInt(block.number, 16) - 1).toString(16);
}
}
// Once we find a block with uncles, get the first uncle
const uncleBlock = await provider.send("eth_getUncleByBlockNumberAndIndex", [
blockNumber,
"0x0"
]);
return uncleBlock;
}