getmccfg 与 setmccfg:全量覆盖的旋钮,改前先抄当前值 图 1
getmccfg 与 setmccfg:全量覆盖的旋钮,改前先抄当前值 · 图 1

AUG56 bitcoin body 257: setmccfg 与 getmccfg

Mission Control 的评分机制讲清楚了概率从哪来,但很多人不知道这些参数的旋钮露在外面:LND 提供 lncli getmccfg 与 lncli setmccfg 一条读、一条写,可以直接查询和改写路由器的概率估计器配置。旋钮好用,前提是知道它是内存旋钮,也知道每个参数往哪边拧会发生什么。

读端与写端不对称

getmccfg 无参数,返回路由器当前生效的完整配置。setmccfg 的写法讲究得多:协议层注释写明这是一个全量覆盖——设置时整份配置会被完整应用,也就是说你没写明的字段不会自动保留现值,CLI 会把这次给出的整套参数落上去。所以正确习惯是先 getmccfg 抄下当前值,改一个字段,其余字段照原样带上,再 setmccfg。不抄作业直接改单项,等于用 CLI 默认值给其他字段做主。

估计器是总开关

配置里的估计器字段二选一:apriori 或 bimodal。选择哪个,决定了下面两组参数里哪一组生效:--estimator 旗标必须给出,估计器相关参数才会被应用。公共参数有两个:--pmtnr 设置保留的付款结果条数上限,--failrelax 设置同一失败对重复记录的最小间隔时长。估计器参数这边,Apriori 组有 --apriorihalflife(惩罚衰减回百分之五十所需时间)、--apriorihopprob(无信息跳的假定成功概率)、--aprioriweight(历史结果的权重)、--aprioricapacityfraction(按通道容量比例折算失败归属的比例);Bimodal 组有 --bimodaldecaytime(结果淡出时间)、--bimodalscale(假定的通道流动性分布尺度)、--bimodalweight(历史权重),协议注释还标注了双峰估计器带实验性质。

往哪边拧,路由器怎么变

把衰减时间调短、或者把历史权重调高,故障对端会被记仇更久,路径更保守,代价是绕远路和更高的总路由费;反过来调,探索更积极,付款撞墙的返工次数上升。调低 --apriorihopprob,从没打过交道的节点更容易被路径搜索直接放弃——对私有通道多的收款方,这会放大“明明有路就是找不到”的现象。这些参数没有普适好值,动它之前先想清楚你要的是成功率、路径成本还是探索性,三个目标两两打架。

改动会不会活过重启

写入的配置改变进程内的评分行为,历史结果本身另有存储。判断标准很简单:改完重启节点,用 getmccfg 复读一遍,看到的还是不是你要的值,比任何二手结论都可靠。同一逻辑适用于 resetmc:那条命令清空的是历史样本,不是这份配置——把“重置记忆”和“改规则”混为一谈,是这组命令最常见的误用。调完配置后如果路由行为完全没变,大概率是改完没生效或者全量覆盖把你没注意的字段改回了默认,先复读再怀疑玄学。

一次保守调参的完整动作

以收紧故障惩罚为例:getmccfg 输出重定向存成文件;在文件基础上把衰减时间从当前值调短、其余原样;对照 CLI 帮助逐项确认这次给出的旗标覆盖了想改的字段与必须保持的字段;执行后用 getmccfg 复读,逐字段 diff 新值与预期;接下来二十四小时盯三组指标——付款失败率、平均路由费、querymc 里的节点对分数分布。任何一组恶化,拿存好的旧配置文件回放一遍 setmccfg 即可回退,这一步的从容完全来自第一步存了档。没有存档的调参是单程票:旧值只能靠记忆或聊天记录重建,恰好是最不可靠的两个来源。

还有一个隐蔽边界:估计器选择在旧版本里经历过迁移,读到的配置里可能同时存在已标记弃用的顶层参数与新一代的分组参数,两套值看着重复、实际以后者为准。复读 getmccfg 时若发现同一语义的字段出现新旧两份,别各自取数,以分组结构里的值做基准回写,避免用旧字段把新字段盖出一个自己都没察觉的漂移。

风险提示:路由配置直接影响付款成功率与路由费用,激进参数可能推高失败率或成本;本文为机制说明,不构成投资建议。