Skip to main content
Parsed Streamsはクローズドベータです。現在、アクセスはホワイトリストに登録されたプロジェクトIDに限定されており、APIは一般公開前に変更される可能性があります。クローズドベータに参加するには、こちらで応募してください。

解析済みストリームとは?

解析済みストリームは、すべての確認済みSolanaトランザクション(投票トランザクションを除く)を監視し、それをデコードし、定義したフィルターに一致するトランザクションをプッシュするWebSocketサービスです。「ジュピターのルートインストラクションに関心がある」や「このアカウントに関係するすべてのものに関心がある」と伝えると、サーバーが監視、デコード、マッチングを行います。 全てのトランザクションが既にデコードされた状態で受け取れます: 各命令には名前付きの引数とアカウント、さらに手数料、完全なアカウントキーリスト、実際に何が起こったかのトランザクションレベルでのsummary、SOLとトークンの転送、およびフィルタに一致した正確な命令のポインタが含まれます。全データは確認されたコミットメントで配信されます。

メンタルモデル

Solanaの内部構造を既に知っている場合は先に進んでください。そうでない場合、これはAPI全体が構築されているモデルです。 トランザクションは署名されたメッセージです。それは手数料支払い者を指定し、触れるすべてのアカウントを列挙し、インストラクションのリストを保持します。見ると、署名(ユニークID)、スロット、支払った手数料、アカウントキー、成功または失敗、インストラクションが表示されます。 インストラクションは1つのアクションです。このプログラムをこの入力でこのアカウントを使って実行します。ジュピターでのスワップ、トークン転送、メモなど。トランザクションには通常、いくつかのインストラクションが含まれ、それらは順番に実行されます。 プログラムは他のプログラムを呼び出すことができます。 ジュピターがスワップを実行する際、それ自身がトークンを動かすのではありません。そのルートインストラクションがトークンプログラムを呼び出してトークンを移動させ、流動性を持つ交換プログラムを呼び出します。これらのネストされた呼び出しもインストラクションであり、内部インストラクション(またはCPI、クロスプログラム呼び出し)と呼ばれます。フィルタを書く際にはこれが重要で、実際のトークン移動などの実際の活動の多くは内部インストラクションで行われるため、デフォルトでそれらにフィルタが一致します。ユーザーが署名したインストラクションのみを取得したい場合は、includeCpiをfalseに設定します。 アカウントは、インストラクションが扱うオンチェーンのものです:ウォレット、トークン残高、プール、ミントなど。各インストラクションはアドレスの順序付きリストとしてそれらを運び、その順序が契約です。プログラムが各位置の意味を定義します。例として、トークンプログラムは最初にトークンを受けるアカウント、その次にトークンを受け取るアカウント、その次に転送を承認する所有者を期待します。 役割はこれらの位置に名前を付けます。多くの有名なプログラムは、そのインターフェースの機械可読のマニュアル、IDLと呼ばれるものを公開しています。このマニュアルにはプログラムが持つすべてのインストラクション、そのデータフィールドの意味、および各アカウント位置の目的が記載されています。Heliusはこれらのマニュアルのカタログを何千ものプログラムのために維持しています。これを使用すると、単なるアドレスリストが名前付きアカウントに変わります。たとえば、トークン転送の場合、位置0がsourceになり、位置1がdestinationになり、位置2がauthorityになります。第三のアドレスが何を意味するのかを推測する代わりに、{"name": "authority", "pubkey": "9xQe...", "isSigner": true}を読みます。これらの名前はフィルタできる役割です。 デコードは命令の入力データに適用される同じアイデアです。データはワイヤ上で不透明なバイトです。プログラムのマニュアルを用いると、バイトは名前付きの値になります: {"in_amount": "1000000", "slippage_bps": 50}。すべての命令がデコード可能なわけではなく、各命令はそのフィールドから直接確認できる3つの状態のいずれかに分類されます:
  • Decoded: 命令は名前付きargsと名前付きaccountsを伴ったdecodedオブジェクトを持ちます。
  • Recognized: decodedの上に、命令はsummaryを持ち、type(例えばswap)、人間が読めるdescription、および構造化されたparsedDataペイロード(例えば金額とミントを含むスワップメタデータ)を持ちます。
  • Undecoded: プログラムまたは命令がカタログにない場合、decodednullであり、命令は代わりに生のバイト(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とGraphQL上でアドレスの履歴を要求に応じてページングします。Parsed Streamsは新しいトランザクションをそのままプッシュします。

サポートされているプログラム

Parsed Streamsは、オンチェーンIDLからの3,600以上のプログラム、およびSPLトークン、トークン2022、システムプログラムといったコアプログラムをビルトインデコーダーでデコードします。任意のプログラムアドレスでフィルタリングが可能です。サービスがデコードできない命令は生の命令データとしてストリームされます。 最も使用されているデコード済みプログラムのいくつか:
プログラムが見つかりませんか? まだカタログに登録されている可能性があります。アドレスを使用してその命令、イベント、アカウントの役割を確認するにはdescribeProgramを呼び出してください。

アクセス

ホワイトリストに登録されたプロジェクトIDのみがクローズドベータ期間中に接続可能です。Heliusチームはプロジェクトがホワイトリストに登録されると接続エンドポイントを共有します。 プロジェクトのAPIキーで認証し、api-keyクエリパラメータ(またはx-api-keyヘッダー)として渡します。このキーは接続が開いたときにチェックされ、不足、不正、またはホワイトリストに登録されていないキーはHTTP 401で拒否され、接続キャップに達したプロジェクトにはHTTP 429が返されます。

はじめに

クイックスタート

接続し、初めてのフィルタを送信し、通知を読む。

Jupiter Swapsを追跡

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

Pump.fun Mintsを追跡

新しいPump.funトークンのデプロイをすべて記録する再接続安全なリスナー。

再接続の処理

切断を検出し、バックオフし、再購読し、見逃したスロットを埋める。