Skip to main content

Parsed Streams とは?

Parsed Streams は、確認済みのすべての Solana トランザクション(投票トランザクションを除く)を監視してデコードし、定義したフィルターに一致するトランザクションを配信する WebSocket サービスです。「Jupiter のルート命令を監視したい」または「このアカウントに関係するすべてを監視したい」と指定すると、サーバーが監視、デコード、照合を行います。 受信するのは、デコード済みの完全なトランザクションです。名前付き引数と名前付きアカウントを含むすべての命令に加え、手数料、完全なアカウントキー一覧、発生した内容を示すトランザクションレベルの summary、SOL とトークンの転送、フィルターに一致した正確な命令への参照が含まれます。すべてのデータは confirmed コミットメントで配信されます。

基本的な概念

Solana の内部構造をすでに理解している場合は、先に進んでください。そうでない場合は、API 全体の基礎となる次のモデルを確認してください。 トランザクションとは、署名されたメッセージです。手数料支払者を指定し、アクセスするすべてのアカウントを列挙し、命令の一覧を保持します。トランザクションを見ると、署名(一意の ID)、処理されたスロット、支払われた手数料、アカウントキー、成功または失敗の結果、命令を確認できます。 命令とは、1 つのアクションです。指定されたアカウントを使用し、指定された入力でプログラムを実行します。たとえば、Jupiter でのスワップ、トークン転送、メモなどです。通常、トランザクションには複数の命令が含まれ、それらは順番に実行されます。 プログラムはほかのプログラムを呼び出せます。 Jupiter がスワップを実行するとき、Jupiter 自体がトークンを移動するわけではありません。ルート命令から、トークンを移動するトークンプログラムと、流動性を保持する取引所プログラムを呼び出します。これらのネストされた呼び出しも命令であり、内部命令(または CPI、クロスプログラム呼び出し)と呼ばれます。これはフィルターを作成するときに重要です。スワップ内での実際のトークン移動など、多くの実処理は内部命令で行われるため、デフォルトではフィルターの照合対象になります。ユーザーが署名した命令だけを対象にする場合は、includeCpi を false に設定してください。 アカウントとは、命令が操作するオンチェーン上の要素です。ウォレット、トークン残高、プール、ミントなどがあります。各命令はアドレスを順序付きリストとして保持し、その順序がコントラクトになります。各位置の意味はプログラムによって定義されます。たとえば、トークンプログラムでは、最初にトークンの送信元アカウント、次に受信先アカウント、最後に転送を承認する所有者が指定されることを想定しています。 ロールは、それらの位置に名前を付けます。よく知られているプログラムの多くは、インターフェースの機械可読なマニュアルである IDL を公開しています。このマニュアルには、プログラムが持つすべての命令、各データフィールドの意味、各アカウント位置の用途が記載されています。Helius は数千のプログラムについて、これらのマニュアルのカタログを管理しています。このカタログを使用すると、単なるアドレス一覧が名前付きアカウントに変換されます。トークン転送の場合、位置 0 は source、位置 1 は destination、位置 2 は authority になります。3 番目のアドレスの意味を推測する代わりに、{"name": "authority", "pubkey": "9xQe...", "isSigner": true} として確認できます。これらの名前が、フィルタリングに使用できるロールです。 デコードとは、同じ考え方を命令の入力データに適用することです。転送時、そのデータは不透明なバイト列です。プログラムのマニュアルを使用すると、バイト列は名前付きの値になります({"in_amount": "1000000", "slippage_bps": 50})。すべての命令をデコードできるわけではないため、各命令はフィールドから直接確認できる次の 3 つの状態のいずれかになります。
  • デコード済み:命令には、名前付きの args と名前付きの accounts を持つ decoded オブジェクトが含まれます。
  • 認識済み:decoded に加え、命令には summary が含まれます。これには type(swap など)、人が読める description、構造化された parsedData ペイロードが含まれます。たとえば、数量やミントを含むスワップのメタデータです。
  • 未デコード:プログラムまたは命令がカタログに存在せず、decoded は null です。代わりに、命令には生のバイト列(rawData)とプレーンなアドレス一覧(rawAccounts)が含まれるため、常に処理できるデータが得られます。
以上がモデルの全体です。フィルターはこのモデルから直接構築されます。
  • programs:命令が呼び出すプログラム
  • instructionNames:プログラムのマニュアルに記載されているアクション名
  • accounts.include:アクセスするアドレス
  • accounts.roles:指定したアドレスを保持する必要がある名前付き位置
  • includeCpi と includeFailed:内部命令と失敗したトランザクションを対象に含めるかどうか
フィルターは命令を選択し、通知ではトランザクション全体が配信されます。

比較

vs Enhanced WebSockets

Enhanced WebSockets は、デコードせずにトランザクション全体またはアカウント更新をストリーミングします。Parsed Streams は命令レベルで照合し、すべてをデコードします。

vs LaserStream gRPC

LaserStream は、クライアント側でフィルタリングとデコードを行う高スループットの gRPC データストリームです。Parsed Streams は、サーバー側でフィルタリングとデコードを行う WebSocket API です。

vs Parsed Events

Parsed Events は、同じデコード処理を過去のトランザクションに適用します。署名を解析するか、REST を介して必要に応じてアドレスの履歴をページ単位で取得します。Parsed Streams は、新しいトランザクションが処理されるとすぐに配信します。

対応プログラム

Parsed Streams は、オンチェーン IDL に基づいて 3,600 以上のプログラムをデコードします。さらに、組み込みデコーダーを使用して SPL Token、Token-2022、System Program などのコアプログラムもデコードします。任意のプログラムアドレスでフィルタリングできます。サービスでデコードできない命令は、代わりに生の命令データとしてストリーミングされます。 デコードに対応する、よく使用されるプログラムの一部を次に示します。
プログラムが見つからない場合でも、カタログに登録されている可能性があります。そのアドレスを指定して describeProgram を呼び出し、命令、イベント、アカウントロールを確認してください。

アクセスと料金

Parsed Streams は、Free を含むすべてのプランで一般提供されています。リアルタイムの解析済みトランザクションデータについては、Enhanced Transaction Webhooks の後継となります。Helius Dashboard から API キーを取得してください。 配信されるイベントごとに 1 クレジットが必要です。これは webhook イベントと同じレートです。完全な料金一覧については、Credits を参照してください。 Parsed Streams は、Helius RPC および WebSocket トラフィックと同じホストにある Gatekeeper エンドポイントで提供されます。Parsed Streams 専用のホストはありません。
プロジェクトの API キーを api-key クエリパラメータ(または x-api-key ヘッダー)として渡して認証します。キーは接続開始時に確認されます。キーがない場合や無効な場合は HTTP 401 で拒否され、プロジェクトが接続上限に達している場合は HTTP 429 が返されます。

はじめに

Quickstart

接続して最初のフィルターを送信し、通知を読み取ります。

Track Jupiter Swaps

プログラム検出を使用して実際のフィルターを構築し、サブスクライブします。

Track Pump.fun Mints

Pump.fun トークンが新たにデプロイされるたびに記録する、再接続に対応したリスナーを構築します。

Handling Reconnects

切断を検出し、バックオフして再サブスクライブし、欠落したスロットをバックフィルします。