getBlock RPC 方法允许您检索 Solana 分类账中已确认区块的详细信息。这对于区块浏览器、交易历史分析以及理解特定时间点的链状态至关重要。
常见用例
- 检查区块内容: 查看特定区块中包含的所有交易。
- 检索区块哈希: 获取给定插槽的区块哈希,其父区块哈希及其父插槽。
- 检查区块高度和时间: 找出区块的高度(其序列号)及其估计的生产时间。
- 分析交易详情: 使用适当的参数,您可以获取完整的交易数据,包括费用、状态、前/后余额和内部指令等元数据。
- 获取奖励: 可选择性地包括区块的奖励信息。
参数
-
slot(数字,必需):要查询的区块的槽位号(u64)。 -
config(对象,可选):具有以下字段的配置对象:commitment(字符串,可选):指定要使用的承诺级别。此方法不支持processed。默认为finalized。encoding(字符串,可选):交易数据的编码。如果transactionDetails是full或accounts,默认为json,否则为base64。json:以 JSON 格式返回交易和账户数据(不推荐,建议使用jsonParsed)。jsonParsed:返回解析后的 JSON 形式的交易和账户数据。建议使用,因为它包含所有交易账户密钥(包括地址查找表中的密钥)。base58(慢)base64base64+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。
示例:获取区块信息
让我们尝试在 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 上的槽位、区块和纪元。