概要
getTransactionsForAddress はHelius専用のRPCメソッドで、アドレスのトランザクション履歴を高度なフィルタリング、柔軟なソート、効率的なページネーションを使用して返します。これが標準のSolana RPCの一部ではありません。
getSignaturesForAddress とは異なり、署名のみを返し、関連トークンアカウントをスキップしますが、getTransactionsForAddress はウォレットの関連トークンアカウント(ATA)のアクティビティを含む完全なトランザクションデータを1回の呼び出しで返すことができます。それにより、バックフィル、インデックス作成、および分析のための完全なアドレス履歴への最速の経路となります。
このメソッドは、1回の呼び出しで最大1,000の完全なトランザクションを返します。
柔軟なソート
時系列(古い順)または逆(新しい順)でソートします。
高度なフィルタリング
時間範囲、スロット、署名、ステータス、トークン転送でフィルタリングします。
完全なトランザクションデータ
完全なトランザクションの詳細を一回の呼び出しで取得します。追跡getTransactionは不要です。
トークンアカウント
アドレスの関連トークンアカウントに対するトランザクションを含めます。
いつ使用するか
getTransactionsForAddress を使用するとき:
- 関連トークンアカウントを含む完全なウォレットトークン履歴が必要な場合
- インデクサーやデータパイプラインのために単一呼び出しの高速バックフィルが必要な場合
- 時間ベースまたはスロットベースのトランザクション分析と報告が必要な場合
- 成功したトランザクションまたは失敗したトランザクションのみを保持するためのステータスフィルタリングが必要な場合
- 時系列履歴再生(古い順序)の場合
- トークン発行分析:最初のミントトランザクションと初期ホルダー
- ウォレット資金提供履歴およびカウンターパーティの発見
- 特定の期間のコンプライアンスおよび監査報告が必要な場合
getTransfersByAddress を使用します。
ネットワークサポート
クイックスタート
1
APIキーの取得
Helius Dashboard からAPIキーを取得します。
2
高度な機能を使ってクエリを行います
2つの日付の間で、ウォレットのすべての成功したトランザクションを取得し、時系列に並べます:
3
パラメータを理解します
この例では、主要な機能を示しています:
- transactionDetails: 完全なトランザクションデータを1回の呼び出しで取得するために
'full'に設定 - sortOrder: 時系列順(古い順)のために
'asc'、または新しい順のために'desc'を使用 - filters.blockTime:
gte(以上)およびlte(以下)で時間範囲を設定 - filters.status:
'succeeded'または'failed'のトランザクションに限定 - filters.tokenAccounts: 関連トークンアカウントの転送、ミント、およびバーンを含める
リクエストパラメータ
string
必須
トランザクション履歴をクエリするアカウントのBase-58エンコードされた公開鍵
string
デフォルト:"signatures"
返すトランザクション詳細のレベル:
signatures: 基本的な署名情報(高速)full: 完全なトランザクションデータ(getTransaction呼び出しの必要をなくし、最大1,000件をサポート)
string
デフォルト:"desc"
結果のソート順:
desc: 新しい順(デフォルト)asc: 古い順(時系列、履歴分析向け)
number
デフォルト:"1000"
返すトランザクションの最大数:
transactionDetails: "signatures"で最大1000件transactionDetails: "full"で最大1000件
string
前回の応答からのページネーショントークン(形式:
"slot:position")string
デフォルト:"finalized"
コミットメントレベル:
finalized または confirmed。processed コミットメントはサポートされていません。object
結果を絞り込むための高度なフィルタリングオプション。
object
比較演算子を使用してスロット番号でフィルタリング:
gte, gt, lte, lt例: { "slot": { "gte": 1000, "lte": 2000 } }object
比較演算子を使用してUnixタイムスタンプでフィルタリング:
gte, gt, lte, lt, eq例: { "blockTime": { "gte": 1640995200, "lte": 1641081600 } }object
比較演算子を使用してトランザクション署名でフィルタリング:
gte, gt, lte, lt例: { "signature": { "lt": "SIGNATURE_STRING" } }string
トランザクションの成功/失敗ステータスでフィルタリング:
succeeded: 成功したトランザクションのみfailed: 失敗したトランザクションのみany: 成功および失敗の両方(デフォルト)
{ "status": "succeeded" }string
デフォルト:"none"
関連トークンアカウントのトランザクションでフィルタリング:
none: 提供されたアドレスを参照するトランザクションのみを返す(デフォルト)balanceChanged: 提供されたアドレスまたは提供されたアドレスが所有するトークンアカウントの残高を変更するトランザクションを返す(推奨)all: 提供されたアドレスまたは提供されたアドレスが所有する任意のトークンアカウントを参照するトランザクションを返す
{ "tokenAccounts": "balanceChanged" }object
クエリされたアドレスがカウンターパーティ、方向、ミント、または生の量範囲に一致するトークン転送に参加したトランザクションにフィルタリングします。すべてのフィールドはオプションであり、ANDセマンティクスで組み合わされます。例:
{ "tokenTransfer": { "direction": "in", "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" } }string
カウンターパーティのアドレス。このアドレスを他方の側とする転送に一致します。
string
デフォルト:"any"
クエリされたアドレスに対する転送方向でフィルタリング:
in: クエリされたアドレスが受け取った転送out: クエリされたアドレスが送信した転送any: 入出転送
string
フィルタリングするトークンミント。
object
UIや小数点調整された量ではなく、生のオンチェーン量を使用して量を比較します。
gt, gte, lt, lteをサポートします。string
トランザクションデータのエンコーディング形式(
transactionDetails: "full"時にのみ適用されます)。getTransaction APIと同じです。オプション: json, jsonParsed, base64, base58number
返す最大トランザクションバージョンを設定します。省略した場合、レガシートランザクションのみが返されます。すべてのバージョン化されたトランザクションを含めるには、
0 に設定します。number
リクエストを評価できる最小スロット
メータリング
成功した応答は返されるものによってメーターされます:応答
応答の形式はtransactionDetails に依存します。署名モードは軽量な署名レコードを返し、完全モードは完全なトランザクションとメタデータオブジェクトを返します。
- 署名応答
- 完全なトランザクション応答
応答フィールド
transactionIndex フィールドは、getTransactionsForAddress に限定されます。他の類似のエンドポイントである getSignaturesForAddress, getTransaction, and getTransactions にはこのフィールドが含まれていません。
fullモードでは、metaは完全なトランザクションメタデータオブジェクトであり、getTransactionが返すものと同じ形です。これはpreTokenBalancesおよびpostTokenBalancesを含んでいるため、応答から直接トークンバランスの変化を計算することができます(例えば、スワップを検出するために)。
フィルター
slot、blockTime、およびsignatureに対して比較演算子、さらに特別なstatus、tokenAccounts、およびtokenTransferフィルターを使用できます。複数のフィルターを組み合わせることで、それらの交差に結果を絞り込むことができます。
比較演算子
これらの演算子は、データベースクエリのように機能し、データ範囲を正確に制御します。Enumフィルター
組み合わせフィルターの例:
関連トークンアカウント
Solanaでは、ウォレットは直接トークンを持ちません。代わりに、ウォレットはトークンアカウントを所有し、そのトークンアカウントがトークンを保持します。誰かがあなたにUSDCを送るとき、それはあなたのUSDCトークンアカウントに送られ、メインのウォレットアドレスには送られません。 このメソッドは、ウォレットの関連トークンアカウント(ATAs)を含む完全なトークン履歴をクエリできるユニークな方法です。getSignaturesForAddressのようなネイティブRPCメソッドはATAsを含みません。
tokenAccountsフィルターはこの動作を制御します:
none(デフォルト):ウォレットアドレスを直接参照するトランザクションのみを返します。直接的なウォレットの相互作用のみに興味がある場合に使用してください。balanceChanged(推奨):ウォレットアドレスを参照するか、ウォレットによって所有されるトークンアカウントのバランスを変更するトランザクションを返します。これにより、手数料の徴収や委任のようなスパムや無関係な操作を除外し、重要なウォレットの活動をきれいに表示します。all:ウォレットアドレスまたはウォレットが所有する任意のトークンアカウントを参照するすべてのトランザクションを返します。
tokenAccountsフィルターは2022年12月以前のトランザクションをサポートしていません。これは、Solanaに導入されたスロット111,491,819のトークントランスファーメタデータに依存しています。以前の活動をカバーするためには、歴史的トークンアカウントのワークアラウンドを参照してください。
トークントランスファーフィルター
tokenTransferフィルターは、特定の条件に一致するトークン転送に関与したトランザクションに結果を絞り込みます:特定のカウンターパーティー、ミント、方向、または金額範囲。
これを使用して、次のような質問に答えます:
- このウォレットが特定のカウンターパーティーからUSDCを受け取ったのはいつですか?
- 1,000トークン以上のすべての送信転送を表示します。
- このウォレットが特定のミントに関与したのはいつですか?
filtersオブジェクト内のオプションフィールドです:
tokenTransfer内のすべてのフィールドはオプションです。複数のフィールドを組み合わせることはANDとして扱われます。
金額範囲の演算子:
金額の演算子を組み合わせて、例えば
{ "gte": 1000000, "lte": 5000000 }のような閉じた範囲を作成できます。tokenTransferは他のトップレベルのフィルター(slot、blockTime、status、tokenAccounts)と組み合わせられ、最終的な結果は交差です。
例
時間に基づく分析
月次トランザクションレポートを生成します:トークンのミント作成
特定のトークンのミント作成トランザクションを見つけます:資金調達トランザクション
特定のアドレスに資金を提供した人物を見つけます:トークン転送
tokenTransferを使用して、特定のトークン移動を分離します。
アドレスへのUSDC流入:
ページネーション
トランザクションが制限を超えている場合は、応答からpaginationTokenを使用して次のページを取得します。トークンは、APIがどこから続行するかを示す"slot:position"形式の単純な文字列です。
各応答からのページネーショントークンを使用して次のページを取得します:
複数のアドレス
単一の要求で複数のアドレスをクエリすることはできません。各アドレスクエリは個別のAPIリクエストとしてカウントされ、メーターで計測されます。複数のアドレスのトランザクションを取得するには、同じ時間またはスロットウィンドウ内で各アドレスをクエリし、それをマージしてソートします:ベストプラクティス
パフォーマンス。 完全なトランザクションデータが不要な場合はtransactionDetails: "signatures"を使用してください。応答時間を改善するために妥当なページサイズを使用し、よりターゲットを絞ったクエリのために時間範囲や特定のスロットでフィルターしてください。
フィルタリング。 幅広いフィルターから始めて徐々に絞り込む。分析や報告ワークフローには時間ベースのフィルターを使用し、特定のトランザクションタイプや期間を狙った正確なクエリのために複数のフィルターを組み合わせる。
ページネーション。 後で大規模なクエリを再開する必要がある場合は、ページネーショントークンを保存してください。パフォーマンス計画のためにページネーションの深さを監視し、歴史的イベントを年代順に再生する必要がある場合は昇順を使用してください。
エラーハンドリング。 指数バックオフを使用してレート制限を適切に処理します。要求を行う前に住所を検証し、APIの使用を削減するために適切な場合は結果をキャッシュします。
制限とエッジケース
一部のアドレスは古いアーカイブにルーティングされ、スロットスキャンのフォールバックに制限されているか、空白を返します。スロット111,491,819以前のトークンアカウントの発見には、代替策が必要です。詳細については、以下のセクションを展開してください。サポートされていないおよび特別にルーティングされたアドレス
サポートされていないおよび特別にルーティングされたアドレス
古いアーカイブへのルーティング。 これらのアドレスへの要求は古いアーカイブシステムにルーティングされます。
スロットスキャンのフォールバック。 これらのアドレスへの要求は新しいアーカイブシステムに転送され、スロットスキャン方式でクエリ可能(最大100スロット)。ただし、このデータはインデックスされていません。
空を返す(
is_reserved_address)。 新しいアーカイブシステムに転送されますが、データはインデックスされておらず、クエリは空を返します。回避策:歴史的なトークンアカウントの発見(スロット111,491,819以前)
回避策:歴史的なトークンアカウントの発見(スロット111,491,819以前)
スロット111,491,819以前にトークンアカウントの活動があるアドレスの場合、
tokenAccountsフィルターは所有権を判定できません。これはトークンバランスメタデータのownerフィールドがまだ存在しなかったためです。完全な結果を得るには、初期のトランザクション命令を手動で解析してそれらのトークンアカウントを発見し、その後各トークンアカウントに対して並行してgetTransactionsForAddressをクエリします。これはgetSignaturesForAddressとどう違うのですか?
標準的なgetSignaturesForAddressメソッドに精通している方には、getTransactionsForAddressは複数ステップのワークフローを一回の呼び出しにまとめて、フィルタリング、ソーティング、およびトークンアカウントのサポートを追加します。
1回の呼び出しで完全なトランザクションを取得
getSignaturesForAddressを使用する場合、次の2ステップが必要です:
getTransactionsForAddressを使用すると、1回の呼び出しで完了します:
1回の呼び出しでトークン履歴を取得
getSignaturesForAddressを使用すると、まずgetTokenAccountsByOwnerを呼び出してから、すべてのトークンアカウントをクエリする必要があります:
getTransactionsForAddressを使用すると、filters.tokenAccountsを設定するだけで済みます:
追加機能
時系列のソート
sortOrder: 'asc'を使用して、トランザクションを古い順にソート。時間ベースのフィルタリング
blockTimeフィルターを使用して、時間範囲でフィルター。ステータスフィルタリング
statusフィルターを使用して成功または失敗したトランザクションのみを取得。簡単なページネーション
複雑な
before/until署名の代わりに、paginationTokenを使用。次のステップ
インデックスガイド
Solanaインデックスをバックフィルして同期するためにgetTransactionsForAddressを使用。
getTransfersByAddress
支払いおよび調整のための解析された転送のみの履歴。
APIリファレンス
getTransactionsForAddressのフルリクエストおよびレスポンススキーマ。
歴史データ概要
すべてのSolanaの歴史データメソッドを比較。