メインコンテンツへスキップ
トランザクション監視により、トランザクションの実行、成功/失敗ステータス、プログラムとの相互作用、Solana全体のトークン残高変更をリアルタイムで追跡できます。このガイドでは、helius-laserstream SDKを使用したフィルタリング戦略と実践的な実装を紹介します。
前提条件: このガイドは、LaserStream gRPC クイックスタートを完了し、APIキーを持っていることを前提としています。

トランザクションフィルタリングオプション

LaserStreamは、Yellowstone gRPCと同じフィルタ形状を使用し、tokenAccounts (ATA拡張)フィルタを含みます。あなたが設定するフィールドは次のとおりです:
  • accountInclude — これらのアカウントがいずれかが出現した場合に一致 (論理OR)
  • accountRequired — これらのアカウントがすべて出現した場合のみ一致 (論理AND)
  • accountExclude — これらのアカウントのいずれかが出現した場合に除外
  • vote / failed — 投票と失敗したトランザクションのためのブールフラグ
  • tokenAccounts — オプトイン関連トークンアカウント(ATA)拡張 ("balanceChanged", "all", または "none")、したがって accountInclude ウォレットは、SPLトークン残高を保有するトランザクションも一致します。詳細はトークンアカウント(ATA)フィルタリング と下のウォレットの監視タブをご覧ください。
特定のプログラムに関与するトランザクションを監視関心のあるプログラムに触れるすべてのトランザクションを監視します。
最適用途: プログラム固有の監視、DeFiプロトコルトラッキング、スマートコントラクトの相互作用。

実践的な例

例 1: DEX トランザクションを監視

人気のあるDEXプログラムに触れるトランザクションを追跡します。

例 2: 失敗したトランザクションを監視

アプリケーションの問題を浮き彫りにするために失敗したトランザクションを追跡します。

例 3: 高額トランザクションを監視

重要なSOL転送を伴うトランザクションを追跡します。

例 4: ウォレットを監視 (トークン転送を含む)

tokenAccounts をプレーンな accountInclude フィルタに追加することで、ウォレットのためにマネーを動かすすべてを監視します — その ATA に触れる受信 SPL トークン転送を含めて。

トランザクションデータ構造


フィルタロジックのリファレンス

包含ロジック (OR)

accountInclude: トランザクションはこれらのアカウントのいずれかを含む必要があります。["A", "B"] はアカウントAまたはアカウントBを含むトランザクションと一致します。

必須ロジック (AND)

accountRequired: トランザクションはこれらのアカウントすべてを含む必要があります。["A", "B"] はアカウントAとアカウントBを含むトランザクションと一致します。

除外ロジック (NOT)

accountExclude: トランザクションはこれらのアカウントのいずれも含まない必要があります。

複合ロジック

最終フィルタ: (accountInclude OR empty) AND (accountRequired AND all) AND NOT (accountExclude OR any)

パフォーマンスの考慮事項

トランザクションストリームは高ボリュームになる可能性があります。以下の方法で対応します。
  • 特定のプログラムフィルタから始める (「すべてのトランザクション」を購読しない)
  • confirmedprocessed よりも使用する~1.5秒の遅延を許容できる場合
  • カウンターで処理能力を監視する
  • キューの後ろで並行してコンシューマを実行することを検討する

エラーハンドリング

症状: 圧倒的なトランザクションボリューム。解決策: 厳しいフィルタを追加 (accountRequired, accountExclude); より高いコミットメントを使用する; サンプリングやレート制限を実装する; 非同期で処理する。
症状: 期待されたトランザクションが表示されない。解決策: プログラムアドレスが正しいか確認する; トランザクションが実際に存在するか確認する; より速い更新のためにprocessedを試す; 制限の厳しいaccountRequired/accountExcludeフィルタを緩める。
症状: トランザクションデータを解析できない。解決策: 欠落したフィールドを適切に処理する; 処理前に構造を検証する; 解析をtry/catchでラップする; トランザクションデータのデコードを参照する。