isBlockhashValid RPCメソッドは、以前に取得したブロックハッシュがネットワークによってまだ有効と見なされているかどうかを確認します。ブロックハッシュには限られた寿命(約2分、または150ブロック)があり、それ以降、それらを参照するトランザクションは拒否されます。
このメソッドは、トランザクションの送信前にしばらくブロックハッシュを保持するアプリケーションにとって重要であり、期限切れのブロックハッシュによるトランザクションの失敗を防ぐためです。
バージョンノート: このメソッドはsolana-core v1.9以降で利用可能です。solana-core v1.8以前を実行しているノードの場合、getFeeCalculatorForBlockhashを使用する必要があります。これは、手数料情報に加えてブロックハッシュの有効性も暗黙的に示します(ブロックハッシュが古すぎる場合はエラーになります)。
一般的な使用ケース
- トランザクションの再送信: 失敗したトランザクションを再試行する前に、元のブロックハッシュがまだ有効であるか確認します。有効でない場合は、新しいブロックハッシュを取得する必要があります。
- 遅延トランザクション署名: トランザクションが準備され、後で署名されて送信される場合は、送信直前にブロックハッシュの有効性を確認します。
- 楽観的トランザクション処理: トランザクションを直ちに送信する場合、ブロックハッシュがネットワークによって受け入れられる可能性があるかどうかを確認します。
リクエストパラメータ
blockhash(string, 必須): チェックするブロックハッシュを、base-58 エンコードされた文字列として指定します。options(object, オプション): オプションの設定オブジェクトには次を含めることができます:commitment(string, オプション): クエリのコミットメントレベルを指定します(例:"finalized","confirmed","processed")。省略した場合、ノードのデフォルトのコミットメントが使用されます。minContextSlot(u64, オプション): リクエストが評価されることができる最小スロットです。これにより、minContextSlotより古いスロットからのステータスでRPCノードが応答しないようにします。
応答構造
JSON-RPC応答内のresultフィールドは、以下を含むRpcResponseオブジェクトです:
context(object): 次を含むオブジェクト:slot(u64): RPCノードがブロックハッシュの有効性を評価したスロット。
value(boolean): ブロックハッシュがまだ有効であればtrue、そうでなければfalse。
コード例
開発者向けヒント
- ブロックハッシュは期限切れになる: ブロックハッシュは限られた時間(約150スロット、または約1~2分)のみ有効です。時間が経過した場合や不明な場合は、常に新鮮なブロックハッシュを取得してください。
minContextSlotの使用法: ステールなRPCノードをクエリして実際には古すぎるブロックハッシュに対して「有効」な応答が得られるのを防ぐために、minContextSlotを使用します。- 古いノードの代替手段: Solanaバージョン1.9以前を実行しているノードの場合、
getFeeCalculatorForBlockhash("<YOUR_BLOCKHASH>")を使用します。このメソッドが成功すればブロックハッシュは有効です。エラーが発生する(通常はブロックハッシュが見つからないか古すぎる場合)と、ブロックハッシュは無効です。 - ネットワーク確認: たとえ
isBlockhashValidがtrueを返したとしても、トランザクションは送信後にネットワーク上の所望のコミットメントレベルに達して初めて最終決定されます。
isBlockhashValid RPCメソッドを効果的に使用するために必要な詳細を提供します。
関連メソッド
getLatestBlockhash
新しいトランザクション用の最新のブロックハッシュを取得