首页 > 比特币 > 正文

比特币的闪电网络——用于快速廉价交易的覆盖协议——由支付渠道组成。今天的这些支付渠道依赖于一种有点复杂的回退机制来保持每个人的诚实,并要求其用户保持一定程度的警惕。

这很快就会被简化。

什么叫比特币软分叉

一小群比特币和闪电开发人员正在开发一类新的“sighash 标志”,名称如SIGHASH_NOINPUT(“Noinput”)、SIGHASH_ANYPREVOUT(“Anyprevout”)和SIGHASH_ANYPREVOUTANYSCRIPT(“Anyprevoutanyscript”)。其中一个或几个可以将部署视为在不久的将来进行软分叉协议升级,以帮助在两个主要方面简化 Lightning 用户体验。

就是这样。

“无输入类”

任何比特币交易都包含几条信息。例如,这些包括输入(“解锁”硬币的数据)、输出(再次“锁定”硬币,指定将来需要花费它们的内容)等等。

此外,至少添加了一个加密签名。该签名对应于所花费硬币的公钥(以及比特币地址),因此它证明硬币所有者确实想花费它们。签名签署新的交易,证明业主同意以怎样的硬币都花了。

但是,此签名不需要对新交易的每个部分进行签名。使用“sighash 标志”,签名的创建者可以准确指出交易的哪些部分正在被签名。例如,虽然“SIGHASH_ALL”表示大多数交易数据已签名(只是不是签名脚本),但“SIGHASH_NONE”表示只有输入被签名——而不是输出。还有一些 sighash 标志。

现在,提出了一类新的 sighash 标志——Noinput、Anyprevout 和 Anyprevoutanyscript——我们将在本文中将其称为“Noinput 类”。此 Noinput 类表示将签署输出和一些其他交易数据,但不签署输入。通过不对输入进行签名,即使在签名后也可以进行交易,并重写它以交换不同但兼容的输入,而无需生成新签名。

当然,通常情况下,不会有任何其他兼容的输入。签名仍然对应一个特定的公钥,并且这个公钥应该与一个特定的硬币相关联。交换随机输入会破坏此链接并使交易无效。

但也有一些例外,可以交换输入。

不希望的情况

首先,一个不受欢迎的场景。

虽然不鼓励这样做,但可以在同一个比特币地址上接受多个交易,并受相同的公钥和私钥保护。如果使用同一个地址来接受两笔交易,例如每笔一个比特币,这确实会导致两个不同的输出。这两种不同的输出通常只能通过后续交易中的两种不同输入来使用。

但是,如果两个硬币中的一个使用 Noinput 签名,则该签名不会指定实际花费了两个输出中的哪一个,并且签名对应于:它们受相同的公钥和私钥保护。这意味着有人可以重写交易,即使在它被签名之后,以交换另一个输入,从而花费另一个硬币。事实上,同一笔交易可以被复制和重写以进行两次广播,使用相同的 Noinput 签名,即使发送方打算只花费一个币,也可以领取两个币!

这确实是不可取的,这就是为什么 Noinput 类不打算在常规钱包中使用的原因。

但是也有 Noinput 类的理想应用。

埃尔图

新 sighash 类的第一个也是最重要的潜在应用是闪电网络的一种替代支付渠道。

所有闪电通道实际上只是未广播的交易,它们从两个用户共享的地址中花费资金。这些用户每次在他们之间进行付款(或转发)时,都会通过从这个共享地址签署和交换新交易来“更新”渠道。频道的最新“状态”——未广播的交易——是唯一“真实”的;广播一个较旧的状态将是作弊。

这些渠道中的参与者目前通过包括“惩罚性交易”的设置保持诚实:广播旧状态允许渠道合作伙伴跟进一项声称渠道中所有资金的交易。这应该(并且通常确实)足以让参与者保持诚实。

问题是广播旧频道状态不一定是故意完成的。它也可能是由软件错误引起的。有时它可能是由于“诚实”的错误而发生的,例如软件备份出错。在这些情况下,将您所有的资金从渠道中抽走是一种非常痛苦的惩罚,有些人认为这太严重了。

Blockstream 的 c-lightning 开发人员 Christian Decker 和 Rusty Russell 以及 Lightning Labs 的 lnd 开发人员 Olaoluwa Osuntokun 提出的“ Eltoo ”提供了一种替代方案。

在 Eltoo 中,两个支付渠道用户都持有同一笔未广播交易的副本,称为“更新交易”,代表他们在渠道中的资金。这笔交易是由双方用户签署的,因此任何一方都可以随时选择广播它,并在区块链上进行确认。

如果有人广播交易并且确实在区块链上进行了确认,则资金随后可以通过两种方式使用。一,两个参与者都可以在时间锁定用完后花掉他们的份额;例如,一周后。或者,资金可以立即用于更新的相互签名的更新交易。事实上,在 Eltoo 中,更新事务是按时间顺序编号的。更新交易 3 可以花费更新交易 2 的资金,更新交易 2 可以花费更新交易 1 的资金,但反过来不行。

这实际上已经可以通过当前的比特币协议实现。但是因为更新交易的输入需要签名,所以特定的更新交易只能引用它之前的特定更新交易的特定输出。更新交易 3 可以从更新交易 2 中索取资金,但不能从更新交易 1 中索取资金。

这不太实用。例如,如果有 100 个更新交易,并且其中的第一个是意外(或有意)广播的,则只能通过广播所有后续更新交易来恢复“真实”通道余额。(更新交易1花费到更新交易2,更新交易3花费,一直到100。)这个交易链会给比特币网络带来很大的负担。这将需要很多费用,或多或少地违背了首先使用支付渠道的目的。

