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経由でのアカウント更新ストリーミングのガイド。