getBlock RPC 方法允许您检索 Solana 分类账中已确认区块的详细信息。这对于区块浏览器、交易历史分析以及理解特定时间点的链状态至关重要。
避免批处理以提高性能批处理归档方法会显著增加延迟。不允许超过10个请求的批处理。
常见用例
- 检查区块内容: 查看特定区块中包含的所有交易。
- 检索区块哈希: 获取给定插槽的区块哈希,其父区块哈希及其父插槽。
- 检查区块高度和时间: 找出区块的高度(其序列号)及其估计的生产时间。
- 分析交易详情: 使用适当的参数,您可以获取完整的交易数据,包括费用、状态、前/后余额和内部指令等元数据。
- 获取奖励: 可选择性地包括区块的奖励信息。
-
slot(数字,必需):要查询的区块的槽位号(u64)。
-
config(对象,可选):具有以下字段的配置对象:
commitment(字符串,可选):指定要使用的承诺级别。此方法不支持 processed。默认为 finalized。
encoding(字符串,可选):交易数据的编码。如果 transactionDetails 是 full 或 accounts,默认为 json,否则为 base64。
json:以 JSON 格式返回交易和账户数据(不推荐,建议使用 jsonParsed)。
jsonParsed:返回解析后的 JSON 形式的交易和账户数据。建议使用,因为它包含所有交易账户密钥(包括地址查找表中的密钥)。
base58(慢)
base64
base64+zstd
transactionDetails(字符串,可选):指定要返回的交易详细级别。默认为 full。
full:返回完整的交易细节,包括交易元数据。
accounts:返回每个交易中详细的账户列表,但不包括完整的交易数据或元数据。
signatures:仅返回交易签名。
none:不返回交易详细信息。
rewards(布尔值,可选):是否在响应中包含奖励数组。默认为 false。
maxSupportedTransactionVersion(数字,可选):要返回的最大交易版本。如果区块包含更高版本的交易,请求将因 JSON-RPC 错误 -32015 而失败。如果省略,则仅返回遗留交易,并且包含任何版本化交易的区块将导致错误。设置为 1 以包括遗留、v0(地址查找表)和 v1 交易。参见交易 v1 支持。
如果指定的区块已确认且找到,result 字段将是一个包含区块信息的对象。如果未找到或未确认区块,result 将为 null。
区块对象中的关键字段包括:
blockhash(字符串):此区块的 Base-58 编码区块哈希。
previousBlockhash(字符串):上一个区块的 Base-58 编码区块哈希。如果父区块不可用(由于分类账清理),可能是系统程序 ID。
parentSlot(数字):父区块的槽位号。
transactions(数组):包含在区块中的交易对象数组。这些对象的结构取决于 encoding 和 transactionDetails 参数。
- 每个交易对象通常包含
meta(如费用、状态、日志、前后余额的元数据)和 transaction(实际的交易数据,包括消息和签名)。
rewards(数组,可选):奖励对象数组,在指定 rewards: true 时存在。每个对象详细描述 pubkey、lamports、postBalance、rewardType,以及可能的 commission。
blockTime(数字 | null):区块的估计生成时间,以 Unix 时间戳(自纪元以来的秒数)表示,或如果不可用则为 null。
blockHeight(数字 | null):此区块的高度(其前面的区块数量,从槽位 0 开始的链),或如果不可用则为 null。
请参阅官方 Solana RPC 文档以获取响应中交易和元对象的完整详细结构。
示例:获取区块信息
让我们尝试在 Devnet 上获取一个示例槽位号的信息。
重要: 槽位号处理速度很快。以下使用的槽位号(250000000)是一个占位符。运行示例时,您应该用您知道存在于目标网络(例如,Devnet 或 Mainnet)上的最近确认槽位替换它。您可以使用 Solana 区块浏览器找到最近的槽位号。
注意: 在以下示例中,替换 YOUR_API_KEY 为您的实际 Helius API 密钥。
开发者提示
- 槽位与区块高度: 请记住,
getBlock 需要一个 slot 编号作为输入,而不一定是区块高度。虽然槽位是连续的,但某些槽位可能会被领导者跳过。响应中的 blockHeight 字段指示此区块之前的实际区块数量。
maxSupportedTransactionVersion 是关键: 要检查带有版本化交易的区块(现在已标准化并使用地址查找表),您必须设置 maxSupportedTransactionVersion: 1(如果有新标准出现,则设置更高版本)。忽略此项将导致大多数现代区块出错。
- 选择
transactionDetails:
full 是大多数详细分析所需的,但返回的数据最多。
- 如果您只需要列出区块中的交易,
signatures 很有用。
accounts 可以作为中间立场,如果您需要查看参与账户而不获取所有指令数据。
none 较为罕见,但如果您只关心区块级元数据如 blockhash 或 rewards,可以使用。
- 推荐使用
jsonParsed 进行编码: 请求交易详情时,jsonParsed 提供了最方便开发者使用的输出,并正确解析地址查找表中的账户,而 json(已弃用)则无法做到这一点。
- 区块不可用:
null 结果意味着在该槽位上的区块未找到。可能是因为该槽位被跳过,该区块尚未被确认达到您指定的 commitment 级别,或者 RPC 节点已从其分类账中修剪了该历史区块(老槽位常见)。
- 奖励信息: 设置
rewards: true 是查看区块奖励分配给验证者(以及可能的权益质押者,取决于奖励类型)的必要条件。这会增加响应的大小。
- 理解区块结构: 要更深入地了解区块如何融入 Solana 的架构,请参见理解 Solana 上的槽位、区块和纪元。