パブリックベータ版。 前処理されたトランザクションはHeliusのShred Delivery製品ファミリーの一部です。プロフェッショナルプラン以上の購読者に利用可能で、1 MBあたり20クレジットで計測されます。平均して、前処理されたトランザクションは**
processedコミットメントレベル**より約8ミリ秒早く到着しますが、実行メタデータのコストがかかります(下記のトレードオフ参照)。processedコミットメントレベルの約8ミリ秒前**です。
このガイドでは、前処理されたトランザクションを使用するタイミング、利用可能なデータ、およびLaserStream SDKを使用してそれらを購読する方法(同じgRPC接続を介して前処理されたトランザクションも提供されます)を説明します。
トランザクションライフサイクル内の位置
Solanaのアーキテクチャでは、トランザクションが完全に処理されるまでにいくつかの段階を経ます:- シュレッド受信 → バリデータがトランザクションシュレッド(データフラグメント)を受信。在ここでHeliusの**raw shreds (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は、自動再接続機能を持つ専用のsubscribePreprocessed関数を提供しています:
Rust
Rust SDKはネイティブのパフォーマンスを提供します:Go
Go SDKはイディオマティックなGoインターフェースを提供します:購読構造とフィルタリング
リクエスト構造
前処理された購読リクエストは標準の購読に似た構造をもち、限定されたフィルターセットを持ちます:レスポンス構造
更新は完全なトランザクションメッセージと基本的なメタデータを伴って届きます:transaction.transactionフィールドには次を含むSolanaトランザクションの完全な構造が含まれています:
- メッセージ - アカウントキー、インストラクション、最近のブロックハッシュ
- 署名 - すべてのトランザクション署名
- アドレスタブルックアップ - バージョントランザクション用