术语表 /闪电网络与 Layer 2
支付通道
又称微支付通道、闪电网络通道、Payment channel、Lightning channel。
- 支付通道是什么?
- 支付通道是一种由一笔链上交易注资的双方比特币合约,双方可在其中数千次重写这笔资金的分配比例,而无需触及区块链。
可以把它想象成酒吧里的一张账单,两位饮酒者每喝完一轮都要签字确认。资金输出是一个2-of-2地址,因此任何一方都无法单独动用这笔资金,每一次更新都是一笔完全有效的比特币交易,任何一方都可以将其发布。如果您在通道中持有比特币,您依靠的是软件来发现不当行为,而不是依靠某家公司守规矩。
运作方式
支付通道用两段比特币脚本取代信任:一个共享输出和一项惩罚机制。
开设通道需要一笔链上交易,将资金支付到一个要求双方签名的地址。在这笔交易广播之前,双方先交换已签名的承诺交易,这些交易按约定的比例将资金花费并返还给双方。在通道内付款,就是签署一对新的承诺交易(采用新的分配比例),然后交出用于撤销旧承诺的秘密。
撤销机制使其安全。双方各持有一笔略有不同的承诺交易,您所持版本会把您自己的余额支付到一个脚本中,您只能在延迟之后才能领取,延迟通常为144个区块,约一天。对方所持的那份副本在其一侧有同样的延迟。如果任何一方广播了较旧、对自己更有利的状态,另一方可以在该延迟期内发现,并使用撤销秘密将整个通道余额作为罚金全部取走。作弊并未被阻止,而是变得无利可图。
在相对时间锁出现之前,这一切都无法实现。CHECKSEQUENCEVERIFY 以及 BIP68、BIP112 和 BIP113 中定义的基于序列号的锁定,自2016年的区块419,328起已经生效,正是它们让脚本能够表达“可以花费,但须在这笔交易确认后144个区块”。
规范中的若干小数值,纯粹是为了让惩罚机制保持可执行。每一方通常都会保留一笔永远无法花费的储备金,建议为通道总额的1%,这样作弊者总会有所损失。低于粉尘阈值的输出(通道所用的 pay-to-witness-script-hash 输出为330聪)会被舍弃并计入手续费,而不会写入承诺交易。现代通道还带有两个330聪的锚点输出,其作用是在需要关闭通道时若链上繁忙,任何一方都可以附加一笔提高手续费的子交易。此外,承诺编号本身是隐藏的:其中48位被混淆并分散在锁定时间和序列号字段中,因此观察者看到单方面关闭时,无法数出该通道承载了多少笔付款。
购买比特币时为何重要
通道正是闪电网络余额与冷存储余额不能互换的原因,尽管两者都是比特币。
通道中的资金需要一把在线的密钥和一个持续监视的节点。对于用于消费的钱包,这没有问题。但对于打算持有多年的那部分比特币,这是不合适的存放之处,因为这种安全模型需要您持续付出精力,而不是只做一次。本站的硬件钱包评测讨论的是相反的取舍:密钥从不接触网络,也无需对任何事件作出反应。
对购买者而言,由此产生两个实际后果。第一,开设和关闭通道都是链上交易,因此替您开设通道的钱包是在代您支付真实的手续费,有时并不会提示。在向手机闪电网络钱包入金30美元之前,请先查清它为首个通道收取多少费用,以免发现三分之一都花在了初始设置上。第二,如果一款闪电网络应用从不提及通道、密钥或备份,那么几乎可以肯定通道是由它自己持有的。这是披着闪电网络外衣的托管型账户,风险类别与把币留在交易所相同。
最后一点平淡但代价高昂:通道状态无法从助记词中恢复。十二个单词的备份可以完整恢复链上钱包,却无法恢复当前有效的是哪一笔承诺交易。非托管型闪电网络钱包会单独备份通道状态,即便您仍持有助记词,丢失该备份也可能让您失去通道余额。
一次通道关闭的剖析
看一个通道如何结束,这些组成部分就不再抽象。
两方开设了一个1,000,000聪的通道,资金完全由其中一方提供。经过一个月的付款,分配比例为400,000和600,000。合作关闭是顺利的情形:双方共同签署一笔关闭交易,将资金直接支付给各自,它像任何普通花费一样确认,两个输出都没有延迟。
单方面关闭是备选方案。一方消失后,另一方广播其最新的承诺交易。其自身余额进入一个脚本,在约定的延迟期内无法动用;消失一方的余额则可由其本人立即花费;锚点输出留在那里,以备需要提高手续费。如果消失的一方之后广播一笔过期的承诺交易,显示自己拥有900,000聪,诚实的一方可以在延迟窗口内发布撤销交易,取走全部1,000,000聪。
支付通道 vs 状态链
支付通道在链上维持一份有效的双方合约;状态链则转移花费某个固定输出的权利。在通道中,余额可以是任意数额,并随每次付款而变化,执行可由单方完成。在状态链中,一整个固定大小的 UTXO 借助一台服务器从一位所有者转移给下一位,该服务器被要求删除其旧的密钥份额,因此该模型依赖于服务器确实将其删除。通道需要一笔链上交易来开设,并为您提供可花费的余额;状态链需要您接受一项信任假设,并为您提供一整枚币。