术语表 /闪电网络与 Layer 2
惩罚交易
- 惩罚交易是什么?
- 惩罚交易是一种链上清扫交易:当对手方发布已被撤销的承诺交易时,它使用您已持有的撤销密钥签名,取走闪电网络通道的全部输出。
闪电网络通道由其两个参与方相互监督,惩罚交易就是执行手段。BOLT 5为该清扫交易的主余额输出规定了160字节的见证数据,并规定:如果在作弊方的时间锁到期前18个区块仍未确认,则按输出拆分。如果您在通道中持有比特币,这笔交易就是您与那个回滚您余额的对手方之间的屏障。
运作方式
惩罚交易花费的是这样一些输出:其所有者已经把拿走它们的权利交到了您手中。
通道余额每变动一次,双方各自交出所取代的那个状态背后的秘密。掌握该秘密,您就可以推导出对手方旧承诺交易的撤销私钥,也就是解锁对方那一侧的密钥。BOLT 5用一句话写明了后果:一旦节点发现某笔承诺交易,且持有其撤销私钥,则资金交易输出即告解决。没有任何需要协商的余地。
您能清扫什么,取决于过期的承诺交易包含什么。规范要求您用撤销密钥处理作弊方的主输出;对其提供的每笔支付,以三种方式之一处理(用撤销密钥花费该承诺交易;若知道支付原像,则用支付原像花费;或在对方发布其 HTLC-timeout 交易后花费该交易);并同样用撤销密钥处理其 HTLC-success 和 HTLC-timeout 交易。规范还要求您在此过程中从输入见证中提取原像,因为您原本即将损失的一笔支付,可能仍可向上一跳节点索取。
三种见证形态涵盖了以上全部情形,BOLT 5给出了每种的大小:主余额输出为160字节,已提供的支付为243字节,已接受的支付为249字节。再加上输入本身的164权重,每个被认领的输出的成本分别为324、407或413。交易的其余部分为53字节的非见证数据,外加2字节的见证头。您还可以并入同一承诺交易中属于您自己的主输出,这会增加272,主要作用是降低您支付的手续费。
惩罚交易有两点并非如此。它不是自动发生的:比特币不会惩罚任何人,只有当您运行或雇用的软件发现过期交易已确认,并在作弊方的时间锁到期前作出反应,清扫才会发生。它也不是免费的。清扫交易和其他交易一样按当前费率付费,因此,如果通道内的资金少于清空它的成本,那么无论规则允许什么,这个通道都不值得防守。
购买比特币时为何重要
惩罚交易只能在您自己持有承诺交易的钱包中保护您,这就排除了大多数简易的闪电网络应用。
本站的41篇钱包评测恰好沿这条界线分开。Phoenix 在手机上运行真正的自托管闪电网络节点,因此惩罚机制归您所有,监视的责任也归您:按 ACINQ 的恢复路径,您需要强制关闭通道并等待约720个区块(约五天),通道资金才会在链上归您所有。BlueWallet 仅支持比特币,链上功能相当强大,但其闪电网络部分是 LNDHub 服务器上的一个账户,除非该服务器由您自己运营,否则运营方可以动用这些比特币,因此您并不存在可用来惩罚任何人的承诺交易。Wallet of Satoshi 在默认模式下同样是托管型,这也是它在本站评分仅为2.7、未进入推荐之列的原因之一。
请把这看作一种取舍,而不是定论。托管型闪电网络把作弊的对手方从您的威胁清单中删去,换成一家可以冻结或撤回服务的公司。自托管闪电网络则把惩罚交易和保持清醒的义务交给您。两种情形下都容易出现的错误,是重复使用旧的助记词备份:十二个词能恢复链上资金,却不知道哪个通道状态才是最新的,因此您发布的承诺交易是过期的,随后的惩罚交易针对的就是您。
Phoenix 通道上的一次已撤销关闭
设想一条 Phoenix 通道,当另一端的节点发布上周的承诺交易时,还有三笔支付在途。
您的软件发现该交易 ID,推导出撤销密钥,并构建一笔清扫交易。其权重为:作弊方主输出324,三个已接受支付输出各413,并入您自己的主输出272,交易主体53字节的四倍,以及2字节的头部:共2,049权重单位,约合512虚拟字节。对方的资金位于双方在通道开立时约定的相对时间锁之后,这类延迟以天计,而不是以分钟计:在 Phoenix 中从强制关闭中恢复约需720个区块,约五天。而您的资金在矿工打包您的交易的那一刻即可花费。
BOLT 5还算出了上限。在最大标准权重400,000、最大输入为413的条件下,单笔惩罚交易最多可容纳966个支付输出,是对等协议已允许的每方483笔待处理支付的两倍,因此即使是完全塞满的通道,也可以一次清空。
接下来是不这样做的理由。在通道使用锚点输出的情况下,作弊方自己的支付交易以 SIGHASH_SINGLE 和 SIGHASH_ANYONECANPAY 签名,因此对方可以附加自己的输入,把您合并后的清扫交易钉在内存池中,拖到其主输出的时间锁到期。如果在该输出距到期不足安全延迟时仍未确认(BOLT 5将这一窗口留给节点策略,同时推荐18个区块),则要求您拆分任务:每个被撤销的输出各一笔惩罚交易,并不断提高手续费直至各自确认。在零手续费承诺下,每一笔还必须控制在版本3交易的10,000虚拟字节限制以内,否则可能永远到不了矿工手中。
惩罚交易 vs 强制关闭
强制关闭是单方面退出通道的任何方式,而惩罚交易是对不诚实的强制关闭的回应。
大多数强制关闭都平淡无奇:对手方离线,某笔支付的期限临近,某人的节点发布了当前状态,延迟期过后,双方各自拿回应得的余额。只有在所发布的承诺交易此前已被撤销的特定情形下,才会出现惩罚交易,而且它拿走的是整个通道,而不是一部分。每一笔惩罚交易都发生在强制关闭之后,而几乎没有哪次强制关闭会引出惩罚交易。
惩罚交易 vs 瞭望塔
惩罚交易是一笔已签名的比特币交易,而瞭望塔是一台等候着代您广播这类交易的机器。
瞭望塔保存的是已撤销交易 ID 的一个短前缀,以及一个在该交易出现在区块中之前无法解密的数据块。其中的清扫交易由您自己的节点构建并签名,支付到在出问题之前选定的地址,因此聘用瞭望塔不会让您交出任何密钥。把两者混为一谈,会引出错误的担忧。不运行瞭望塔并不会削弱惩罚交易本身;这只意味着在您的笔记本电脑关机期间,没有人醒着把它发出去。