Skip to main content
Parsed Streams が初めてですか?まずメンタルモデルを読んでください。フィルターがなぜそのように見えるのかを説明しています。

クイックスタート

1

Get Access

Parsed Streams は、配信イベントあたり 1 クレジットですべてのプランで利用できます。Helius Dashboard から API キーを取得し、Helius RPC および WebSocket トラフィックと同じホストである wss://beta.helius-rpc.com の Gatekeeper エンドポイントに接続します。認証は、あなたのプロジェクトの API キーを api-key クエリパラメータ(または x-api-key ヘッダー)として渡します。
2

接続

wscat
不足または無効なキーはHTTP 401で拒否されます。接続上限に達したプロジェクトはHTTP 429を受け取ります。
3

フィルターでサブスクライブ

フィルターとオプションのオプションを指定して parsedTransactionSubscribe を送信します。
応答 result は整数のサブスクリプション ID です。
4

通知を読む

マッチするトランザクションはすべて、すでにデコードされた parsedTransactionNotification として到着し、フィルターがヒットした命令を指す matchedIndexes が含まれています。完全な形式は通知を参照してください。
5

サブスクライブ解除

または接続を閉じるだけで、すべてのサブスクリプションが削除されます。

ガイド

Jupiter Swaps を追跡

信頼できるフィルターを構築するために describeProgram を使用します。

Pump.fun Mints を追跡

各新しい Pump.fun トークンを記録する再接続対応のリスナーです。

再接続処理

アイドルタイムアウトやデプロイを乗り越え、見逃したものを正確に補完します。

プロトコルリファレンス

Parsed Streams は、単一の WebSocket 接続を通じて JSON-RPC 2.0 を使用します。各リクエストは同じ id に応じて応答します。サブスクリプションは、サブスクライブ解除または切断があるまで parsedTransactionNotification メッセージをプッシュします。

サブスクライブ

フィルターとオプションを使用して parsedTransactionSubscribe を送信します。応答 result は整数のサブスクリプション ID です。
Request
Response

フィルターフィールド

programs または accounts.include のいずれかが必要です。設定したフィールドは AND で結合されます:命令はすべてを満たす必要があります。
string[]
一致させるプログラムID(base58アドレス、名前ではありません)。インストラクションがこのリストにあるプログラムの場合に一致します。リスト内のOR。
string[]
デコードされたインストラクション名。最初に完全一致し、その後大文字と小文字を区別しないフォールバックが行われます。カタログが識別できる名前のインストラクションのみ一致しますので、名前はdescribeProgramから取ってください。
string[]
アカウントアドレス。これらのいずれかがアカウントリストに登場すればインストラクションが一致します。リスト内のOR。デコードされていないインストラクションにも機能します。プログラムID自体はここではアカウントとみなされません。
object
デコードされたアカウントロール名からアドレスへのマップ。各エントリが保持される必要があります(エントリ間でAND)。インストラクションがデコードされている必要があります。ロール名は正確に一致する必要があるので、describeProgramからコピーしてください。
boolean
デフォルト:"false"
失敗したトランザクションのインストラクションを含めます。
boolean
デフォルト:"true"
内部(CPI)インストラクションが一致対象です。トップレベルのインストラクションのみを一致させるにはfalseを設定します。
フィルターまたはオプション内の不明なフィールドは -32602 で拒否され、無視される代わりに何もマッチしません。

オプション

2番目のパラメータはオプションです。
string
デフォルト:"confirmed"
confirmed のみがサポートされています。
string
デフォルト:"full"
各通知に含まれる内容。full:トランザクション全体、すべての命令、フィルターヒットを指す matchedIndexes を含みます。matched:一致した命令のみ、インデックスリストなし。raw:一致した命令のみ、その位置に還元されて、それぞれの programId、base58 の data バイト、デコードされたフィールドなし、accountKeys 配列なし。帯域幅がコンテキストよりも重要な場合は matched、命令データを自分でデコードし、バイトのみを必要とする場合は raw を使用します。
プロジェクトごとの同時接続数はプランによって異なります。Free では 5、Developer では 10、Business および Professional では 50 で、プロジェクトのすべての API キーで共有されます。レート制限を参照してください。

通知

