getLatestBlockhash RPC 方法对于在 Solana 网络上准备和发送交易至关重要。它检索节点处理的最新 blockhash,以及该 blockhash 将保持有效的最后区块高度。有关如何有效使用 blockhashes 并确保您的交易成功的更多详细信息,请参阅我们的综合指南。 在 Solana 上的每笔交易都必须引用一个最近的 blockhash。此机制有助于防止某些类型的攻击,例如在分叉链上的交易重放。 版本说明: 此方法在 solana-core v1.9 或更新版本中可用。对于运行 solana-core v1.8 或更早版本的节点,请改用 getRecentBlockhash 方法。

常见用例

  • 交易构建: 在签署和发送新交易之前,获取一个最近的 blockhash 以包含在交易中。
  • 交易生命周期管理: 使用 lastValidBlockHeight 了解引用获取的 blockhash 的交易可以预期保持有效的时间。
  • 预检检查: 虽然 simulateTransaction 可以隐式执行此操作,但应用程序可能会获取一个 blockhash 以手动准备交易进行模拟。

请求参数

此方法可以选择性地接受一个包含以下参数的配置对象:
  • commitment(字符串,可选):指定查询的承诺级别。如果省略,则使用节点的默认承诺。对于交易,通常使用 confirmedfinalized 以确保 blockhash 来自链的相对稳定部分。
  • minContextSlot(整数,可选):请求可以评估的最小槽位。这确保查询针对已处理到至少此槽位的分类账状态进行。

响应结构

JSON-RPC 响应的 result 字段将是一个 RpcResponse 对象。此对象中的 value 字段包含:
  • blockhash (字符串): 一个 base-58 编码的字符串,表示最新的区块哈希。
  • lastValidBlockHeight (u64): blockhash 将过期的区块高度。引用此 blockhash 的交易在网络达到此 lastValidBlockHeight 之前有效。
响应还包括一个 context 对象,其中包含检索信息时的 slot

示例

1. 使用默认承诺获取最新区块哈希

此示例使用节点的默认承诺获取最新的区块哈希。
# Replace <api-key> with your Helius API key
curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getLatestBlockhash"
  }'

2. 使用 ‘confirmed’ 承诺获取最新区块哈希

此示例明确请求使用 confirmed 承诺获取最新的区块哈希。
# Replace <api-key> with your Helius API key
curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getLatestBlockhash",
    "params": [{ "commitment": "confirmed" }]
  }'

开发者提示

  • 区块哈希有效性: 区块哈希的有效时间有限,大约为 2 分钟(尽管可能有所不同)。交易必须在其 lastValidBlockHeight 通过之前由网络确认。如果自上次获取以来已经过了相当长的时间,请始终获取新的区块哈希。
  • 选择承诺: 对于关键交易,使用 finalized 承诺提供了最强的保证,即区块哈希来自主链分叉,但可能稍旧。confirmed 提供了良好的平衡。了解更多关于承诺级别的详细信息。
  • 交易费用: 请记得计算并包括适当的交易费用。区块哈希本身不决定费用。
  • 重试逻辑: 如果交易因其 lastValidBlockHeight 通过而过期,您必须使用新的、更近期的区块哈希重新签名并重新提交。
本指南提供了有效使用getLatestBlockhash的步骤,这是通过交易与Solana网络交互的基石。