⚡ 新着:Elysium テストネット onQuicknodeテストネット HyperEVM上のKinetiqのEVMチェーンのエンドポイント
入手する エンドポイントSOC 2 タイプ II 認証取得・ISO 27001
shredTransactionSubscribeのご紹介:Solana 実行前のトランザクション可視化
Blazarの`shredTransactionSubscribe`は、Solana のトランザクション可視性を、実行前にWebSocket JSON-RPCサブスクリプションとして提供します。フィルタ、通知の形式、およびリクエスト例について学びましょう。

2026年6月30日 — 読了時間9分

Solana ブロックが単一の大きなオブジェクトとしてネットワーク上を移動しないことも、処理が高速な理由の一つです。バリデーターは、ブロックデータを「シュレッド」と呼ばれる小さな断片に分割し、ブロックが完全に再生される前にそれらを送信します。これは、通常のRPCサブスクリプションが実行データを表示できるようになるよりも前に発生します。
Quicknode のWebSocketエンジン「Solana 」であるBlazarには、現在以下の機能が含まれています。 shredTransactionSubscribe. これは、その初期シグナルを、開発者 が利用できるWebSocketメソッドに変換します。このメソッドは、実行前に、シュレッドおよびエントリの取り込み中に検出されたトランザクションを購読します。
shredTransactionSubscribe はベータ版であり、この記事に記載されている内容は変更される可能性があります。
シュレッドとは、Solana ブロックの一定サイズの断片であり、ブロックの生成中にネットワークを介して送信されます。シュレッドを読み取ることで、実行後のRPCメソッドを通じて完成したブロックを照会できるようになる前に、ネットワーク上を移動中のトランザクションデータを確認することができます。
シュレッドはエントリとして再構築できます。エントリには以下の内容が含まれます。Solana バージョン管理されたトランザクション 値:署名、メッセージ、静的アカウントキー、指示、直近のブロックハッシュ、およびv0トランザクション用のアドレス検索テーブルへの参照。
重要な違いはタイミングにあります:
シュレッド/エントリの取り込みは、リプレイ/実行の前に実行されます。
通常のトランザクションのメタデータは、実行後にのみ利用可能です。
シュレッド時のデータは、実行データよりも早く到着する場合があります。ただし、そのデータには、meta、err、ログ、トークン残高、演算単位、内部命令などの実行結果は含まれません。
生のシュレッドデータを扱う際には、開発者 の多くでは容易に埋められない2つの課題があります。
まず、ツールについてです。生のSubscribeEntriesストリームを処理するには、gRPC 、bincodeのデコード、トランザクションの解析、およびアドレスルックアップテーブルの解決が必要です。また、実行前に何が判明しており、何が不明であるかを正確に把握しておく必要があります。ほとんどのアプリ開発者 は、単にWebSocket JSON-RPCサブスクリプションを望んでいるだけです。
第二に、アカウントフィルタリングにはルックアップテーブルが必要です。 Solana v0のトランザクションのほとんどは、アドレスルックアップテーブル(ALT)を使用しています。ALTをローカルで解決しなければ、アカウントフィルタは、ルックアップテーブルを介してのみアカウントに関連するトランザクションを見逃してしまう可能性があります。Blazarは、by アカウントをフィルタリングする際、静的キーに加え、読み込まれたALTアドレスも解決します。
Blazarは、shred-streamingインフラストラクチャからSolana のトランザクションフィードを早期に取得します。Blazarは、その低レベルのネットワーク信号を標準的なWebSocket JSON-RPCサブスクリプションに変換します。Blazarは、通常の実行後のRPCメソッドよりも先にトランザクションを認識できます。その後、構造化された shredTransactionNotification トランザクション本体、スロット、署名、バージョン、および利用可能な場合は解決済みのロード済みアドレスを含みます。
このストリームは、初期段階の「ベストエフォート」型のシグナルとして扱ってください。通知は概ねアップストリーム順に届きますが、厳密な順序は保証されません。同じトランザクションが時折複数回表示されることがあるため、正確に1回のみの配信が必要な場合は、署名に基づいて重複排除を行ってください。
Blazarは、shredから取得したデータを送信する前に、そのデータをさらに充実させます。生の信号をそのまま渡して各クライアントに同じ処理をさせるのではなく、トランザクション形式を正規化し、可能な場合はルックアップテーブルのアドレスを解決します。これにより、サブスクライバーは、特別なSolana ネットワークインフラを運用したり、独自のshredパーサーを構築したりすることなく、実行前のアカウント情報をより詳細に把握することができます。
「シュレッド時間」の可視化により、Solana のデータタイムラインに、新たな、より早い時点が追加されます:
トランザクションのブロードキャスト → シュレッドの検出 → エントリのデコード → リプレイ/実行 → 処理済み/確認済み/確定済みのRPCデータ
Solana のWebSocketメソッドのほとんどは、実行後やバリデータの状態が変更された直後に動作します。 shredTransactionSubscribe エントリがデコードされる、それより前の段階を明らかにする。
それは~の代わりにはなりません transactionSubscribe. これは、トランザクションの意図をできるだけ早く把握することが有益なワークフロー向けの、実行前のコンパニオン機能です。
shredTransactionSubscribe は、実行後のメソッドでは対応できないユースケースをサポートするほか、実行前にデータを配信する他のユースケースby も改善します。
取引 システム、DEX分析、ルーティングエンジン、および市場インフラは、取引が執行される前にその内容を確認することができます。これにより、口座のプレッシャー、プログラム取引の動向、および新規注文の動向flow を、通常の執行後分析streams よりも早く把握することが可能になります。
クライアントは、アドレス検索テーブルを通じて読み込まれたアカウントを含め、特定のアカウントに関連するトランザクションを購読することができます。この機能を利用して、注目度の高いアカウント、プール、トークンアカウント、ヴォールト、またはプロトコルの状態アカウントを監視することができます。
これと合わせて 署名・購読 そして enableReceivedNotification: true 実行前に署名が最初に確認されたタイミングを確認し、その後、署名が成功したか失敗したかを確認するためです。
サポート また、チーム を使用すれば、「トランザクションは実行前に認識されていたか?」「後から処理されたか?」「まったく認識されなかったか?」「ルックアップテーブルのアドレスが使用されたか?」といった質問に答えることができます。これにより、トランザクションのライフサイクルに関する問題の診断が容易になります。
Blazarでは、実行前の投票通知と新規スロット信号に対して、同じshredおよびentryの取り込みパスが使用されます。shredTransactionSubscribeは、その同じ初期データソースに基づいて構築された、トランザクション固有のメソッドです。
shredTransactionSubscribe は、shred およびエントリの取り込みからのトランザクション実行前の通知を購読します。これは、意図的に transactionSubscribe の設定オプションには含まれていません。データが異なるステージから取得されるため、ペイロードも異なります。
この関数は、最初の(かつ唯一の)パラメータとして、1つのオプションのフィルタオブジェクトを受け取ります。
{
"jsonrpc": "2.0",
"id": 1,
"method": "shredTransactionSubscribe",
"params": [
{
"vote": false,
"signature": "optional-signature",
"accounts": {
"include": ["optional-pubkey"],
"exclude": ["optional-pubkey"],
"required": ["optional-pubkey"]
}
}
]
}すべての項目は任意入力です。各アカウント一覧(含める、除外する、必須)には、最大50,000件のエントリを登録できます。
投票true:単純な投票トランザクションのみ。
false:単純な投票トランザクションを除外する。
省略:投票取引と非投票取引の両方を含める。
voteフィルターは、Agaveの「単純投票」トランザクション分類を使用しています。これは、「Voteプログラム命令を含むすべてのトランザクション」を意味するわけではありません。投票命令を含む混合トランザクションは、単純投票として分類されません。voteSubscribeは、独自のゴシップ投票解析機能を備えた別のメソッドです。
署名指定された署名を持つトランザクションのみを返します。
accounts.include少なくとも1つの登録済み口座に関連する取引を処理します。
静的なアカウントキーと、解決済みのALTロードされたアドレスを照合します。
accounts.excludeリストにあるいずれかの口座に関連する取引を削除します。
静的なアカウントキーと、解決済みのALTロードされたアドレスを照合します。
必須のアカウントリストにあるすべての口座に関連する取引のみを抽出します。
静的なアカウントキーと、解決済みのALTロードされたアドレスを照合します。
commitment、encoding、transactionDetails、showRewards、maxSupportedTransactionVersion、およびfailedはサポートされていません。シュレッド派生トランザクションは実行前のJSONペイロードであるため、実行結果やコミットメントレベルは存在しません。
{
"jsonrpc": "2.0",
"id": 11,
"method": "shredTransactionSubscribe",
"params": [
{ "vote": false }
]
}{
"jsonrpc": "2.0",
"id": 12,
"method": "shredTransactionSubscribe",
"params": [
{
"signature": "5VERv8NMvzbJMEkV8xnqLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW"
}
]
}{
"jsonrpc": "2.0",
"id": 13,
"method": "shredTransactionSubscribe",
"params": [
{
"accounts": {
"include": ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"]
}
}
]
}{
"jsonrpc": "2.0",
"id": 14,
"method": "shredTransactionSubscribe",
"params": [
{
"accounts": {
"required": [
"AccountA11111111111111111111111111111111111",
"AccountB22222222222222222222222222222222222"
],
"exclude": [
"AccountC33333333333333333333333333333333333"
]
}
}
]
}成功した場合、サーバーはサブスクリプションIDを返します。このIDを使用して、サブスクリプションを解除してください。
{
"jsonrpc": "2.0",
"result": 123,
"id": 14
}{
"jsonrpc": "2.0",
"id": 15,
"method": "shredTransactionUnsubscribe",
"params": [123]
}通知は標準のJSON-RPC PubSubエンベロープを使用しますが、内部のトランザクション値は実行前のデータです。
{
"jsonrpc": "2.0",
"method": "shredTransactionNotification",
"params": {
"result": {
"context": { "slot": 418437508 },
"value": {
"slot": 418437508,
"signature": "5VERv8NMvzbJMEkV8xnqLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW",
"transaction": {
"signatures": [
"5VERv8NMvzbJMEkV8xnqLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW"
],
"message": {
"header": {
"numRequiredSignatures": 1,
"numReadonlySignedAccounts": 0,
"numReadonlyUnsignedAccounts": 2
},
"accountKeys": [
"FeePayer11111111111111111111111111111111111",
"Program111111111111111111111111111111111111"
],
"recentBlockhash": "Eit7...",
"instructions": [
{
"programIdIndex": 1,
"accounts": [0],
"data": "3Bxs4NN8M2Yn4TLb",
"stackHeight": 1
}
]
}
},
"version": "legacy"
}
},
"subscription": 123
}
}v0トランザクションの場合、transaction.message.addressTableLookups にはルックアップテーブルへの参照が保持され、value.loadedAddresses には解決済みの公開鍵が格納されます。
{
"jsonrpc": "2.0",
"method": "shredTransactionNotification",
"params": {
"result": {
"context": { "slot": 418437509 },
"value": {
"slot": 418437509,
"signature": "7rYg...",
"transaction": {
"signatures": ["7rYg..."],
"message": {
"header": {
"numRequiredSignatures": 1,
"numReadonlySignedAccounts": 0,
"numReadonlyUnsignedAccounts": 1
},
"accountKeys": [
"FeePayer11111111111111111111111111111111111",
"Program111111111111111111111111111111111111"
],
"recentBlockhash": "AbCd...",
"instructions": [
{
"programIdIndex": 1,
"accounts": [0, 2, 3],
"data": "3Bxs4NN8M2Yn4TLb",
"stackHeight": 1
}
],
"addressTableLookups": [
{
"accountKey": "LookupTab1e11111111111111111111111111111111",
"writableIndexes": [12],
"readonlyIndexes": [3]
}
]
}
},
"version": 0,
"loadedAddresses": {
"writable": ["Writab1eLoaded11111111111111111111111111111"],
"readonly": ["Readon1yLoaded11111111111111111111111111111"]
}
}
},
"subscription": 124
}
}Blazarがキャッシュから1つ以上のルックアップテーブルを解決できない場合、v0通知セット:
"loadedAddresses": null
起動時のウォームアップや、Solana gRPC によるライブ更新が行われていても、拡張されたばかりのテーブルはキャッシュとの競合を起こす可能性があります。その場合、Blazar は、読み込まれたアドレスが不完全な v0 トランザクションに対して `loadedAddresses: null` を設定し、通知の正確性を維持します。
レガシーのトランザクションでは、loadedAddresses が省略されます。
これは実行前のデータであるため、通知には以下の内容は含まれていません:
meta
えっと
logs
内部の指示
期首・期末残高
トークンの残高(処理前/処理後)
消費された演算ユニット数
データの返却
報酬
ブロック内の最終トランザクションインデックス
shredTransactionSubscribe は、実行結果を示すメソッドではなく、初期段階の観測を行うメソッドです。
以下から選択してください Solana エンドポイント。
WSSのURLをコピーしてください エンドポイント URL(wss://your-エンドポイント-name.solana-メインネット.quiknode.pro/abc123)をコピーし、既存のWebSocketクライアントコードを使用して接続してください。
オプションのフィルターを指定して `shredTransactionSubscribe` リクエストを送信するには、上記の「リクエスト例」を参照してください。
shredTransactionNotification メッセージは、受信次第処理してください。
Solana のWebSocketsを初めてご利用ですか?「 Solana のWebSocketサブスクリプションの作成方法」ガイドでは、必要な情報がすべて網羅されています。
WebSockets以上の低遅延なSolana ストリーミングを必要とするチーム 向けに、Quicknode の Solana gRPCYellowstone streams 製品は、同じ エンドポイント エコシステムから提供されます。
transactionSubscribe は実行後であり、トランザクションステータスのメタデータを含みます。一方、shredTransactionSubscribe は実行前であり、ログ、メタデータ、エラー、残高、および演算単位は含まれません。
はい。断片から観測されたトランザクションは、その後、実行に失敗したり、有効期限が切れたり、最終的な台帳に反映されなかったりする可能性があります。この方法は、最終性(ファイナリティ)を示すシグナルではなく、早期の観測シグナルです。
はい。アカウントフィルターは、静的なアカウントキーに加え、Blazarのローカルルックアップテーブルキャッシュから解決されたALTロード済みアドレスと照合されます。
無効化されたALTは、そのSlotHashesのクールダウン期間中も引き続き使用可能です。Blazarは、そのクールダウン期間中に無効化されたテーブルを解決し、明らかに有効期限が切れたテーブルは未解決として扱います。
トランザクションの実行結果よりも、その初期段階での意図がより重要となる場合に活用してください。具体的には、低遅延分析、アカウント活動の監視、トランザクションライフサイクルの診断、取引 インフラストラクチャ、および実行前の可観測性などが挙げられます。
最終的な取引ステータス、ログ、残高、トークン残高の変動、演算単位、報酬、または確定したブロックの構成情報が必要な場合は、本機能を使用しないでください。その場合は、実行後のRPC/WebSocketメソッドをご利用ください。
これまで、実行前のトランザクションデータには、Solana 専用のネットワークインフラストラクチャ(gRPC クライアント、bincodeデコード、shred解析パイプラインなど)が必要でした。BlazarのshredTransactionSubscribe機能により、その必要はなくなりました。この機能は、実行前のトランザクションの意図を、標準的なWebSocket JSON-RPCサブスクリプションとして配信します。
これは、すべてのQuicknode Blazar WebSocket エンドポイント で本日よりご利用いただけます。Quicknode のダッシュボードにログインしてご利用を開始するか、まだアカウントをお持ちでない場合は Quicknode のアカウントを作成してください。
shredTransactionSubscribeは現在ベータ版ですので、皆様からのフィードバックやご提案をお待ちしております。solana@quicknode.comまでメールをお送りいただくか、Discordにてご連絡ください。
2017年に設立されたQuicknode は、開発者 および企業向けに、機関投資家レベルのブロックチェーン インフラストラクチャを提供しています。99.99%の稼働率と、76以上のチェーンに対応したサポート を備え、チーム は妥協のないオンチェーン アプリケーションの構築とスケーリングを実現します。
最新のエンジニアリングに関する知見、製品の最新情報、Web3のニュースを、メールボックスに直接お届けします。