サブスクリプションごとに一致するトランザクションごとの通知。デフォルトの details: "full" とともに:
これを読む:
  • transaction は完全なコンテキストです。fee の単位は lamports です。accountKeys は、アドレスルックアップテーブルから読み込まれたキーを含む完全なキーリストであり、チェーンから報告される順序と同じです。feePayer は常に accountKeys[0] です。error は、status が "error" の場合に、トランザクションエラーを構造化 JSON として保持します(例:{"InstructionError": [2, {"Custom": 6001}]})。
  • summary は、表示されるすべての箇所で同じ構造です。type(swap や transfer など)、人が読める description、およびパーサーがアクションを認識した場合の構造化された parsedData ペイロードで構成されます。スワップの場合は、プロトコル、数量、ミントが含まれます。transaction.summary はトランザクションの主要なアクションを示します。認識された各命令には、同じ構造の独自の summary が含まれます。トランザクション内のすべてのスワップを収集するには、instructions を反復処理し、summary.type が "swap" である箇所の summary.parsedData を読み取ります。
  • スワップ数量は取引プラットフォームから報告された値です。 in_amount、actual_out_amount、および parsedData 内の内部スワップ数量は、ユーザーのウォレットが実際に送受信した数量ではなく、取引プラットフォームから報告された値です。Token-2022 の送金手数料や、スワップ外で適用されるその他の控除は考慮されていません。正確な受取数量を確認するには、トランザクション前後のユーザーのトークンアカウント残高を比較します。
  • nativeTransfers と tokenTransfers は、パーサーがトランザクション全体から抽出した SOL とトークンの移動を、Parsed Events API が返すものと同じ構造で一覧表示します。そのため、ストリームと API の利用側で処理コードを共有できます。どちらも常に存在しますが、空の場合があります。
  • instructions には、トランザクションのすべての命令が実行順に含まれます。各トップレベル命令の後に、その内部命令が続きます。各エントリには独自の位置情報が含まれます。instructionIndex は、そのエントリが属するトップレベル命令を示します(0 から開始)。innerInstructionIndex は、その命令の内部呼び出し内での位置を示します(null の場合はトップレベル命令自体を意味します)。stackHeight は呼び出しの深さです(トップレベルは 1)。配列内の位置ではなく、これらを使用してください。
  • matchedIndexes は instructions へのインデックスであり、フィルターに実際に一致した命令を示します。残りの命令はコンテキストとして含まれます。details: "matched" を使用すると、配列には一致した命令のみが含まれ、matchedIndexes は存在しません。
  • decoded の名前は snake_case です(in_amount、user_transfer_authority)。これはプログラムの IDL で公開されている形式です。u64 値は JavaScript の数値に収まらないため、整数引数は通常、文字列("1000000")です。
  • blockTime は現在、常に null です。これに依存しないでください。
  • 1 つのトランザクション内に、デコード済み命令と未デコード命令が混在することを想定してください。完全にデコードされたスワップが、認識されていないメモの隣に存在する場合があります。decoded に基づいて分岐してください。これが null の場合、命令には代わりに rawData(base58 バイト)と rawAccounts(プレーンな公開キーリスト)が含まれるため、常に処理できるデータがあります。
details: "raw"を使用するとvalueはトランザクションメタとブロブに縮小されます。

サブスクライブ解除

サブスクリプションが存在し、自分のものであれば true を返します。通知は即座に停止します。接続を閉じるとすべてのサブスクリプションが削除されます。

発見

この種の API で最も一般的な失敗は、フィルター自体は有効でも何にも一致しないことです。通常は、命令名またはロール名を推測して指定したことが原因です。describeProgram は、マッチャーが比較する正確な名前を返すことで、この問題を防ぎます。現在は wss://fs-beta.helius-rpc.com/?api-key=<API_KEY> でのみ利用できるため、サブスクリプションとは別の接続で送信してください。
Request
Response
プログラムアドレスまたはカタログ名を渡すことができますが、住所を優先してください:名前はプログラムバージョン間で曖昧になる可能性があります(複数のカタログエントリが同じ jupiter という名前を持ちます、名前検索は古いものを解決することがあります)。名前で検索する場合は、result.id がサブスクライブしようとしているプログラムであることを確認してください。 推奨フロー:describeProgram を使用して正確な命令名とロール名を取得し、それらの名前を使用してフィルターを構築し、次にサブスクライブします。Track Jupiter Swaps ガイドはこれを端から端まで説明します。

制限

エラー

エラーは JSON-RPC 2.0 に従います:{ "error": { "code": <int>, "message": "<text>" }, "id": <id> }。メッセージは何が間違っていたか、どこで間違っていたかを正確に言います。 接続はまた WebSocket クローズコードによって閉じられることがあります—それぞれが何を意味し、どのように回復するかについては再接続の処理を参照してください。

クライアント例