notifyOn filter lets a gRPC account subscription skip updates for accounts that a transaction write-locked but never wrote to. The same filter is available on the WebSocket accountSubscribe and programSubscribe methods — see notifyOn Filtering over WebSocket.
The problem: write locks generate duplicate updates
On Solana, the validator emits an account update for every account a transaction write-locks — even when no instruction actually wrote to the account, so its lamports and data are unchanged. For busy accounts, that means a steady stream of duplicate “nothing changed” notifications that consume bandwidth without carrying new information.Filter modes
notifyOn takes one of two values:
Two details worth knowing:
- A write of identical data still counts as a write and is delivered.
writefilters out lock-only touches, not writes that happen to leave the same bytes. In practice these identical-data writes are rare — under 5% of updates in most cases. - The updates
writedrops are exact duplicates of state you already received. If you rely on updates as a “this account was locked by a transaction” signal (e.g., activity tracking), stay onlock.
Use it in LaserStream gRPC
SetnotifyOn on an accounts filter in your SubscribeRequest:
notify_on: NotifyOn::Write as i32. At the wire level this is the notify_on field of SubscribeRequestFilterAccounts (proto tag 31), with enum values NOTIFY_ON_LOCK (0, the default) and NOTIFY_ON_WRITE (1). See the Subscribe Request reference for every accounts filter field.
Over gRPC, notifyOn is a Helius extension available through the Helius LaserStream SDK — stock Yellowstone clients don’t expose the field.
Related
Subscribe Request Reference
Every gRPC accounts filter field, including
notifyOn.notifyOn Filtering (WebSocket)
The same
notifyOn field on accountSubscribe and programSubscribe.Account Subscriptions Guide
Filtering strategies and runnable account-monitoring examples over gRPC.
Token Account (ATA) Filtering
Match transactions touching the token accounts a wallet owns.