术语表 /闪电网络与 Layer 2
通道公告
- 通道公告是什么?
- 通道公告是一种带签名的 gossip 消息,用于告知闪电网络某条公开通道的存在,并以四个签名证明对资金输出的所有权。
每条公开的闪电网络通道都通过这类消息进入路由图,且每条通道只能存在一条有效公告。在资金交易获得六个确认之前,不能发送公告;对等节点会在该输出被花费72个区块后忘记该通道。公开公告会损失隐私,因为该消息会公布为您的通道提供资金的链上输出,并将其与您的节点密钥关联起来。
运作方式
通道公告的伪造成本很高,这正是该设计的全部意义所在。
gossip 的发送不需要成本,否则节点可以用虚构的通道淹没整个网络。BOLT 7通过让每项声明都能与区块链核对来防止这种情况。该消息的类型为256,其中的 short_channel_id 指向某个特定输出:区块高度占三个字节,交易索引占三个字节,输出索引占两个字节。接收节点会查找该输出,除非它是一个未花费的、支付给所列两个比特币密钥的 P2WSH 输出,否则丢弃该公告。
四个签名位于消息开头。其中两个来自节点身份密钥,另外两个来自控制链上输出的资金密钥,即 bitcoin_key_1 和 bitcoin_key_2。四个签名对同一个哈希签名,即从字节偏移量256到消息末尾计算出的双重 SHA256 哈希。将节点密钥与比特币密钥配对,可以证明公布该通道的两个节点正是为其提供资金的双方,而不是指向他人输出的陌生人。node_id_1 还必须是两个压缩密钥中按字典序较小的一个,接收节点必须忽略顺序错误的任何公告。
是否公开公告由开通道时设置的 announce_channel 位决定,属于自愿选择。若选择公开,则在资金交易达到足够深度后,双方交换 announcement_signatures(类型259),随后任何一方都可以广播结果。拼接(splice)会为新交易生成新的公告,因此节点在资金输出被花费后会等待72个区块再忘记该通道:该花费可能只是调整通道大小,而不是关闭通道。
在哪里会遇到它
闪电网络浏览器绘制网络图时读取的就是通道公告。
每条通道旁边显示的标识符直接取自该消息。写作 539268x845x1 的 short_channel_id,表示区块539268中索引为845的交易的第1个输出,因此任何人都可以在链上核对该输出。公告中没有任何类似挂牌信息的内容:没有手续费,没有容量,也没有运营者名称。至少一方发送带有其手续费和到期增量的 channel_update 之前,通道无法使用,节点名称则通过 node_announcement 另行传递。
这种分离解释了为什么通道仍然存在却会从浏览器中消失。如果任一方向上最新的 channel_update 已超过两周(1209600秒),节点可以将该通道从其视图中清除。公告本身不会自动刷新,因此只有运营者持续重新签署其条款,通道才会留在图上。
在钱包一侧,您遇到通道公告时多半是它缺席的情形。只有当您希望陌生人通过该通道路由支付时,通道才需要公开公告,而手机钱包的用途是支付和收款,并非充当路由节点。因此,本站 Phoenix 和 Muun 评测中关注的实际问题是已公布的手续费表和备份文件,而不是在公开图中的位置。
通道公告 vs 通道容量
通道公告证明通道存在,而通道容量是其中的聪数量,该消息不载明任何金额。其字段包括四个签名、一个功能向量、一个链哈希、短通道 ID 和四个公钥。引用容量数字的人,是把公告与链上数据结合起来,读取了标识符所指向输出的价值。因此,未公开的通道有容量,却没有公开的数字:没有任何信息告诉网络应读取哪个输出。