Skip to main content
廃止予定のお知らせ。 gRPC を介した前処理されたトランザクションは廃止されます。WebSocket メソッドに切り替えてください—それは同じ事前実行トランザクションデータをより低いレイテンシーで配信します。
前処理されたトランザクションは、gRPC を介して Solana トランザクションを受信する最速の方法です。Helius は、バリデータに届くとすぐにシュレッドを直接デコードし、結果のトランザクションを送信することで、ポストエクスキューションのサブスクリプションよりミリ秒早くトランザクションデータにアクセスできます — 平均してコミットメントレベルの約 8 ms 前です。 このガイドでは、前処理されたトランザクションを使用するタイミング、利用可能なデータ、LaserStream SDK を使用してそれらにサブスクライブする方法を説明します(同じ gRPC 接続を介して前処理されたトランザクションも提供します)。

元のトランザクションのライフサイクル内での位置

Solana のアーキテクチャでは、トランザクションは完全に処理される前にいくつかの段階を経ます:
  1. シュレッド受付 → バリデータがトランザクションシュレッド(データ断片)を受信。 ← ここで Helius の 生のシュレッド (UDP) が配信されます。
  2. シュレッドデコード → シュレッドが生のトランザクションにデコードされます。 ← ここで前処理されたトランザクションが利用可能です。
  3. トランザクション実行 → トランザクションがランタイムによって実行されます。
  4. メタデータ生成 → 前/後のバランス、ログ、およびエラー情報が計算されます。
  5. コミットメント → トランザクションが処理済み/確認済み/確定済みの状態に達します。 ← LaserStream gRPC および LaserStream WebSocket はここで配信されます。
ポストエクスキューションのサブスクリプションは、完全な実行とメタデータ生成の後の段階 5 でデータを配信します。前処理されたサブスクリプションは、シュレッドがデコードされた直後、実行が完了する前に段階 2 で配信されます。 トレードオフ: トランザクションデータをミリ秒単位で早く受け取れますが、バランス変化やログ、エラー情報などの実行メタデータはありません。
これはトランザクション専用のストリームです。 アカウントおよびプログラム状態の更新は、ランタイムがトランザクションを実行するまで存在しません(段階 4)。リアルタイムのアカウントまたはプログラムの更新(トークンバランス、ボンディングカーブの状態、プログラムアカウント、生のトランザクション以外のもの)が必要な場合、**LaserStream gRPC にてコミットメントで受け取るのが最速です。
さらに速いトランザクションシグナルが必要ですか?Preconfirmationsを使用してスケジュールされたトランザクションをストリームし、生のシュレッド (UDP)を使用して未処理のトランザクションデータを取得してください。

最善の努力による配信保証

前処理されたトランザクションの配信はベストエフォートであり、保証されていません。99.99% の配信率を目指していますが、次の場合にいくつかのトランザクションが失われる可能性があります:
  • インフラストラクチャの更新と再配置
  • ネットワークの問題やバリデータの接続性の問題
  • シュレッドのデコードまたは処理のエッジケース
保証された配信が必要な重要なアプリケーションの場合は、標準のトランザクションサブスクリプションを使用してください。

利用可能なデータは?

前処理されたトランザクションには、完全なトランザクションメッセージが含まれていますが、実行メタデータは含まれていません:

利用可能なデータ

  • トランザクション署名 - ユニークなトランザクション識別子
  • アカウントキー - トランザクションで参照されるすべてのアカウント
  • 命令 - 完全な命令データとプログラム呼び出し
  • 最近のブロックハッシュ - トランザクションの有効期限の参照
  • 署名 - すべてのトランザクション署名
  • 投票トランザクションであるか - これが投票トランザクションであるかどうか
  • スロット番号 - このトランザクションを含むスロット

不足しているデータ

  • トランザクションメタデータ - トークンバランスの変化、前/後のバランス、トランザクションステータス
  • トランザクションエラー - トランザクションが失敗したかどうかを判断できません
  • 内部命令 - クロスプログラム呼び出し(CPI)は含まれません
  • ログメッセージ - プログラムのログは実行中に生成されます
  • 消費した計算ユニット - 実行メトリクスは利用できません
前処理されたトランザクションは「結果」のない「提案」を受け取るようなものと考えてください。ユーザーが何をしようとしたのかはわかりますが、実際に何が起きたのかはわかりません。

SDK サポートとバージョン要件

前処理されたトランザクションのサブスクリプションは、すべての LaserStream SDK でサポートされています:

JavaScript/TypeScript

バージョン 0.2.8 以上

Rust

バージョン 0.1.5 以上

Go

バージョン 0.1.0 以上

実装例

JavaScript/TypeScript

JavaScript SDK は自動再接続を備えた専用の関数を提供しています:
完全な例: preprocessed-transaction-sub.ts

Rust

Rust SDK はネイティブのパフォーマンスを提供します:
完全な例: preprocessed_transaction_sub.rs

Go

Go SDK は Go の慣用的なインターフェースを提供します:
完全な例: preprocessed-transaction-sub.go

サブスクリプション構造とフィルタリング

リクエスト構造

前処理されたサブスクリプションリクエストは、標準のサブスクリプションに似た構造ですが、特定のフィルタに焦点を当てています:

レスポンス構造

更新は完全なトランザクションメッセージと基本的なメタデータと共に到着します:
フィールドには、Solana トランザクションの完全な構造が含まれています:
  • メッセージ - アカウントキー、命令、最近のブロックハッシュ
  • 署名 - すべてのトランザクション署名
  • アドレスタブルックアップ - バージョン付きトランザクション用
これは、標準的なサブスクリプションでのトランザクション構造と同一ですが、実行結果を含むフィールドがありません。