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、时间差 |
| 近期样本总TPS | getRecentPerformanceSamples | samplePeriodSecs |
| 近期非投票TPS | getRecentPerformanceSamples | numNonVoteTransactions |
| 峰值或百分位 | 自建高频采样 | 采样频率和缺失值 |
值下降时不要继续算出负TPS
累计计数器若突然变小,应将样本组标为不可比,排查是否切换到了不同集群、不同commitment、不同账本视图或客户端在升级后改变口径。不要用绝对值、强制归零或删除该点来维持图表平滑,否则后续无法证明统计是否经过人为修饰。
长期库可以保留原始累计值、计算后增量和方法版本三层字段。方法变化时建新时间序列,不回写旧数据。本文是数据口径说明,不将网络交易增量解读为代币价格或投资机会。
仪表盘上应同时显示什么
显示当前累计值、区间增量、实际经过秒数、commitment、RPC端点和是否含投票交易。没有这些注释的“实时TPS”只是不可复现的显示数字。
本文的三个可复核核心是:
- getTransactionCount返回一个u64,表示截至指定commitment状态所处理的交易累计数。
- 该RPC接受commitment与minContextSlot配置,不同节点和状态视图可在同一时刻返回不同累计值。
- 估算区间吞吐需要使用两个时点累计值之差除以实际时间差,且这个口径不像getRecentPerformanceSamples那样单独提供numNonVoteTransactions。
目前仍需保留的边界:累计计数的口径会随客户端实现与升级变化,长期时序应记录节点版本。
可结合Solana性能样本估算TPS、公链日活与TPS、getEpochInfo纪元进度继续查看相邻知识。本文为信息与技术教育内容,不构成投资、交易或法律建议;涉及资产或系统变更时,请先在隔离环境验证并自行承担风险。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。