Skip to main content
公開ベータ版。 preprocessedSubscribeすべての有料プラン で利用可能で、 1 メッセージにつき 0.1 クレジット で計測されます(配信されるトランザクションには 1 メッセージ)。

preprocessedSubscribe とは?

preprocessedSubscribe は、Helius の WebSocket メソッドであり、実行前の Solana トランザクションをストリームする方法です — processed のコミットメントレベルに到達する前に 配信されます。Helius は複数の実行前ソースを集約し、主にバリデータに到着した際に直接デコードされるシュレッドにより補完され、予約されたトランザクション(予備確認)のシグナルをシングルデデュープされたコンパクトなバイナリメッセージとして配信します。 予備確認シグナルからのトランザクションは、専用の予備確認製品よりもこのフィードに遅れて到着しますが、それでも最初にアクセスできます。 これは以前の処理済み LaserStream プロダクトの後継です。本日 gRPC 経由で処理済みトランザクションを利用する場合は、このメソッドに切り替えてください — より低遅延で同じデータクラスを通常の WebSocket 接続で提供し、gRPC 配信は廃止されます。
preprocessedSubscribeベストエフォート方式の実行前シグナル であり、 コミットメントレベルではありません。ストリームされたトランザクションは失敗したり、ドロップされたり、 異なるフォークに着陸したりする可能性があります。最終的なものとして扱う前に、処理済みまたは確認済みの ストリームと照合してください。

エンドポイント

preprocessedSubscribewss://beta.helius-rpc.com — Helius ゲートキーパ―エンドポイント — から提供されます。 mainnet.helius-rpc.com ではありません。API キーをクエリパラメータとして 認証してください。
各 API キーは 10 の同時接続/サブスクリプション に制限されています。

購読

preprocessedSubscribe メソッドを使用して JSON-RPC リクエストを送信します。 params はアカウントフィルターを含み必要です — accountIncludeaccountRequired は、それらの間で少なくとも 1 つのアカウントを指定する必要があります(フィルタリングを参照):
サーバーは、サブスクリプション ID を含む JSON テキストフレームでサブスクリプションを確認します:
この確認の後、トランザクションの更新は バイナリ WebSocket フレームとして到着します — 通知ペイロード を参照してください。

フィルタリング

すべてのサブスクリプションは params 内のアカウントフィルターによってスコープされます。フィルタリングはサーバー側で行われるため、必要なトランザクションのみを受け取ります:
フィルタルール:
  • 三つのフィルターは AND ロジックで結合されます。
  • accountIncludeaccountRequired は、 それらの間で少なくとも1つのアカウントを指定する必要があります—無フィルターの完全なストリームはありません。
  • アカウントは base58 エンコードされたパブキーです。各リストは最大 5,000 のアドレスを受け入れます。

アドレスルックアップテーブル (ALT) の解決

アカウントフィルターはトランザクションの静的アカウントキー以上に一致します — Helius はアドレスルックアップテーブルをサーバー側で解決するため、 accountIncludeaccountExcludeaccountRequired も ALT を通じてロードされるアカウントに一致します。 アカウントのパブキーを渡すだけで、ALT マッピングの管理やテーブルの解決を自分で行う必要はありません。

通知ペイロード

通知は バイナリ WebSocket フレームとして配信されます(JSON ではありません)。 各フレームには、パックされたバイトレイアウトで単一のトランザクションが含まれています: 73 バイトの固定プリフィックスを順番に読み、残りのバイトをbincode でデシリアライズして、 VersionedTransaction を読み込み、命令、アカウント、アドレステーブルルックアップを読み取ります。署名はプリフィックスに含まれているため、 トランザクション本体をデコードせずにトランザクションを特定して重複排除できます。 最初に version バイトを読み取り、確認してください。Helius がペイロード形式を更新する必要がある場合、バージョンは増加します — スキーマ変更にわたってデコーダーが動作し続けるようにそれに基づいて分岐してください。

どのようなデータが利用可能か?

各通知には、署名済みのトランザクション、その最初の署名、およびそのスロットが含まれます。配信は実行前に行われるため、ストリームには以下が含まれません:
  • 実行ステータスやエラー
  • 実行前/後のバランスやトークンバランスの変化
  • ログメッセージや内部命令
  • 消費された計算ユニット
これは「提案」を受け取るようなもので、実際に何が起こったかではなく、送信者が何をしようとしたかを確認できます。この段階ではアカウントとプログラムの状態更新もまだ存在しません。リアルタイムのアカウント状態が必要な場合は、LaserStream gRPCprocessed コミットメントで使用してください。

バックプレッシャー

ストリームは遅い消費者のために無期限にバッファリングしません。クライアントが遅く読み取り、サーバー側で 4,000 メッセージ 以上がバックアップされる場合、Helius は接続を閉じます— クリーンな WebSocket クローズフレームを受け取ります。フレームが到着するよりも速くドレインする: トランザクションのデコードや戦略ロジックなどの重い作業を受信ループから外し、切断後に再接続および再サブスクリプションを行います。

配信保証

配信はベストエフォートであり、保証されていません。履歴再生もありません。クライアントは次のことを行うべきです:
  1. 接続が閉じた後に再接続および再サブスクリプションする。
  2. トランザクション署名で重複を排除する。
  3. スロットを観測として扱い、最終的なものとして扱わない。
  4. 実行結果が重要な場合は、処理済みまたは確認済みのストリームと照合する。

価格設定

preprocessedSubscribeすべての有料プラン で利用可能で、 1 メッセージにつき 0.1 クレジット で計測されます — 配信されたトランザクションあたり1メッセージ、 プランから課金されます。クレジット を参照してください。

関連

処理済みトランザクション (gRPC)

同じ実行前データを gRPC 経由で。将来このメソッドが優先されて廃止されます。

予備確認

シュレッドになる前にストリームされた予約されたトランザクション—最も早いトランザクションシグナル。

生のシュレッド (UDP)

UDP 経由の未処理のシュレッドパケット。デシュレディングを実装します。

transactionSubscribe

リッチなフィルタリングと実行メタデータを含む実行後のトランザクション。