eth_getBlockReceipts
方法在单次调用中返回给定区块的所有交易收据。当您需要同一区块中多个交易的数据时,这种高效方法比请求单个收据的性能显著更高,使其对区块链索引器和分析平台至关重要。
该方法检索指定区块中所有交易的综合结果,包括状态、gas 使用情况、日志和事件。
十六进制格式的区块号或标签:latest, earliest, pending, safe, finalized
交易收据对象数组,每个包含:
包含此交易的区块哈希
十六进制格式的区块号
创建的合约地址(如果是合约创建),否则为 null
区块中包括此交易在内的所有交易使用的总 gas
实际支付的每单位 gas 价格,以 wei 为单位(十六进制)
发送者地址
此特定交易使用的 gas
此交易生成的日志对象数组
轻客户端用于快速检索相关日志的布隆过滤器
1(成功)或 0(失败)
接收者地址,或合约创建时为 null
交易哈希
交易在区块中的索引位置
交易类型(0=传统, 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"
}
// 其他收据...
]
}
0x1
,失败交易为 0x0
日志中最常见的事件签名:
0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925
0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
(与 ERC-20 相同)0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62
0x4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb
与单独的收据请求相比,该方法提供显著的性能优势:
// 示例:分析区块中的代币转账
async function analyzeTokenTransfers(blockNumber) {
const receipts = await provider.send('eth_getBlockReceipts', [blockNumber]);
// 常见 ERC-20 Transfer 事件签名
const transferTopic = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';
// 跟踪所有代币转账
const tokenTransfers = {};
receipts.forEach((receipt) => {
// 跳过失败的交易
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;
}
// 使用
const transfers = await analyzeTokenTransfers('0x112BDE2');
console.log(`Found transfers for ${Object.keys(transfers).length} different tokens`);