なぜ移行するのか
Solanaでアドレスのトランザクション履歴を取得する標準的な方法は2ステップです: 署名をリスト表示するためにgetSignaturesForAddress を呼び出し、各署名ごとに詳細を取得するために getTransaction を呼び出します。1,000 件のトランザクションには 1,001 件の HTTP リクエストが必要です。
getTransactionsForAddress は Helius 専用の RPC メソッドで、両方のステップを 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 専用です。バージョンは https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY (および devnet) で動作します — もし Helius の顧客であれば、既存の呼び出しがすでに使用しているのと同じエンドポイントです。API キーやプランの変更は不要です。2
2ステップのフェッチを1回の呼び出しに置き換える
getSignaturesForAddress の呼び出しと getTransaction ループを削除します。単一の getTransactionsForAddress リクエストを transactionDetails: "full" と共に実行し、パラメータのマッピングで示されるように、encoding 、maxSupportedTransactionVersion 、および commitment の値を引き継ぎます。署名のみが必要な場合 (例: 既存のパイプラインにフィードするため)、代わりに transactionDetails: "signatures" を使用してください — コールあたり 10 クレジットの均一料金が適用されます。3
レスポンスの処理を更新する
レスポンスの枠組みは3つの点で変わります:
- 結果は
result.data(配列の形式) に格納され、直接resultには含まれません。 - 各完全モードのエントリは
{ 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) のアクティビティが完全に欠落していましたが、それを含めるためには
getTokenAccountsByOwner を呼び出して各トークンアカウントの署名を取得する必要がありました。それを含めるためには、次のフィルターを追加します:balanceChanged はスパムをフィルターしつつ、ウォレットを参照または所有するトークンアカウントの残高を変更するトランザクションを返します。none/balanceChanged/all オプションと 2022 年以前の注意事項については、関連トークンアカウント を参照してください。6
古い出力と比較して検証する
サンプルアドレスについて、両方の方法で履歴を取得して署名セットを比較します。
filters.tokenAccounts を設定していない状態(デフォルトの none の場合)、getTransactionsForAddress は同じ範囲の getSignaturesForAddress と同じトランザクションを返します。その後、デプロイして古いコードパスを削除します。レビューすべき動作の違い
ほとんどの移行はそのまま置き換え可能ですが、出荷前にこれらを確認してください:- コミットメント.
processedはサポートされていません。confirmedまたはfinalizedを使用してください。古いコードがprocessedで最近の履歴をポーリングしている場合、confirmedに切り替えてください。 - メータリング. フルトランザクションのレスポンスは、返された 100 件のトランザクションにつき 10 クレジット (最低 10 クレジット) かかります。署名のみのレスポンスは一律 10 クレジットです。古いパターンは1コールあたり1クレジットでした — リクエストごとには安価ですが、取得したトランザクションごとには非常に高価です。失敗したレスポンスは無料です。メータリング を参照してください。
- ネットワークサポート. メインネットは無制限の保持があります。Devnet は 2 週間の保持でサポートされています。Testnet はサポートされていません。
- 予約アドレス. システムアドレスの少数 (投票プログラム、システムプログラム、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 リクエスト)がかかります。署名のみのレスポンスはコールあたり一律 10 クレジットです。Helius クレジット を参照して完全な価格を確認してください。
AI エージェントに移行を任せる
Claude Code、Cursor、または他のコーディングエージェントを使用している場合は、以下のプロンプトをリポジトリのエージェントセッションに貼り付けてください。コードベースで古いパターンを見つけて書き換えてくれます。次のステップ
getTransactionsForAddress ガイド
フィルター、ソート、ページネーション、トークンアカウントを扱うための完全なチュートリアル。
API リファレンス
完全なリクエストおよびレスポンススキーマ。
インデックス作成ガイド
getTransactionsForAddress を使用して Solana インデックスをバックフィルし、同期します。
履歴データ概要
すべての Solana 履歴データメソッドを比較。