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)。パフォーマンスの考慮事項
- ボリューム管理
- データ処理
トランザクションストリームは高ボリュームになる可能性があります。以下の方法で対応します。
- 特定のプログラムフィルタから始める (「すべてのトランザクション」を購読しない)
confirmedをprocessedよりも使用する~1.5秒の遅延を許容できる場合- カウンターで処理能力を監視する
- キューの後ろで並行してコンシューマを実行することを検討する
エラーハンドリング
トランザクションが多すぎる
トランザクションが多すぎる
症状: 圧倒的なトランザクションボリューム。解決策: 厳しいフィルタを追加 (
accountRequired, accountExclude); より高いコミットメントを使用する; サンプリングやレート制限を実装する; 非同期で処理する。トランザクションが見つからない
トランザクションが見つからない
症状: 期待されたトランザクションが表示されない。解決策: プログラムアドレスが正しいか確認する; トランザクションが実際に存在するか確認する; より速い更新のために
processedを試す; 制限の厳しいaccountRequired/accountExcludeフィルタを緩める。解析エラー
解析エラー
症状: トランザクションデータを解析できない。解決策: 欠落したフィールドを適切に処理する; 処理前に構造を検証する; 解析をtry/catchでラップする; トランザクションデータのデコードを参照する。