preprocessedSubscribe は署名されたトランザクションを processed コミットメントレベルに達する前にストリームするため、デシュレッディングのインフラを必要とせずに、トランザクションがバリデータに届くときにシュレッドからデコードされます。
このガイドでは、取引プログラムを実行前に監視し、フィードを重複排除し、サーバーのバックプレッシャー制限内に留まり、処理済みデータと照合してから実行するモニターを構築します。
サブスクリプションをターゲットに絞る
フィルターされていないストリームはありません:accountInclude と accountRequired は少なくとも1つのアカウントをその間に指定する必要があります。取引モニターでは、取引するプログラムを含め、余計なノイズを除外してください。そうしないと余計なコストがかかります:
accountRequiredフィールドに入れます。
フレームをデコードし、署名で重複排除
通知はバイナリフレームとして届きます:73バイトのプレフィックスに続いて、bincodeでシリアル化されたトランザクションです。プレフィックスに署名が含まれているため、本体をデコードせずに重複排除できます。このストリームは複数の実行前ソースを集約しており、同じトランザクションが複数回届くことがあります:monitor.js
受信ループをストリームより速く保つ
Heliusは遅い消費者に無期限にバッファリングしません:サーバー側で4,000以上のメッセージがバックアップされた場合、接続は終了されます。そのため、上記のハンドラは73バイトのプレフィックスのみを読み取り、エンキューするという仕様です。 デシリアライズと戦略ロジックは別のループで実行されます:処理済みデータと照合
事前処理されたトランザクションは、送信者が何をしようとしたかを示しますが、実際に何が起こったかは示しません。実行ステータス、残高変動、ログは含まれておらず、失敗したり、ドロップされたり、異なるフォークに着陸することがあります。配信は最善の努力で行われ、履歴のリプレイはないため:- あなたの戦略が何かを事実として記録する前に、
transactionSubscribeでprocessedまたはconfirmedコミットメントと照合します。 - 切断時には、隙間を受け入れながらただちに再サブスクライブしてください。バックフィルするリプレイがないためです。
- 取引の意図ではなく、リアルタイムのアカウント状態が必要な場合、それは実行後にのみ存在します:LaserStream gRPCを
processedで使用してください。
関連ガイド
preprocessedSubscribe リファレンス
完全なペイロードレイアウト、フィルタールール、バックプレッシャー、そして価格設定
事前確認での取引
スケジューラ自体からのHeliusが提供する最早のトランザクションシグナル