歇业告示与重新开张:闪电 channel_update 的 disable 位怎么关停与恢复一条通道 图 1
歇业告示与重新开张:闪电 channel_update 的 disable 位怎么关停与恢复一条通道 · 图 1

一、歇业告示挂在 update 上

闪电节点想临时谢绝路由生意,不需要关通道,也不需要下链。BOLT 7 给 channel_update 的 channel_flags 分配了两位:最低位是 direction,标识这条更新说的是哪个方向;第二位就是 disable。节点把 disable 置 1 发一条 update,等于在图谱上给自己这半边挂出歇业牌;路由软件算路时把带牌的半边从候选里摘掉,付款绕道而行。

这是一次只改意图、不动资金的公告。通道的资金交易原封不动躺在链上,双方的承诺状态照常有效,变化只发生在”别人还愿不愿意借道”这一层。

歇业告示与重新开张:闪电 channel_update 的 disable 位怎么关停与恢复一条通道 图 2
歇业告示与重新开张:闪电 channel_update 的 disable 位怎么关停与恢复一条通道 · 图 2

二、方向各挂各的牌

disable 挂在单方向上:一条公开通道有两个方向,两边的 update 各自独立带旗标。一侧网络不稳,只关自己这半边——入向流量照收,出向路由谢绝。这也是为什么排障时常看到一条通道在图谱上”半瘫”:一个方向在候选集里,另一个方向消失,付款在某个方向通、反方向不通,报错指向余额不足或路由失败,根源却是歇业牌只挂了一半。

三、时间戳说了算

update 之间的胜负由时间戳裁决:新消息的时间戳必须大于此前为同一通道发过的每一条 channel_update,规范还建议以 UNIX 时间作基准。乱序的重放、时钟回跳的陈旧 update 会被节点拒收,图谱对每台来源节点按最新时间戳记账。运维时如果发现歇业牌摘不掉,先看系统时钟是不是跳了——时间戳退步的新 update 会被点名忽略,歇业状态就僵在那里。

四、歇业与关闭的分界

disable 位管的是歇业,不是关门。资金交易被花掉——无论协商关闭还是单方面落地——通道才算真正退场:BOLT 7 要求节点对出资已被花掉的通道忽略常规 update,唯独带 disable 位的例外,且只应转发带 disable 位的。逻辑很直白:钱都不在通道里了,参数的更新已无意义,但那条歇业牌仍然值得传播,好让图谱尽快忘掉这条边的路由资格,别把付款往一条已下链的边上送。

五、自动歇业的日常

实现会把 connect 失败、对端失联的通道自动置上 disable 位;对端回来、channel_reestablish 走完,再发一条 disable 位置 0 的 update 恢复营业。规范也承认这条链路会带来成串看似冗余的 update——图谱消息本就批量合并、后件顶前件,一次恢复可能对外只显一条。运营节奏快的节点,图谱里一条通道的形状其实是”营业—歇业—营业”的时间序列,付款方的算路结果随时间抖动属正常现象。

六、新参数的缓冲期

改参数的 update 传播到全网需要时间,付款方可能仍拿着旧参数来敲门。规范建议新 update 生效后至少十分钟内继续接受旧参数——费率与时间锁调整的窗口期里,严格按新参数拒付的实现会在过渡期误伤正常付款。这条建议把”告示挂出”与”告示生效”的时差摊开在明处:网络的共识收敛需要时间,运营者的参数变更也应留出缓冲。

七、排障清单

付款绕开了一条余额充足的通道,先查两侧 update 的 disable 位与时间戳新旧;一条边忽通忽不通,查自动歇业逻辑与对端在线率的联动;怀疑 update 被忽略,核对时间戳是否大于该方向上一条、签名验的是 channel_announcement 里对应方向的 node_id;资金交易已上链的通道仍在图谱里收 update,确认那条 update 是不是只带 disable 位的遗忘牌。告示机制本身没有秘密,全部账目都摊在 gossip 的公开流里。

风险提示:本文仅为技术机制科普,不构成任何投资建议。