getTransaction RPC メソッドを使用すると、署名を提供することで確認済みトランザクションの詳細情報を取得できます。これには、トランザクションのスロット、ブロック時間、メタデータ(手数料、ステータス、残高の変動など)、およびトランザクション構造自体が含まれます。
一般的な使用例
- トランザクション検証: トランザクションが処理されたことを確認し、その結果(成功または失敗)を確認します。
- トランザクション履歴表示: ウォレットやエクスプローラでユーザーに過去のトランザクションの詳細を表示します。
- 監査と分析: 実行された指示、支払った手数料、関与するアカウントを含むトランザクションの詳細を検証します。
- 失敗したトランザクションのデバッグ: トランザクションが失敗した理由を理解するために、メタデータの
logMessagesおよびerrフィールドを調査します。 - データインデックス化: オフチェーンストレージと分析のためにトランザクションから特定の情報を抽出します。
リクエストパラメータ
-
transactionSignature(文字列, 必須): 照会したい base-58 エンコードされたトランザクション署名。 -
options(オブジェクト, オプション): オプションの構成オブジェクトで、以下を含むことができます:commitment(文字列, オプション): コミットメントレベルを指定します (例:"finalized","confirmed")。指定されていない場合、ノードのデフォルトのコミットメントが使用されます(通常は"finalized")。encoding(文字列, オプション):transactionデータのエンコーディング。一般的な値:"json": トランザクションデータを構造化された JSON 形式で返します(ただし、指示は base64 エンコードされている可能性があります)。"jsonParsed": トランザクションデータをプログラム特有の指示で、人間が読みやすい JSON 形式に解析して返します。分析には最も役立つエンコーディングです。"base58": トランザクションデータを base-58 エンコードされた文字列として返します。"base64": トランザクションデータを base-64 エンコードされた文字列として返します。- Helius が指定しない場合はデフォルトで
"json"に設定されますが、Solana のデフォルトは異なる可能性があります。これを指定するのが最善です。
maxSupportedTransactionVersion(数値, オプション): RPC エンドポイントが処理すべき最大トランザクションバージョンです。- レガシー、v0、v1 トランザクションを含むように
1に設定します。 - 省略された場合、またはトランザクションのバージョンより低く設定された場合、要求は JSON-RPC エラー
-32015(Transaction version (1) is not supported by the requesting client) で失敗します。常にこれを1に設定してください。詳細は トランザクション v1 サポート を参照してください。
- レガシー、v0、v1 トランザクションを含むように
応答構造
トランザクションが見つからない場合(例えば、未処理または署名が間違っている場合)または指定されたコミットメントレベルで確認されていない場合、メソッドはnull を返します。それ以外の場合、以下のフィールドを持つオブジェクトを返します:
slot(u64): トランザクションがブロックに含まれていたスロット番号。blockTime(i64 | null): トランザクションを含むブロックが生成されたときの推定 Unix タイムスタンプ(エポックからの秒数)。利用不可の場合はnullである可能性があります。meta(オブジェクト | null): トランザクションの実行に関するメタデータを含むオブジェクト。トランザクションが処理される前に失敗した場合、またはメタデータが利用できない場合はnullです。err(オブジェクト | null): トランザクションが失敗した場合のエラーオブジェクト。それ以外の場合はnull。fee(u64): トランザクションに支払われた lamports の手数料。preBalances(u64 の配列): トランザクションが処理される前の関与するアカウントの lamport バランス。postBalances(u64 の配列): トランザクションが処理される後の関与するアカウントの lamport バランス。preTokenBalances(オブジェクトの配列 | null): トランザクション前に関与するアカウントのトークンバランス。postTokenBalances(オブジェクトの配列 | null): トランザクション後に関与するアカウントのトークンバランス。innerInstructions(オブジェクトの配列 | null): このトランザクション内で CPI (クロスプログラム呼び出し) の一部として実行された指示の配列。logMessages(文字列の配列 | null): トランザクションの指示および内部指示によって発行されたログメッセージの配列。loadedAddresses(オブジェクト, オプション): このトランザクションに対してアドレスルックアップテーブルからロードされたアカウントを指定します。writableおよびreadonlyのパブリックキーの配列を含みます。returnData(オブジェクト, オプション): トランザクションによってsol_set_return_dataおよびsol_get_return_data経由で返されたデータ。programId(文字列) およびdata(配列:[string, encoding]) を含みます。computeUnitsConsumed(u64, オプション): このトランザクションによって消費された計算ユニットの数。
jsonParsed エンコーディング):
コード例
開発者のヒント
- トランザクションの確定性: 適切な
commitmentレベルで照会することを確認してください。指定したコミットメントに達していないトランザクションをリクエストすると、nullという結果になります。 - データ量: 特に多くの指示や詳細なログを持つ複雑なトランザクションの場合、応答オブジェクトは非常に大きくなる可能性があります。データを処理する際には、この点に注意してください。
jsonParsedとjson:jsonParsedは非常に便利ですが、解析サポートは特定のプログラムに対する RPC ノードの機能に依存します。プログラムが認識されない場合、その指示はjsonParsedを使用しても、より解析されていない形式に戻る可能性があります。- バージョン付きトランザクション: 常にリクエストオプションに
maxSupportedTransactionVersion: 1を設定して、アプリケーションがレガシーとバージョン付きの両方のトランザクションに対応できるようにしてください。そうでないと、新しいトランザクション形式でデータを見逃したり、エラーが発生したりすることがあります。 - RPC プロバイダーの違い: コア API は標準ですが、一部の RPC プロバイダーは強化された解析や追加のフィールドを提供する場合があります。例えば、Helius は豊富なトランザクション解析を提供します。
getTransaction RPC メソッドの包括的な概要を提供し、詳細な Solana トランザクションデータを取得して理解する力を与えます。