了解 getBlock 的使用案例、代码示例、请求参数、响应结构和提示。
getBlock
RPC 方法允许您检索 Solana 分类账中已确认区块的详细信息。这对于区块浏览器、交易历史分析以及在特定时间点了解链的状态至关重要。
slot
(number, required): 要查询的区块的插槽编号 (u64)。
config
(object, optional): 一个配置对象,包含以下字段:
commitment
(string, optional): 指定要使用的承诺级别。processed
不支持此方法。默认为 finalized
。encoding
(string, optional): 交易数据的编码。默认为 json
如果 transactionDetails
是 full
或 accounts
,否则为 base64
。
json
: 以 JSON 格式返回交易和账户数据(建议使用 jsonParsed
代替)。jsonParsed
: 以解析的 JSON 返回交易和账户数据。建议使用此选项,因为它包括所有交易账户密钥(包括来自地址查找表的密钥)。base58
(slow)base64
base64+zstd
transactionDetails
(string, optional): 指定要返回的交易详细级别。默认为 full
。
full
: 返回完整的交易详情,包括交易元数据。accounts
: 返回每笔交易中详细的账户列表,但不包括完整的交易数据或元数据。signatures
: 仅返回交易签名。none
: 不返回交易详情。rewards
(boolean, optional): 是否在响应中包含奖励数组。默认为 false
。maxSupportedTransactionVersion
(number, optional): 要返回的最大交易版本。如果区块包含更高版本的交易,则返回错误。如果省略,则仅返回传统交易,且包含任何版本化交易的区块将导致错误。设置为 0
以包括使用地址查找表的版本化交易。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
如果不可用。250000000
)是一个占位符。运行示例时,应将其替换为您知道存在于目标网络(例如,Devnet 或 Mainnet)上的最近确认槽。您可以使用 Solana 区块浏览器找到最近的槽号。
注意: 在下面的示例中,将YOUR_API_KEY
替换为您实际的Helius API密钥。
getBlock
接受一个slot
数字作为输入,不一定是区块高度。虽然slots是顺序的,但有些slots可能会被领导者跳过。响应中的blockHeight
字段表示在此之前的实际区块数量。maxSupportedTransactionVersion
至关重要: 要检查带有版本化交易的区块(现在是标准并使用地址查找表),您必须设置maxSupportedTransactionVersion: 0
(或更高版本,如果出现新标准)。忘记这一点将导致大多数现代区块出现错误。transactionDetails
:
full
需要用于大多数详细分析,但返回的数据最多。signatures
在您只需要列出区块中的交易时很有用。accounts
可以是一个中间选择,如果您需要查看涉及哪些账户而不获取所有指令数据。none
很少见,但如果您只关心区块级元数据,如blockhash
或rewards
,可以使用。jsonParsed
进行编码: 在请求交易详情时,jsonParsed
提供了最适合开发者的输出,并正确解析了地址查找表中的账户,而json
(已弃用)则没有。null
结果意味着在该slot的区块未找到。这可能是因为slot被跳过,区块尚未确认到您指定的commitment
级别,或者RPC节点已从其账本中修剪了该历史区块(对于较旧的slots很常见)。rewards: true
是查看区块奖励分配给验证者(以及可能的质押者,取决于奖励类型)所必需的。这会增加响应的大小。