一条让你“差一点”的规则
很多用户第一次用闪电通道都会撞上怪现象:通道明明有余额,付款却报余额不足,而且差额不大。常见原因是通道协议要求每一侧在通道内始终保留一小笔不可动用的资金,即 channel reserve(通道储备)。
BOLT 2 给出的建议值是通道总额的百分之一。它存在的理由不是风控玄学,而是欺诈惩罚机制的对称性:如果一侧能在对方作恶时把整条通道余额全部扫走而自己通道内没有任何损失敞口,惩罚机制就失去了威慑。储备金保证双方“始终有东西可输”,作恶才不会零成本。撤销旧状态与惩罚交易的完整链条见 闪电通道强制关闭全流程。

v1 与 v2 的算法差异
v1 通道里,储备的具体数值由接收方在 accept_channel 消息中报出(channel_reserve_satoshis 字段),开立方接受即生效。v2(双出资)通道则改了算法:储备固定为通道总资金(双方出资之和)的百分之一、向下取整到整数聪,再与尘埃上限取两者中较大者。这个“取较大值”的细节意味着容量极小的通道里,尘埃规则反而成为主导约束。
尘埃上限怎么参与
尘埃(dust)指输出金额低到“花它时增加的链上成本不划算”的程度。通道参数里有 dust limit,任何一侧余额低于尘埃线时,把余额转移到链上的那类输出会被视为尘埃而禁止,因为那会在主链账本上留下没人愿意回收的垃圾输出。在途的 HTLC 也占地方:每一笔未结算的转账都会占用通道余额,且其金额若低于对端声明的最低 HTLC 值(htlc_minimum_msat),会被直接拒绝。于是排查“付不出去”的顺序是:先看对端预留、再看尘埃线与小额输出策略、最后看是否有 HTLC 卡住额度(HTLC 机制见 闪电网络 HTLC)。
与流动性问题的区别
要区分两类“没钱”:一侧余额被用尽属于流动性问题,靠反向收款、换通道或链上互换解决,见 闪电通道流动性管理;而储备金与尘埃是协议层的硬约束,任何流动性手段都绕不开。做自动化脚本的读者建议把这两个参数当作通道的“底盘余量”直接扣掉再计算可付额度,避免在边界值上反复失败重试,重试风暴还可能触发对端的速率限制。
风险提示:比特币价格与网络状态波动较大,本文仅作技术与安全科普,不构成任何投资建议;涉及资金操作前请小额试转并逐项核对,所有协议参数以官方规范与源码为准。
为什么是百分之一
百分之一不是安全证明,而是工程折中:储备太小,惩罚力度弱;储备太大,通道资金利用率低,尤其是小额高频的移动端通道。协议把具体数值交给对端申报(v1)或按公式取整(v2),再用尘埃下限兜底,正好体现了”够用就好”的取向。实践中还有一条容易被忽略的联动:如果你的实现允许你选择开通道的对端,储备参数是随通道报价一起谈好的,事后单方面改不了;想降低不可用额度,只能在开新通道时挑一个报价更合适的对端,或者用更小额多次开通道的方式摊薄。对开发者,建议在通道报价与本地可付额度计算里显式建模这两个参数,写单元测试覆盖”余额恰好等于储备加尘埃”的边界组合。最后强调一句:储备与尘埃是协议参数,不是某个钱包的 bug 或某家实现的私货,换客户端、换节点软件都不会让它们消失,规划通道容量时应把它们视为永久性扣减。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。