メインコンテンツへスキップ
パブリックベータ版。 前処理されたトランザクションはHeliusのShred Delivery製品ファミリーの一部です。プロフェッショナルプラン以上の購読者に利用可能で、1 MBあたり20クレジットで計測されます。平均して、前処理されたトランザクションは**processedコミットメントレベル**より約8ミリ秒早く到着しますが、実行メタデータのコストがかかります(下記のトレードオフ参照)。
前処理されたトランザクションは、gRPCを介してSolanaトランザクションを受け取る最速の方法です。Heliusは、バリデータに到着する際にシュレッドを直接デコードし、結果として生じるトランザクションを提供することで、実行後の購読より数ミリ秒早くトランザクションデータにアクセスできます。平均して**processedコミットメントレベルの約8ミリ秒前**です。 このガイドでは、前処理されたトランザクションを使用するタイミング、利用可能なデータ、およびLaserStream SDKを使用してそれらを購読する方法(同じgRPC接続を介して前処理されたトランザクションも提供されます)を説明します。

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

Solanaのアーキテクチャでは、トランザクションが完全に処理されるまでにいくつかの段階を経ます:
  1. シュレッド受信 → バリデータがトランザクションシュレッド(データフラグメント)を受信。在ここでHeliusの**raw shreds (UDP)**がデリバリーされます。
  2. シュレッドデコード → シュレッドは生のトランザクションにデコードされます。← 前処理されたトランザクションが利用可能です。
  3. トランザクション実行 → トランザクションがランタイムによって実行されます。
  4. メタデータ生成 → 事前/事後残高、ログ、およびエラー情報が計算されます。
  5. コミットメント → トランザクションが処理/確認/確定状態に達します。← **LaserStream gRPCおよびLaserStream WebSocket**がここでデリバリーします。
実行後の購読はメタデータ生成後のステージ5でデータを提供しますが、前処理された購読はシュレッドをデコード直後、実行完了前のステージ2で提供されます。 トレードオフ: トランザクションデータをミリ秒単位で早く受け取れますが、残高変化、ログ、エラー情報のような実行メタデータは含まれません。
これはトランザクションのみに対応したストリームです。 アカウントおよびプログラムの状態更新は、ランタイムがトランザクションを実行するまで存在しません(ステージ4)。リアルタイムのアカウントまたはプログラムの更新が必要な場合は、LaserStream gRPC at processedコミットメントを使用してください。これがアカウント/プログラム変更を受け取る最速の方法です。
さらに高速なトランザクションシグナルが必要ですか?スケジュールされたトランザクションをストリームするPre Confirmationsや、未処理のトランザクションデータのためのRaw Shreds (UDP)を試してください。

ベストエフォート配信保証

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

どのデータが利用可能か

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

利用可能なデータ

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

欠落しているデータ

  • トランザクションメタデータ - トークン残高の変化、事前/事後残高、トランザクションステータス
  • トランザクションエラー - トランザクションが失敗したかどうかは判断できません
  • 内部インストラクション - クロスプログラム呼び出し(CPI)は含まれません
  • ログメッセージ - プログラムのログは実行中に生成されます
  • 消費コンピューティングユニット - 実行メトリクスは利用不可
前処理されたトランザクションは「提案」を受け取ることと同じで、「結果」なしで見ることができます。ユーザーが試みた内容はわかりますが、実際に何が起こったかはわかりません。

SDKサポートおよびバージョン要件

前処理されたトランザクション購読はすべてのLaserStream SDKでサポートされています:

JavaScript/TypeScript

バージョン0.2.8以降

Rust

バージョン0.1.5以降

Go

バージョン0.1.0以降

実装例

JavaScript/TypeScript

JavaScript SDKは、自動再接続機能を持つ専用のsubscribePreprocessed関数を提供しています:
完全な例: preprocessed-transaction-sub.ts

Rust

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

Go

Go SDKはイディオマティックなGoインターフェースを提供します:
完全な例: preprocessed-transaction-sub.go

購読構造とフィルタリング

リクエスト構造

前処理された購読リクエストは標準の購読に似た構造をもち、限定されたフィルターセットを持ちます:

レスポンス構造

更新は完全なトランザクションメッセージと基本的なメタデータを伴って届きます:
transaction.transactionフィールドには次を含むSolanaトランザクションの完全な構造が含まれています:
  • メッセージ - アカウントキー、インストラクション、最近のブロックハッシュ
  • 署名 - すべてのトランザクション署名
  • アドレスタブルックアップ - バージョントランザクション用