Skip to main content

transactionSubscribeとは何ですか?

transactionSubscribe WebSocketメソッド(標準Solana WebSocket APIへのHelius拡張)は、リアルタイムのトランザクションイベントを可能にします。 使用するには、TransactionSubscribeFilterを提供し、さらにカスタマイズのためにTransactionSubscribeOptionsをオプションで含めます。 transactionSubscribeは、標準のSolanaサブスクリプションメソッドと同じ統合されたwss://mainnet.helius-rpc.comおよびwss://devnet.helius-rpc.com エンドポイント上にあります。

TransactionSubscribeFilter

  • vote: 投票関連のトランザクションを含める/除外するためのブールフラグ
  • failed: 失敗したトランザクションを含める/除外するためのブールフラグ
  • signature: 署名に基づいて特定のトランザクションへの更新をフィルタ
  • accountInclude: トランザクション更新を受け取りたいアカウントのリスト。トランザクション更新には1つのアカウントのみが含まれている必要があります(例: アカウント1または2)。
  • accountExclude: トランザクション更新から除外したいアカウントのリスト
  • accountRequired: トランザクションに指定したすべてのアカウントを含める必要があります(例: アカウント1と2)。
  • tokenAccounts: オプトイン関連トークンアカウント(ATA)展開(balanceChangedall、またはnone)。下記のウォレットの監視、トークン転送を含むを参照してください。
accountIncludeaccountExclude、およびaccountRequired配列には最大50,000アドレスを含めることができます。

TransactionSubscribeOptions (オプション)

  • commitment: データ取得のコミットメントレベル(processedconfirmed、またはfinalized
  • encoding: 返されるデータのエンコーディング形式(base58base64、またはjsonParsed
  • transactionDetails: 返されるデータの詳細レベル(fullsignaturesaccountsnone
  • showRewards: 更新に報酬データを含めるかどうかを示すブールフラグ
  • maxSupportedTransactionVersion: 更新を受け取りたいトランザクションの最大バージョンを指定します。レガシーおよびv0トランザクションの両方を取得するには、値を0に設定します。
maxSupportedTransactionVersionは、特定のトランザクションのアカウントおよびフルレベルの詳細を返すために必要です(例: transactionDetails: "accounts" | "full")。

トランザクションサブスクライブ例

この例では、Raydiumアカウント675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8を含むトランザクションを購読しています。 675k...1Mp8アカウントを含むトランザクションが発生すると、トランザクションのaccountKeysでWSS通知を受け取ります。 サブスクリプションオプションに基づき、トランザクション通知はprocessedコミットメントレベル、jsonParsedエンコーディング、fullトランザクション詳細で送信され、報酬が表示されます。

通知例

ウォレットの監視、トークン転送を含む

accountIncludeでウォレットを監視すると、ウォレットの公開鍵がアカウントキーに直接現れるトランザクションにのみ一致します。通常のケースでは見逃しが発生します。誰かがウォレットにSPLトークン(例えばUSDC)を送信すると、その転送はウォレットの**関連トークンアカウント(ATA)**に触れるため、ウォレットの公開鍵には触れません — そのため、通常のaccountInclude: [wallet]サブスクリプションではそれを認識しません。 監視対象アカウントがトークン残高を所有しているトランザクションにも一致するようにマッチングを拡張するため、tokenAccountsフィールドを設定します。
  • balanceChanged: トランザクションでウォレットが所有するトークン残高の額が変わった(またはトークンアカウントが閉じられた)場合に一致します。これは「実際にお金が動いたときに教えてください」という用途に使用します。これは通常の狭義の、低ボリュームで、最も一般的な選択です。
  • all: ウォレットが所有するトークン残高を参照するトランザクションすべてに一致します、たとえ変更がなくても。高ボリューム。
  • none: 拡張なし。このフィールドの省略と同じです(デフォルト)。
マッチングは所有者ベースで行われます: ウォレットが所有する、派生ATAアドレスだけでなく、非標準的なものを含むあらゆるトークンアカウントをキャッチします。無効な値はJSON-RPCエラー-32602を返します。tokenAccountsを省略したサブスクリプションは、以前とまったく同じように動作します。ATA拡張の仕組み全体については、WebSocketを介したトークンアカウント(ATA)フィルタリングを参照してください。

新しいJupiter DCAの監視

Jupiter DCA、またはドルコスト平均法は、Solanaで定期的な取引をスケジュールする方法です。これらの定期購入/販売注文はオンチェーンで記録されるため、トレーダーはtransactionSubscribeメソッドとgetAssetを使用して新しい注文をリスニングできます。

通知例

新しいpump.funトークンの監視

通知例

サブスクリプションの管理

サブスクリプションID

transactionSubscribeが成功すると、サーバーはresultフィールドにサブスクリプションIDを返します。これは、サブスクリプションからのすべての通知においてparams.subscriptionに表示される同じ番号です:
応答からサブスクリプションIDを保存します。これを解除するには必要です。

解除

通知を受け取らないようにするには、サブスクリプションIDを使ってtransactionUnsubscribeを呼び出します。同じ接続での各transactionSubscribe呼び出しは個別のIDを持つ別のサブスクリプションを作成するため、再サブスクライブする前に解除して重複通知の受信を避けてください。
この例では、Raydiumトランザクションを購読し、サーバーの応答からサブスクリプションIDを取得し、そのIDを使用して解除します。transactionUnsubscribeを呼び出した直後に数件のフライトメッセージが届くことがあります。これは予想される動作です。