元のトランザクションのライフサイクル内での位置
Solana のアーキテクチャでは、トランザクションは完全に処理される前にいくつかの段階を経ます:- シュレッド受付 → バリデータがトランザクションシュレッド(データ断片)を受信。 ← ここで Helius の 生のシュレッド (UDP) が配信されます。
- シュレッドデコード → シュレッドが生のトランザクションにデコードされます。 ← ここで前処理されたトランザクションが利用可能です。
- トランザクション実行 → トランザクションがランタイムによって実行されます。
- メタデータ生成 → 前/後のバランス、ログ、およびエラー情報が計算されます。
- コミットメント → トランザクションが処理済み/確認済み/確定済みの状態に達します。 ← LaserStream gRPC および LaserStream WebSocket はここで配信されます。
最善の努力による配信保証
前処理されたトランザクションの配信はベストエフォートであり、保証されていません。99.99% の配信率を目指していますが、次の場合にいくつかのトランザクションが失われる可能性があります:- インフラストラクチャの更新と再配置
- ネットワークの問題やバリデータの接続性の問題
- シュレッドのデコードまたは処理のエッジケース
利用可能なデータは?
前処理されたトランザクションには、完全なトランザクションメッセージが含まれていますが、実行メタデータは含まれていません:利用可能なデータ
- ✅ トランザクション署名 - ユニークなトランザクション識別子
- ✅ アカウントキー - トランザクションで参照されるすべてのアカウント
- ✅ 命令 - 完全な命令データとプログラム呼び出し
- ✅ 最近のブロックハッシュ - トランザクションの有効期限の参照
- ✅ 署名 - すべてのトランザクション署名
- ✅ 投票トランザクションであるか - これが投票トランザクションであるかどうか
- ✅ スロット番号 - このトランザクションを含むスロット
不足しているデータ
- ❌ トランザクションメタデータ - トークンバランスの変化、前/後のバランス、トランザクションステータス
- ❌ トランザクションエラー - トランザクションが失敗したかどうかを判断できません
- ❌ 内部命令 - クロスプログラム呼び出し(CPI)は含まれません
- ❌ ログメッセージ - プログラムのログは実行中に生成されます
- ❌ 消費した計算ユニット - 実行メトリクスは利用できません
SDK サポートとバージョン要件
前処理されたトランザクションのサブスクリプションは、すべての LaserStream SDK でサポートされています:JavaScript/TypeScript
バージョン 0.2.8 以上
Rust
バージョン 0.1.5 以上
Go
バージョン 0.1.0 以上
実装例
JavaScript/TypeScript
JavaScript SDK は自動再接続を備えた専用の関数を提供しています:Rust
Rust SDK はネイティブのパフォーマンスを提供します:Go
Go SDK は Go の慣用的なインターフェースを提供します:サブスクリプション構造とフィルタリング
リクエスト構造
前処理されたサブスクリプションリクエストは、標準のサブスクリプションに似た構造ですが、特定のフィルタに焦点を当てています:レスポンス構造
更新は完全なトランザクションメッセージと基本的なメタデータと共に到着します:- メッセージ - アカウントキー、命令、最近のブロックハッシュ
- 署名 - すべてのトランザクション署名
- アドレスタブルックアップ - バージョン付きトランザクション用