Solana getTransactionCount怎么读? 图 1
Solana getTransactionCount怎么读? · 图 1

getTransactionCount的名字很像“现在每秒交易数”,它实际返回一个从网络运行以来累积的计数器。单次请求得到的是一个总数,没有时间分母,所以不能直接写成TPS。只有两个时点的同口径差分,才可以估算那个区间的平均处理速率。

单次响应只回答“累计到多少”

getTransactionCount返回一个u64,表示截至指定commitment状态所处理的交易累计数。 返回的u64值对应指定commitment视图。它没有自带“最近60秒”、“非投票交易”或“峰值”这些限定。如果一个页面把该值直接加上TPS单位,单位已经错了:累计交易数的单位是“笔”,TPS是“笔/秒”。

双时点差分必须锁定四个条件

设第一次计数为C1,第二次为C2,两次采集的实际墙上时间差为T秒,区间平均可写成“(C2-C1)/T”。然而两次请求必须使用同一RPC节点或明确标注节点切换,使用同一commitment,使用可比较的客户端版本,并用单调时钟计算经过时间。

t1: 记录端点 + commitment + C1 + 单调时钟
        等待固定采样周期
t2: 记录同口径 C2 + 单调时钟
区间速率 = (C2 - C1) / 实际经过秒数

该RPC接受commitment与minContextSlot配置,不同节点和状态视图可在同一时刻返回不同累计值。 commitment不同时,processed视图可比finalized视图更快包含新交易,两个累计值不适合直接做差。同一个负载均衡URL也可能将两次请求转到视图稍有不同的后端,所以专业监控要记录服务商和响应上下文,并对值倒退设置异常分支。

与getRecentPerformanceSamples的差异

估算区间吞吐需要使用两个时点累计值之差除以实际时间差,且这个口径不像getRecentPerformanceSamples那样单独提供numNonVoteTransactions。 getRecentPerformanceSamples直接提供样本周期、总交易数与非投票交易数,适合复算近期性能样本。getTransactionCount则适合观察长时间累计计数器的增量,但它没有单独拆出numNonVoteTransactions。两者不应在未注明口径时用来证明同一个“用户TPS”。

目标更合适的RPC必须注明
长周期累计增量getTransactionCount端点、commitment、时间差
近期样本总TPSgetRecentPerformanceSamplessamplePeriodSecs
近期非投票TPSgetRecentPerformanceSamplesnumNonVoteTransactions
峰值或百分位自建高频采样采样频率和缺失值

值下降时不要继续算出负TPS

累计计数器若突然变小,应将样本组标为不可比,排查是否切换到了不同集群、不同commitment、不同账本视图或客户端在升级后改变口径。不要用绝对值、强制归零或删除该点来维持图表平滑,否则后续无法证明统计是否经过人为修饰。

长期库可以保留原始累计值、计算后增量和方法版本三层字段。方法变化时建新时间序列,不回写旧数据。本文是数据口径说明,不将网络交易增量解读为代币价格或投资机会。

仪表盘上应同时显示什么

显示当前累计值、区间增量、实际经过秒数、commitment、RPC端点和是否含投票交易。没有这些注释的“实时TPS”只是不可复现的显示数字。

本文的三个可复核核心是:

  1. getTransactionCount返回一个u64,表示截至指定commitment状态所处理的交易累计数。
  2. 该RPC接受commitment与minContextSlot配置,不同节点和状态视图可在同一时刻返回不同累计值。
  3. 估算区间吞吐需要使用两个时点累计值之差除以实际时间差,且这个口径不像getRecentPerformanceSamples那样单独提供numNonVoteTransactions。

目前仍需保留的边界:累计计数的口径会随客户端实现与升级变化,长期时序应记录节点版本。

可结合Solana性能样本估算TPS公链日活与TPSgetEpochInfo纪元进度继续查看相邻知识。本文为信息与技术教育内容,不构成投资、交易或法律建议;涉及资产或系统变更时,请先在隔离环境验证并自行承担风险。