このgetSignatureStatuses RPCメソッドを使用すると、トランザクションシグネチャリストの処理および確認ステータスを取得できます。これは、トランザクションがネットワークによって処理、確認、または最終化されたかどうかを確認するのに役立ちます。
searchTransactionHistoryオプションが有効になっていない限り、このメソッドは主にRPCノードの最近のステータスキャッシュをクエリします。古いトランザクションの場合、searchTransactionHistoryの有効化が重要です。
パフォーマンス向上のためバッチ処理は避けるアーカイブメソッドのバッチ処理は遅延を大幅に増加させます。10リクエスト以上のバッチは許可されていません。
一般的な使用例
- トランザクションの最終性の確認: 提出されたトランザクションが希望する確認レベルに達したかどうかを確認する(例:
confirmed または finalized)。
- バッチステータスルックアップ: バッチ送信後に複数のトランザクションのステータスを効率よく確認する。
- トランザクション状態に基づくUIの更新: トランザクションのリアルタイムステータスをユーザーに反映する。
- エラーチェック: トランザクションリストの中から失敗したものを特定し、その理由を判断する。
リクエストパラメータ
signatures (array of string): (必須) Base-58でエンコードされたトランザクションシグネチャの配列。1リクエストで最大256件のシグネチャをクエリできます。
options (object, 任意): 以下のフィールドを持つオプションの設定オブジェクト:
searchTransactionHistory (boolean, 任意): trueの場合、RPCノードは完全なトランザクション履歴を検索します。false(デフォルト)の場合は、最近のステータスキャッシュのみを検索します。古い、またはドロップされた可能性のあるトランザクションには、これをtrueに設定します。
レスポンス構造
JSON-RPCレスポンスのresultフィールドには、2つのフィールドを持つオブジェクトが含まれています。
context (object): 次を含むオブジェクト:
slot (u64): このリクエストをRPCノードが処理したスロット。
value (array of object | null): リクエスト内のシグネチャの順序に対応するステータスオブジェクトの配列。各要素は以下の通りです。
- シグネチャが見つかった場合の以下のフィールドを持つオブジェクト:
slot (u64): トランザクションが処理されたスロット。
confirmations (number | null): トランザクションが処理された後に確認されたブロックの数。トランザクションが最終化された場合はnull(最終化はロールバックされないので特定の確認数は重要ではありません)。
err (object | null): トランザクションが失敗した場合のエラーオブジェクト(例: {"InstructionError":[0,{"Custom":1}]})、成功した場合はnull。
status (object): トランザクションの実行ステータスを示すオブジェクト。通常、成功したトランザクションの場合は{"Ok":null}、失敗した場合はエラーを詳細に示すオブジェクト。
confirmationStatus (string | null): トランザクションに対するクラスタの確認ステータス(例: processed, confirmed, finalized)。キャッシュでステータスが利用できず、searchTransactionHistoryがfalseの場合はnullになることがあります。
null: シグネチャがステータスキャッシュで見つからず、searchTransactionHistoryがfalseの場合(または履歴検索でも実際に存在しない場合)。
1. 複数のシグネチャのステータスを取得(最近のキャッシュから)
この例では、ノードの最近のキャッシュに依存して、2つのシグネチャのステータスを取得します。
2. トランザクション履歴検索によるステータス取得
この例では、シグネチャのステータスを取得し、ノードにトランザクション履歴の検索を明示的に要求します。
開発者向けヒント
searchTransactionHistory: 信頼性のために重要です。false(デフォルト)の場合、メソッドは限定された最近のキャッシュのみをチェックします。トランザクションが古い、またはこのキャッシュにない可能性がある場合、そのシグネチャのステータスに対してnullが返されます。非常に新しくないトランザクションのステータスを確認する必要がある場合は、常にtrueに設定してください。
- シグネチャ制限: 1回の呼び出しで最大256件のシグネチャをクエリできます。
null ステータス: 特定のシグネチャに対してvalue配列内のnullは、そのステータスが見つからなかったことを意味します。これは、最近のキャッシュにない(searchTransactionHistoryがfalseの場合)、トランザクションが着地していない、またはsearchTransactionHistory: trueでも古すぎてノードの履歴にないためかもしれません。
confirmations: null: 通常、このトランザクションがfinalized ステータスに到達したことを意味します。この段階では、ブロックは不可逆と見なされるため、特定の確認数の概念はあまり関係ありません。
- エラーハンドリング: トランザクションが失敗したかどうかを確認するには、各ステータスオブジェクト内の
errフィールドをチェックします。statusフィールドも詳細を提供します(例: {"Err":...})。
getSignatureStatusesを使用することは、複数のSolanaトランザクションの状態を監視する効率的な方法です。堅牢なステータスチェックのためにsearchTransactionHistory: trueを使用することを忘れないでください。