notifyOn 过滤器让 gRPC 账户订阅跳过事务锁定但未写入的账户更新。同一过滤器可用于 WebSocket 的 accountSubscribe 和 programSubscribe 方法——请参阅通过 WebSocket 进行 notifyOn 过滤。
问题:写锁生成重复更新
在 Solana 上,验证器会为事务写锁的每个账户发出账户更新——即使没有指令实际写入账户,因此其 lamports 和数据未更改。对于繁忙的账户,这意味着一连串消耗带宽但不携带新信息的重复“未更改”通知。过滤模式
notifyOn 取以下两个值之一:
需要了解的两个细节:
- 相同数据的写入仍算作写入并会被传递。
write筛选掉仅锁定的接触,而不是碰巧保持相同字节的写入。实际上,这些相同数据的写入很少见——在大多数情况下不到 5% 的更新。 write删除的更新是您已收到状态的精确副本。如果您依赖更新作为“此账户已被事务锁定”的信号(例如,活动跟踪),请继续使用lock。
在 LaserStream gRPC 中使用
在您的SubscribeRequest 中为账户过滤器设置 notifyOn:
notify_on: NotifyOn::Write as i32。在线路层面,这是 SubscribeRequestFilterAccounts 的 notify_on 字段(proto 标签 31),枚举值为 NOTIFY_ON_LOCK(0,默认)和 NOTIFY_ON_WRITE(1)。有关每个账户过滤器字段,请参阅订阅请求参考。
在 gRPC 上,notifyOn 是通过 Helius LaserStream SDK 提供的 Helius 扩展——标准的 Yellowstone 客户端不暴露该字段。
相关
订阅请求参考
每个 gRPC 账户过滤器字段,包括
notifyOn。notifyOn 过滤 (WebSocket)
accountSubscribe 和 programSubscribe 上相同的 notifyOn 字段。账户订阅指南
过滤策略和可运行的账户监控示例,基于 gRPC。
代币账户 (ATA) 过滤
匹配影响钱包拥有的代币账户的交易。