Skip to main content
accountSubscribeおよびprogramSubscribe WebSocketメソッドのnotifyOnオプションにより、トランザクションが書き込みロックをかけたが書き込まれていないアカウントの更新をサブスクリプションからスキップできます。同じフィルタがgRPCでも利用可能です。詳しくはgRPCのnotifyOnフィルタリングをご覧ください。

問題: 書き込みロックが重複更新を生成

Solanaでは、バリデーターはトランザクションが書き込みロックをかけるすべてのアカウントに対してアカウント更新を発行します。これは実際にアカウントに書き込まれていなくても発生し、アカウントのラプソンとデータが変更されなかったとしてもです。多忙なアカウントでは、「何も変わらなかった」という重複通知が連続的に発生し、新しい情報を運ぶことなく帯域を消費します。

フィルターモード

notifyOnは2つの文字列値のいずれかを取ります: 知っておくべき2つの詳細:
  • 同一データの書き込みも書き込みと見なされ、配信されます。writeはロックのみのタッチをフィルタリングし、同じバイトが残る書き込みをすることはありません。実際には、これらの同一データの書き込みはまれで、ほとんどの場合更新の5%未満です。
  • writeがドロップする更新は、すでに受け取った状態の正確な重複です。通知を「このアカウントがトランザクションによってロックされた」シグナルとして依存している場合(例:アクティビティ追跡)、lockを維持してください。
フィールドを省略したサブスクリプションはこれまで通り動作するため、既存のサブスクリプションに安全に追加できます。

accountSubscribeでの使用方法

設定オブジェクトにnotifyOnを追加します:

programSubscribeでの使用方法

同じキーがprogramSubscribe設定オブジェクトで機能し、プログラムが所有するすべてのアカウントでno-op更新をフィルタリングします:
パースはフェイルオープンであり、"write" (大文字小文字を区別しない) のみがオプトインします。他は何でも — 欠如、タイプミス、未知のトークン — はlockに解決されるため、ミスが発生してもすべての更新パスを維持します。

関連

accountSubscribe

完全なaccountSubscribeメソッドリファレンス、notifyOnを含む。

programSubscribe

完全なprogramSubscribeメソッドリファレンス、notifyOnを含む。

notifyOn Filtering (gRPC)

LaserStream gRPCアカウントフィルタでの同じフィルタ。

How to Use accountSubscribe

WebSocket経由でのアカウント更新ストリーミングのガイド。