notifyOn]选项在accountSubscribe和programSubscribe 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流式传输账户更新的指南。