なぜ移行するのか?
Solanaでアドレスのトランザクション履歴を取得する標準的な方法は二段階です。まず署名をリストするためにgetSignaturesForAddressを呼び出し、次に詳細を取得するために署名ごとにgetTransactionを呼び出します。1,000件のトランザクションでは、1,001件のHTTPリクエストが必要です。
getTransactionsForAddressはHelius限定のRPCメソッドで、この2ステップを1つの呼び出しにまとめます。1リクエストあたり最大1,000件の完全なトランザクションを返します。フィルタリング、双方向ソート、トークンアカウントのサポートがあり、標準的な方法ではこれらがありません。
結果:およそ10倍少ないクレジット、1,000倍少ないラウンドトリップ、そしてクライアント側でのバッチ処理、レート制限処理、再試行ロジックは不要です。
前後の比較
ここで、アドレスの最後の1,000件のトランザクションを完全な詳細で取得するタスクを、両方のパターンで示します:getTransactionsForAddressは標準Solana RPCに含まれていないため、@solana/web3.jsにはConnectionヘルパーがありません。上記のように生のJSON-RPCリクエストで呼び出してください。他のRPCトラフィックと同じHeliusエンドポイントで動作します。
パラメータマッピング
古い2ステップのフローのすべてのオプションには直接の対応があります。ほとんどの名前は変更されずに引き継がれます—ページネーションだけが異なります。getSignaturesForAddressから
getTransactionから
2つの機能は、以前の対応が全くありません:
filters— 結果をサーバーサイドでblockTime、slot、status、tokenTransfer、またはtokenAccountsで絞り込むか、すべてを取得してコード内でフィルタリングします。 -sortOrder: "asc"— 標準メソッドでは履歴全体を取得して逆にしないと返せない年代順(古いものを最初に)結果。
移行手順
1
Heliusエンドポイント上にいることを確認
getTransactionsForAddressはHelius限定です。Heliusの顧客であれば、既存の呼び出しが使用するのと同じエンドポイントであるhttps://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY(およびdevnet)で動作します。APIキーやプランの変更は不要です。2
2ステップのフェッチを1つの呼び出しに置き換える
getSignaturesForAddressの呼び出しとgetTransactionループを削除します。単一のgetTransactionsForAddressリクエストをtransactionDetails: "full"で行い、パラメータマッピングに示されるように、encoding、maxSupportedTransactionVersion、そしてcommitmentの値を引き継ぎます。署名のみが必要な場合は(たとえば、既存のパイプラインに供給するため)、代わりにtransactionDetails: "signatures"を使用してください — これは1コールあたり10クレジットがかかります。3
応答処理を更新
応答エンベロープが3つの方法で変わります:
- 結果は
resultではなく、result.data(配列)にあります。 - 各フルモードエントリは
{ slot, transactionIndex, blockTime, transaction, meta }です。transactionとmetaオブジェクトは、getTransactionが返すものと形状が同じなので、解析コードはそのまま持続します。 - 署名モードエントリは、
getSignaturesForAddress出力(signature、slot、err、memo、blockTime、confirmationStatus)に加えて新しいtransactionIndexフィールドと一致します。
getTransactionの呼び出しで署名に対してnullを返す可能性がありました。getTransactionsForAddressでは、result.data内のエントリはすべて完全なトランザクションなので、不足している詳細のnull処理を削除します。4
署名ベースのページネーションを置き換える
beforeカーソルループをpaginationTokenに置き換えます:paginationTokenがnullになると終了します—署名リストの比較や、最後の署名を自分で追跡する必要はありません。既知の署名で停止するためにuntilを使用している場合は、filters.signature: { gt: "KNOWN_SIGNATURE" }に置き換えてください。特定の時点で停止するために使用している場合は、filters.blockTimeまたはfilters.slotを使用する方が通常は適しています。5
オプション:完全なトークン履歴を有効にする
古いパターンでは、すべてのトークンアカウントに対して署名を呼び出して取得しない限り、関連トークンアカウント(ATA)活動は完全に見逃されます。これを含めるには、1つのフィルタを追加します:
balanceChangedは、スパムをフィルタリングして、ウォレットを参照するまたは所有する任意のトークンアカウントのバランスを変更するトランザクションを返します。関連トークンアカウントでnone/balanceChanged/allのオプションと2022年前の注意事項を参照してください。6
古い出力と比較して検証する
サンプルアドレスについて、両方の方法で履歴を取得し、署名セットを比較してください。
filters.tokenAccounts未設定(デフォルトのnone)では、getTransactionsForAddressは同じ範囲でgetSignaturesForAddressと同じトランザクションを返します。その後デプロイし、古いコードパスを削除します。確認するべき動作の違い
ほとんどの移行はそのまま置き換え可能ですが、出荷前に以下を確認してください:- コミットメント。
processedはサポートされていません。confirmedまたはfinalizedを使用してください。古いコードで最近の履歴をprocessedでポーリングしていた場合、confirmedに切り替えてください。 - メータリング。 完全トランザクションの応答は、返された100トランザクションあたり10クレジット(最低10クレジット)かかります。署名のみの応答は10クレジットがフラットでかかります。古いパターンは1コールあたり1クレジット—1リクエストあたりのコストは安いですが、取得したトランザクションあたりのコストがはるかに高いです。失敗した応答は無料です。詳細はメータリングを参照してください。 - ネットワークサポート。 Mainnetは無制限の保持を持っています。Devnetは2週間の保持でサポートされています。Testnetはサポートされていません。 - 予約済みアドレス。 システムアドレスの小さなセット(Vote Program、System Program、sysvars)は、フォールバックアーカイブルートにルーティングされるか、空を返します。それをインデックスする場合は、制約とエッジケースを参照してください。 - 複数のアドレス。 古いフローと同様に、1リクエストで1アドレスをカバーします。アドレスを並行してクエリし、マージします。複数のアドレスを参照してください。
よくある質問
getTransactionsForAddressは標準的なSolana RPCメソッドですか?
違います。これはHelius限定のメソッドで、Helius RPCエンドポイントで利用可能です。標準的なSolana RPCやその他のプロバイダは、getSignaturesForAddressとgetTransactionのみを提供します。他のRPC呼び出しには影響しません—このメソッドは完全な標準的なRPCサーフェイスの隣で同じエンドポイントにあります。
移行後もgetTransactionは必要ですか?
既に署名を持っており、アドレスのコンテキストがないときに一度の検索が必要な場合のみ必要です。アドレスに基づく履歴(バックフィル、インデクシング、ウォレット活動フィード)については、getTransactionsForAddressが両方のメソッドを置き換えます。
@solana/web3.jsと一緒に動作しますか?
このメソッドはConnectionクラスには含まれていませんが、Helius RPC URLに対して任意のHTTPクライアントで動作します。標準のJSON-RPCボディを用いて、fetch(またはお使いの言語の相当するもの)を使用してください。その他の処理には引き続きConnectionを使用可能です。
getSignaturesForAddressと同じトランザクションを返しますか?
はい。デフォルト設定(filters.tokenAccounts: "none")の場合、クエリされたアドレスを参照するトランザクションを返します—getSignaturesForAddressと同じセットです。tokenAccountsをbalanceChangedまたはallに設定すると、ウォレットの関連トークンアカウントの活動も追加され、標準メソッドでは見えません。
古いパターンと比べて費用はどれくらいかかりますか?
1,000件の完全なトランザクションを取得するにはgetTransactionsForAddressで100クレジットがかかりますが、getSignaturesForAddress + getTransactionでは約1,001クレジット(および1,001リクエスト)が必要です。署名のみによる応答は1コールあたり10クレジットがフラットでかかります。詳細な価格設定はHeliusクレジットを参照してください。
AIエージェントに移行を任せる
Claude Code、Cursor、その他のコーディングエージェントを使用している場合は、以下のプロンプトをリポジトリのエージェントセッションに貼り付けてください。コードベース内の古いパターンを見つけ出し、書き換えます。次のステップ
getTransactionsForAddressのガイド
フィルター、ソート、ページネーション、トークンアカウントに関する完全なチュートリアル。
APIリファレンス
完全なリクエストと応答のスキーマ。
インデクシングガイド
Solanaインデックスをバックフィルし同期するためにgetTransactionsForAddressを使用。
履歴データの概要
すべてのSolana履歴データメソッドを比較。
getTransactionsForAddress guide
Full tutorial covering filters, sorting, pagination, and token accounts.
API reference
Complete request and response schema.
Indexing guide
Use getTransactionsForAddress to backfill and sync a Solana index.
Historical data overview
Compare all Solana historical data methods.