术语表 /闪电网络与 Layer 2
锚点输出
- 锚点输出是什么?
- 锚点输出是附加在闪电网络承诺交易上的两个330聪的应急出口,通道双方各自掌握一个密钥,使任何一方都能为预先签署的关闭交易提高手续费。
锚点通道为通道双方各提供一个微小的输出,起初只有各自本人能够花费,纯粹用作日后提高手续费的抓手。BOLT 3将金额固定为330聪,经过16个区块后,任何人都可以回收无人认领的锚点。如果您运行闪电网络钱包,请保留一笔备用的链上资金,因为锚点本身无法支付手续费。
运作方式
锚点输出将330聪锁定在通道一方的资金密钥之后,而一笔承诺交易带有两个锚点、而不是一个共享的抓手,原因在于一种攻击。
其脚本很短:资金公钥、OP_CHECKSIG、OP_IFDUP,随后是一个包含 OP_16和 OP_CHECKSEQUENCEVERIFY 的 OP_NOTIF 分支。您自己的签名可以立即将其解锁。承诺交易确认后经过十六个区块,任何人都可以用空见证将其解锁,BOLT 3借此避免被遗弃的找零永久留在有效币集合中。只有当手续费降得足够低、使回收330聪变得值得时,这条路径才有意义。
每方一个锚点是防止交易钉死(pinning)的设计。如果双方只有一个共享的抓手,对手方就可以在其上挂一笔体积很大、手续费很低的子交易,使未确认交易族不断膨胀,直到您自己提高手续费的成本高得无法承受,承诺交易也错过了广播时要赶上的期限。BOLT 3将使分离锚点防御得以生效的功劳归于 Bitcoin Core 0.19中的一项变更,并将每个锚点锁定在一个资金密钥上。这也是此类承诺交易上其他每个输出(包括 to_remote)都带有序列锁的原因。
这一切并非没有代价。两个锚点的金额都从出资方的余额中扣除,合计660聪,而承诺交易计费所依据的基础权重由724个权重单位增至1124个权重单位。出资方换来的是完全不带手续费的第二阶段 HTLC 交易:在 option_anchors 下,其手续费必须为零,并且以 SIGHASH_SINGLE 加 SIGHASH_ANYONECANPAY 签署,因此您在广播时附上自己的输入,并在那时按当时的费率支付手续费。BOLT 9将其列在第22位和第23位,作为一种带有零手续费 HTLC 交易的锚点承诺类型。
在哪里会遇到它
闪电网络通道在未经合作而关闭的那一刻,锚点输出就会出现在区块浏览器上,表现为两个各值330聪的输出,看上去像是有人出了差错。只有在没有任何 HTLC 在途、且一方余额低于粉尘限额时,BOLT 3才会省去其中一个。
本站的41篇钱包评测中,哪一款会让您遇到锚点输出,取决于托管方式。Phoenix 在本站的评分为4.0,在手机上运行真正的自托管闪电网络节点,本站评测记录显示,强制关闭后的恢复大约需要720个区块,因此锚点需要由您自己管理。Muun 的评分为3.8,同样是自托管钱包,但其闪电网络支付可能需要在链上结算的潜水艇交换(submarine swap)。Wallet of Satoshi 的评分为2.7,默认采用托管方式。330聪的输出无法为子交易提供资金,因此提高手续费意味着将锚点与您原有的一笔资金一同花费。
锚点输出 vs 临时锚点
锚点输出在最初的16个区块内只能由一个指定的资金密钥花费,而临时锚点从第一秒起就没有密钥,其中也没有值得保护的价值。
BOLT 3中较新的 zero_fee_commitments 通道使用功能位40和41,以基于标准 pay to anchor 脚本构建的单个 shared_anchor 取代这一对锚点:OP_1后接两个字节0x4e73,任何人都可以用空见证花费。其金额为240聪,即该脚本的标准粉尘限额,只有当剩余金额低于该数值时才会更低,临时粉尘规则允许这样做,因为此时承诺交易不支付手续费。两者从相反的方向应对同一种威胁:带密钥的锚点为双方各提供一个他人无法操作的杠杆,以此挫败交易钉死;无密钥的锚点则使承诺交易在有人附上手续费之前无法被挖出。