eth_getUncleByBlockNumberAndIndex
方法通过区块号和叔块索引位置返回有关叔块(ommer)的信息。
通过区块号和叔块索引位置返回有关叔块(ommer)的信息。
十六进制格式的区块号或标签: latest, earliest, pending, safe, finalized
叔块的索引位置(十六进制)
叔块对象,如果未找到则为null
叔块的区块号(十六进制)
叔块的哈希
父区块的哈希
区块挖矿/验证中使用的随机数(仅限PoW区块)
区块中叔块数据的SHA3哈希
供轻客户端快速检索相关日志的布隆过滤器
此区块的交易树根
此区块的状态树根
此区块的收据树根
接收挖矿奖励的地址
此区块的难度目标(十六进制)
截至此区块的链总难度(十六进制)
矿工在区块中包含的额外数据
区块大小,以字节为单位(十六进制)
此区块允许的最大gas(十六进制)
此区块中所有交易使用的总gas(十六进制)
区块整理时的Unix时间戳(十六进制)
叔块哈希数组(对于叔块,此数组将为空)
blockNumber
参数接受:
"earliest"
表示创世区块"latest"
表示最近挖出的区块"pending"
表示待处理状态/交易"safe"
表示最近的防重组安全区块"finalized"
表示最近的最终确定区块{
"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": []
}
}
叔块(也称为ommer)是有效的区块,它们被成功挖出但未被包含在主区块链中。当两个矿工几乎同时找到有效区块时,这种情况就会发生,但主链中只能接受其中一个。
这两种方法检索相同的叔块数据,但使用不同的引用方式:
eth_getUncleByBlockNumberAndIndex
- 使用区块号(或"latest"之类的命名标签)来识别包含叔块的区块eth_getUncleByBlockHashAndIndex
- 使用区块哈希来识别包含叔块的区块区块号参数通常更方便,因为它允许使用"latest"之类的区块标签,并且在顺序处理时更容易使用,而基于哈希的查找提供了绝对引用确定性。
以太坊中的叔块率历来是重要的指标:
// 获取最新的叔块
async function getLatestUncle() {
// 首先,找到一个包含叔块的最近区块
let blockNumber = "latest";
let uncleCount = 0;
while (uncleCount === 0) {
// 获取区块
const block = await provider.send("eth_getBlockByNumber", [blockNumber, false]);
// 检查叔块数量
uncleCount = block.uncles.length;
// 如果没有叔块,检查前一个区块
if (uncleCount === 0) {
blockNumber = "0x" + (parseInt(block.number, 16) - 1).toString(16);
}
}
// 一旦找到包含叔块的区块,获取第一个叔块
const uncleBlock = await provider.send("eth_getUncleByBlockNumberAndIndex", [
blockNumber,
"0x0"
]);
return uncleBlock;
}