lncli getnodemetrics:介数中心性怎么给你的闪电节点在地图里定位 图 1
lncli getnodemetrics:介数中心性怎么给你的闪电节点在地图里定位 · 图 1

一、getnodemetrics 想回答的问题

闪电网络是一张加权有向图,“这个节点重要吗”却没有现成答案。LND 把答案之一挂进了主服务:GetNodeMetrics,lncli getnodemetrics 是同名入口。接口注释把范围说得很窄:目前唯一支持的度量就是节点的介数中心性(betweenness centrality)。本文按 LND v0.19.0-beta 的接口定义核对它的数据来源、字段含义与盲区。

lncli getnodemetrics:介数中心性怎么给你的闪电节点在地图里定位 图 2
lncli getnodemetrics:介数中心性怎么给你的闪电节点在地图里定位 · 图 2

二、字段的读法

请求只有一个 types 数组,目前只接受 BETWEENNESS_CENTRALITY 这一种取值。响应是一张以节点公钥为键的映射,每个节点对应一个 FloatMetric:value 是原始值,normalized_value 是归一化后的读数。proto 注释对归一化区间写的是”闭区间零到一”,含义是:全网所有最短路径中,穿过这个节点的比例,越接近零说明越多的最短路径”绕着走”。原始值的量纲取决于图规模,跨版本、跨网络比较要用归一化列。

介数的原始定义值得用一句白话立住:对每一对节点,看它们之间的最短路径有哪些,其中有多少条经过目标节点,把这些比例全部加起来。它衡量的是”最短路径必经度”,而不是流量大小——这与直觉差别很大,也是误读的主要来源。

三、数据来源与它的两次截断

计算完全基于本节点的图谱视图,这一点和 describegraph 同源,也因此继承两道截断。第一道,闪电网络大量通道是私有边,不进公告、不进图谱;一个业务繁忙但只跟少数对手方开私有通道的大节点,介数读数可以很低。第二道,图谱同步有滞后,新开的公开通道、刚更新的报价可能还没进你的地图。所以 getnodemetrics 更像”在你看到的地图里,你的节点位于多少公开最短路径上”的问卷,而非对真实路由价值的评估。

四、能拿它做什么

对路由节点,它是免费的相对定位工具:把自己的 normalized_value 放在同区域节点里对比,能看出自己在公开地图上的”必经度”处于什么位置;开新通道前,也可以拿两个候选对手方的读数做参考——把通道开在高介数节点附近,往往意味着更多的公开路径会顺路经过你。对研究者与选型者,它给出一条无需外部服务、纯本地的图位置指标,适合脚本化批量抓取。

五、不要拿它做什么

不要把它当收入预测:路由费的实际来源是本地策略与对手方报价竞争,介数高不等于被选中多。也不要跨节点比较两个 LND 的输出:两台的图谱完整度不同,同一个节点可以给出差距明显的读数。最后,介数基于最短路径假设,而 LND 的支付路由带概率扰动、Mission Control 还会改写路径偏好,实际资金流与”最短路径”并不重合——它是图结构的快照,不是资金流水的统计。

六、脚本化的取数细节

命令本身不带参数时默认查询介数,返回是一张公钥到数值的表,公钥以十六进制字符串为键,程序里先按键排序再落盘,跨日对比才有对齐基准。想定期跟踪自己的读数,把 normalized_value 连同图谱边数一起记——边数解释了大部分波动,图谱扩了一截,所有节点的介数分布都会平移,单看自己的曲线会得出错误结论。取数失败的常见原因有两类:图谱尚未同步完成时返回的表可能明显偏小,先确认 getinfo 里图谱同步标志再取数;另一种是节点公钥不在返回表里,说明最短路径从未经过它,这本身就是读数,不是错误。导出为 CSV 做长期趋势图,是路由节点月报里最省事的一栏。

风险提示:本文仅作图数据分析说明,不构成任何运营或投资建议。