这台节点认得了多少条地址:bitcoin-cli -addrinfo 的统计口径 图 1
这台节点认得了多少条地址:bitcoin-cli -addrinfo 的统计口径 · 图 1

bitcoin-cli -addrinfo 是一条 CLI 侧的聚合开关,它不属于服务端 RPC 方法表,而是命令行工具里预先编排好的一段”替你去问好几个 RPC、再把结果拼起来”的逻辑。它回答的问题很具体:这台节点目前按不同网络(IPv4、IPv6、onion 等)各自认得了多少条地址。定义在 src/bitcoin-cli.cpp 的参数表里。

帮助文本怎么界定它

参数注册时写的说明是:获取节点所知道的地址数量,按每个网络分别给出,并给出总数,这些数字是在经过质量和新鲜度过滤之后统计的;同一处还提醒——节点实际”见过”的地址总数可能比这里报出的更高。这一句界定很重要:-addrinfo 报的不是地址库里所有见过的原始条目,而是过滤掉低质量、过期候选之后,节点真正愿意拿来建连的那部分视图。

这台节点认得了多少条地址:bitcoin-cli -addrinfo 的统计口径 图 2
这台节点认得了多少条地址:bitcoin-cli -addrinfo 的统计口径 · 图 2

和 getaddrmaninfo 的关系

要把这事讲清楚,得知道它底层靠的是服务端那条查看地址管理器分布的 RPC。地址管理器内部把候选地址分成”新”和”已试”两张表,按可路由性分组统计。-addrinfo 相当于把这台节点的地址管理器现状,按网络维度压缩成一个计数字典,省得你自己去数桶位。区别在于 -addrinfo 更偏”总量视角”,给的是每个网络有多少条能用;而逐桶、逐表的明细要靠地址管理器查看命令或原始读取命令。

什么时候这条统计有用

对普通用户,它是判断”我的节点有没有健康地攒到足够多的候选邻居”的快速体检项。刚启动的新节点,各网络计数很低,说明还在靠种子拉地址;跑一段时间后,IPv4 应当是主力,而 onion、i2p 这类网络的计数会随你是否配置了相应传输而不同——如果你只用 IPv4,onion 计数长期为零是正常的,不代表故障。反过来,如果你以为自己通过 Tor 认到了地址,却发现 onion 计数为零,那多半是代理或传输配置没生效,值得回去查代理设置和是否允许对应网络建连。

读数时的两个前提

第一,数字带质量与新鲜度过滤,所以它天然会波动:节点会淘汰过时或反复失败的地址,也会不断从邻居那儿补新的,计数是动态的当前值,不是累计值。第二,CLI 侧聚合本质是分别发多个请求再拼装,和所有 CLI 聚合项一样,它不是单一原子快照,多个字段之间可能存在极短的时间差;作为”大致有多少候选地址”的粗读没问题,但如果要做严格的逐字段一致性审计,应该改用服务端那条一次返回完整分布的命令,而不是靠命令行拼装。

底层其实只发一条请求

读实现还能消除一个常见误解:这个开关并不像 -getinfo 那样聚合多路子请求,它向服务端只发一条全量的节点地址查询,取回条目列表后在命令行本地按每条记录的网络字段逐一分桶计数,最后附上 total 字段。它还内置兼容检查——若返回条目里缺少网络字段,会直接报错提示需要 v22.0 及以上的服务端;并且它不接受任何附加实参,多传参数立刻报”该开关不带参数”。这层实现决定了读数的第二重含义:计数来自可导出的地址条目,而非地址管理器桶位的内部视角,new 与 tried 两表、按可路由性分组的精细结构在这里看不到,需要那些细节时应改用地址管理器查看类命令。对正常公网节点,IPv4 计数应当占大头并随运行时间稳步爬升;onion 与 i2p 计数是否非零,完全取决于是否配置了对应传输。排查”连不上网”类问题时,这个分布比总数更有诊断价值:总数不为零却只剩单一网络,通常指向网络配置或防火墙,而不是节点故障。本文是节点运维视角的工具说明,不构成任何投资建议。