Skip to main content
[notifyOn]选项在accountSubscribeprogramSubscribe WebSocket方法上,让订阅跳过那些事务写锁定但从未写入的账户更新。同样的过滤器也可用于gRPC,详见gRPC版本的notifyOn过滤

问题:写锁生成重复更新

在Solana上,验证者会对每个被事务写锁定的账户发出更新通知——即使没有指令实际写入该账户,因此其余额和数据未发生变化。对于繁忙的账户,这意味着一连串重复的“无变化”通知,这会消耗带宽而不携带新信息。

过滤模式

notifyOn取两个字符串值之一: 值得注意的两个细节:
  • 相同数据的写入仍计为写入并被传递。write过滤掉仅锁定而非写入的触碰。在实践中,这些相同数据的写入很少见——在大多数情况下少于5%的更新。
  • write丢弃的更新与您已接收的状态完全相同。如果您依赖通知作为“此账户被事务锁定”的信号(例如,活动跟踪),请坚持使用lock
省略此字段的订阅行为保持不变,因此可以安全地添加到现有订阅中。

accountSubscribe中使用

notifyOn添加到配置对象中:

programSubscribe中使用

相同的键适用于programSubscribe配置对象,过滤掉每个程序所拥有账户的无操作更新:
解析是故障开放的:只有"write"(不区分大小写)选择加入。任何其他情况——缺失、拼写错误、未知标记——都会解析为lock,因此错误会让您保持在所有更新路径上,而不是出现错误或默默丢弃数据。

相关内容

accountSubscribe

完整的accountSubscribe方法参考,包括notifyOn

programSubscribe

完整的programSubscribe方法参考,包括notifyOn

notifyOn Filtering (gRPC)

LaserStream gRPC账户过滤的相同过滤器。

如何使用accountSubscribe

通过WebSocket流式传输账户更新的指南。