Skip to main content
LaserStream 的 notifyOn 过滤器让 gRPC 账户订阅跳过事务锁定但未写入的账户更新。同一过滤器可用于 WebSocket 的 accountSubscribeprogramSubscribe 方法——请参阅通过 WebSocket 进行 notifyOn 过滤

问题:写锁生成重复更新

在 Solana 上,验证器会为事务写锁的每个账户发出账户更新——即使没有指令实际写入账户,因此其 lamports 和数据未更改。对于繁忙的账户,这意味着一连串消耗带宽但不携带新信息的重复“未更改”通知。

过滤模式

notifyOn 取以下两个值之一: 需要了解的两个细节:
  • 相同数据的写入仍算作写入并会被传递。write 筛选掉仅锁定的接触,而不是碰巧保持相同字节的写入。实际上,这些相同数据的写入很少见——在大多数情况下不到 5% 的更新。
  • write 删除的更新是您已收到状态的精确副本。如果您依赖更新作为“此账户已被事务锁定”的信号(例如,活动跟踪),请继续使用 lock
省略该字段的订阅行为完全不变,因此可以安全地添加到现有过滤器中。

在 LaserStream gRPC 中使用

在您的 SubscribeRequest 中为账户过滤器设置 notifyOn
在 Rust SDK 中,设置 notify_on: NotifyOn::Write as i32。在线路层面,这是 SubscribeRequestFilterAccountsnotify_on 字段(proto 标签 31),枚举值为 NOTIFY_ON_LOCK(0,默认)和 NOTIFY_ON_WRITE(1)。有关每个账户过滤器字段,请参阅订阅请求参考 在 gRPC 上,notifyOn 是通过 Helius LaserStream SDK 提供的 Helius 扩展——标准的 Yellowstone 客户端不暴露该字段。

相关

订阅请求参考

每个 gRPC 账户过滤器字段,包括 notifyOn

notifyOn 过滤 (WebSocket)

accountSubscribeprogramSubscribe 上相同的 notifyOn 字段。

账户订阅指南

过滤策略和可运行的账户监控示例,基于 gRPC。

代币账户 (ATA) 过滤

匹配影响钱包拥有的代币账户的交易。