Ethereum/Core API/eth_getBlockByHash

eth_getBlockByHash

eth_getBlockByHash 方法返回通过其唯一 32 字节哈希标识的特定区块的综合信息。这种强大的方法提供对所有区块属性的访问,包括交易、gas 指标、矿工信息、时间戳等,使其成为区块链浏览器和数据分析的必备工具。

使用场景

  • 区块浏览器和区块链分析平台
  • 交易验证和历史分析
  • 网络监控和性能指标
  • 智能合约部署确认和跟踪
  • 历史数据分析和时间序列研究
  • 共识验证和链重组检测
  • 区块链取证分析
  • 跨链区块验证

方法详情

此方法使用区块哈希作为标识符检索特定区块的详细数据,可选择包含完整的交易详情或仅交易哈希。

参数:

区块的哈希值(32 字节)

如果为 true,返回完整交易对象;如果为 false,仅返回交易哈希

返回值:

区块对象,如果未找到区块则为 null

十六进制格式的每单位 gas 基础费用(EIP-1559 后)

十六进制格式的区块难度

此区块的额外数据字段

十六进制格式的区块允许的最大 gas

十六进制格式的所有交易使用的总 gas

区块的哈希,如果待处理则为 null

日志的布隆过滤器,如果待处理则为 null

矿工/验证者的地址

十六进制格式的 256 位哈希

工作量证明的哈希,如果待处理则为 null

十六进制格式的区块号,如果待处理则为 null

父区块的哈希

收据树的根

叔块数据的 SHA3

此区块的大小,以字节为单位(十六进制)

最终状态树的根

区块整理时的 Unix 时间戳

直到此区块的链的总难度

交易对象或哈希的数组

交易树的根

叔块哈希的数组

验证者提款数组(EIP-4895 后)

提款的默克尔根(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"
			// ... 其他交易哈希
		],
		"transactionsRoot": "0x39f9c7a211b008becd35bfbceaf186d564fcb737a9c026f8af7b5d89a8989143",
		"uncles": [],
		"withdrawals": [
			{
				"index": "0x57ca86",
				"validatorIndex": "0x17384",
				"address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
				"amount": "0x12a05f200"
			}
			// ... 其他提款
		],
		"withdrawalsRoot": "0x36a75a6993b676f8196354ed14e3c77167b9ae823211706b30aa125c3a5dac28"
	}
}

关键区块属性解释

  • number:链中的区块号(高度)
  • timestamp:区块创建时的 Unix 时间戳(自纪元以来的秒数)
  • transactions:此区块中包含的交易列表
  • gasUsed/gasLimit:实际消耗的 gas 与最大允许量的对比
  • baseFeePerGas:EIP-1559 引入的每单位 gas 基础费用
  • miner:接收区块奖励的地址(PoS 中的验证者)
  • difficulty:挖矿难度(合并后始终为 0)
  • totalDifficulty:直到此区块的累计难度
  • withdrawals:上海升级后可用的验证者提款

交易详情标志

第二个参数决定如何返回交易数据:

  • false:仅返回交易哈希(区块扫描更高效)
  • true:返回完整交易对象(当需要交易详情时有用)

实际示例

// 检索和处理重要区块的示例
const significantBlocks = {
	'The Merge Block': '0x4f32106f6ac5b44248aeda10c3e718f1048ddc274629cd1897a0ff1f7926c41e',
	'First EIP-1559 Block': '0x9b83c12c569ba25654ce34563540e58a0f8acee4645178544a2a35ccfbdba6cc',
};

async function getHistoricalBlock(label) {
	const blockHash = significantBlocks[label];
	const blockInfo = await provider.send('eth_getBlockByHash', [blockHash, false]);

	// 分析
	const timestamp = new Date(parseInt(blockInfo.timestamp, 16) * 1000);
	const gasUsedPercent = (parseInt(blockInfo.gasUsed, 16) / parseInt(blockInfo.gasLimit, 16)) * 100;

	console.log(`${label} mined on ${timestamp.toUTCString()}`);
	console.log(`Gas utilization: ${gasUsedPercent.toFixed(2)}%`);
	console.log(`Transactions: ${blockInfo.transactions.length}`);
}

另请参阅

帮助我们变得更好!
分享此页面并帮助我们为您创建更好的产品。