クイックスタート
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
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 を使用します。通知
サブスクリプションごとに一致するトランザクションごとの通知。デフォルトの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 クローズコードによって閉じられることがあります—それぞれが何を意味し、どのように回復するかについては再接続の処理を参照してください。