因此,Eltoo 只有在可以跳过更新事务时才有用。更新交易 3 不仅必须能够从更新交易 2 中支出资金,而且还必须能够直接从更新交易 1 中支出资金。

正是这种跳过需要 Noinput sighash 类。通过交换输入,最新的更新事务总是可以被重写以直接引用任何其他更新事务。并且交换输入是可能的,因为无论选择哪个先前的更新交易,在支付渠道中,所需的签名始终来自具有相同两个公钥和私钥的相同两个用户。

一个 ELTOO 的例子

所以,这就是 Eltoo 在实践中的样子。

假设 Alice 和 Bob 有一个 Eltoo Lightning 通道打开了一段时间,并且通道状态已经更新了 100 次。因此,他们都坚持更新交易 100,该交易从 Alice 和 Bob 的共享地址中花费资金。它代表通道的最新状态,并由他们双方签名。Alice 或 Bob 都可以选择在任何时间广播此更新交易,在这种情况下,他们可以在时间锁定到期后,例如一周后领取他们的资金份额。(实际上,如果他们确实关闭了支付渠道,他们更有可能选择定期的“合作”关闭,因为他们不必等待一周的时间来花掉资金——但现在不要介意。)

现在,如果 Alice 不小心广播了一个旧的通道状态,比如更新交易 13,并且这个交易在比特币区块链上得到确认,那么资金也会被时间锁定一周。在这周内,Bob 可以获取更新事务 100,通过交换输入来改写它以引用更新事务 13 并广播它。

网络上的比特币节点和矿工看到更新交易 100 并得出结论认为它是有效的。它指的是按时间顺序较早的更新事务,并且包含来自 Alice 和 Bob 的有效签名,这是更新事务 13 中输出所要求的。

一旦更新交易 100 被确认,两个更新交易都包含在比特币区块链中,所有资金在更新交易 100 中等待一周,直到两个参与者都可以认领他们的份额。(尽管 Alice 和 Bob 可以再次通过合作关闭来加快速度。)

因此,尽管 Alice 犯了错误,但根据最新的频道状态关闭了频道,将他们所拥有的归于 Alice 和 Bob,而没有任何进一步的惩罚,并且根本不需要广播更新交易 1-12 和 14-99。

闪电瞭望塔

Eltoo 支付渠道本身很有用,但它们也有利于闪电网络的另一项创新:瞭望塔。

为了避免被欺骗(有或没有 Eltoo),Lightning 用户必须跟踪比特币区块链以查看是否广播了旧频道状态。如果发生这种情况,他们有时间做出反应并纠正这种情况;一周,在上面的例子中。

目前,在没有 Eltoo 的情况下,此响应由惩罚性交易组成,该交易会从渠道中抽走所有资金,并让“诚实”的用户认领。重要的是,通道的每个先前状态都有自己独特的惩罚交易。如果支付渠道更新了 100 次,则双方都必须保留 100 笔罚款交易:总共 200 笔罚款交易。(有一些方法可以减少这些数据,但差异很小。)

有了 Eltoo,这不再是必要的。无论广播哪个旧状态,支付频道用户都可以通过简单地广播最新的频道状态来纠正其中的任何一个。两个用户只需要保留一个相同更新事务的副本,并在需要时重写它以交换输入。

尤其是瞭望塔可以从中受益匪浅。

瞭望塔是闪电网络上一种特殊类型的服务提供商,可以为其他用户监控区块链。如果他们看到作弊企图,他们可以广播创纪录的交易——大概是为了换取费用。瞭望塔的存在将使作弊几乎不可能。

然而,瞭望塔不仅监控一个频道,还可能监控数千甚至数百万个频道。所有这些通道都经常更新,每次更新都会创建两个新的惩罚交易。因此,瞭望塔必须坚持的特定惩罚交易的数量可能会迅速膨胀。

有了 Eltoo,瞭望塔只需要每个通道的最新备份交易——一种更可持续的模型,使瞭望塔部署更加可行。

部署 NOINPUT 类

目前有两个关于新的 sighash 标志类的具体建议。第一个是 Noinput,最初由 Joseph Poon 和 Thaddeus Dryja 在闪电网络白皮书中提出。现在,它已被 Blockstream 的 c-lightning 开发者 Christian Decker 起草为更具体的提案,并在比特币改进提案 (BIP) 118 中正式化。Xapo 的比特币核心贡献者 Anthony Towns 最近将 Noinput 更名为 Anyprevoutanyscript,他也提​​出了 Anyprevout。有一个BIP这组建议为好,但它没有一个BIP数呢。Anyprevoutanyscript 和 Anyprevout 主要基于 Noinput,但专门设计为与Taproot兼容,另一个提议的比特币核心协议升级。

最重要的是,Anyprevout 签署了更多的交易数据,并添加了一项旨在避免本文开头所述的不良情况的功能。为了防止被交换对用户的意志为转移的输入(例如,接受同一地址多次付款后),这个版本的sighash标志要求额外的签名,被称为“伴侣签名,”不签输入。在 Eltoo 中,此伴侣签名可由任一渠道合作伙伴创建。虽然这会更安全一点——它可以防止第三方交换输入——但它也使 sighash 选项更加复杂且费用昂贵。

总而言之,虽然这种新型 sighash 标志的想法早在几年前就已经提出了,但 Noinput 真正被认真考虑也才一年左右,而 Anyprevout 和 Anyprevoutanyscript 也是几个月前才提出的。到目前为止,还没有明确确定它的单一规范。Decker、Towns 和其他比特币和闪电网络贡献者目前采取保守的方法,支持广泛的同行评审和讨论空间。因此,现在说这个 sighash 类何时或是否会真正部署在比特币网络上还为时过早——尽管它的一个版本似乎最终会出现。

猜你喜欢
发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论信息