作者:Che Kohler 编译:Cointime.com 237
随着比特币发展成为一个价值数十亿美元的网络,并且每天进行数十亿美元的交易,可以理解到任何提议的变化都将受到严格审查。人们在比特币中投资的价值以及通过结算交易创造的价值都太重要了,不能轻率地对待任何代码更改。
此外,我们正在使用以前从未使用过的工具,我们不知道市场将如何接收任何更新。这使得协议变更成为一个非常复杂的话题。一个例子就是2016年至2017年之间围绕SegWit2x提议和Taproot进行的激烈讨论。
随着比特币的发展,推动通过越来越难,尤其是那些需要软分叉的BIP(Bitcoin Improvement Proposal)。例如,SIGHASH_ANYPREVOUT 及其前身已经自2016年开始被讨论。
比特币代码基础的僵化确保只有经过充分检验的想法才能通过,而其他想法则会被推到二层解决方案,而不是拖累基础链。
但这并不意味着我们将来不会看到比特币升级的提案,也不意味着它们不会作为比特币核心的更新版本合并到代码库中。
现在你对升级有了一些了解,让我们看一下 BIP-118 以及为什么它已经存在这么长时间了。
什么是ANYPREVOUT?
考虑到人们对简单契约和更好的离链协议的兴趣和需求,BIP118 是一个可能有益于比特币并符合其扩展方向的软分叉候选方案。
BIP 118 最初于2017年编写,当时被称为 SIGHASH_NOINPUT。这个提议最初是由闪电网络白皮书的作者(Joseph Poon 和 Thaddeus Dryja)提出的,旨在解决一种被称为“交易可篡改性”的问题,后来由 SegWit 解决了。
BIP-118 提议了一种软分叉,允许交易不仅花费特定的先前交易输出,而是使用相同签名密钥的任何交易输出,在 SIGHASH_ANYPREVOUTANYSCRIPT(APOAS)的情况下,或者花费具有特定金额和脚本的输出,在 SIGHASH_ANYPREVOUT(APO)的情况下。
只有引用新的公钥类型前缀的 Taproot 交易的 Taproot 脚本路径支出才能启用使用这两个签名哈希。
ANYPREVOUT 是一个签名哈希标记,允许使用一个签名来花费具有相同脚本的任何未花费交易输出(UTXO)。这意味着签名不需要特定于被花费的 UTXO,这在某些情况下非常有用。
简而言之,ANYPREVOUT 允许不签名与先前交易相关的部分信息。具有这种类型签名哈希标记的交易不会与过去的交易关联,并且可以花费具有相同公钥(或花费条件)的任何比特币地址中的比特币。
ANYPREVOUT 的工作原理
ANYPREVOUT 的工作原理是将输入的 scriptPubKey、序列号和要花费的输出金额进行哈希处理。然后使用该哈希对交易进行签名。
在稍后验证交易时,将检查签名是否与 scriptPubKey 和序列号匹配。如果签名有效,则认为交易有效。
使用ANYPREVOUT的好处
使用ANYPREVOUT有几个好处。首先,它可以简化创建交易的过程。
例如,假设您要创建一笔将花费相同脚本的多个UTXO的交易。在这种情况下,您可以使用ANYPREVOUT一次签名整个交易,而不是逐个签署每个UTXO。
其次,ANYPREVOUT可以提高交易的隐私性。当您使用常规签名哈希标记时,签名是特定于被花费的UTXO的。这意味着如果有人知道被花费的UTXO的哈希,他们也可以知道签名。然而,通过使用ANYPREVOUT,签名与被花费的UTXO无关,因此对于某人来跟踪您的交易更加困难。
另一个用例是“契约”的替代形式,而不是CHECK TEMPLATE VERIFY。这些契约可以实现更复杂的智能合约,如盲目状态链、空间链、创建更安全的比特币保险库或使用Eltoo。
契约是一种确保只有在特定条件下才能花费某笔交易的方式,可以利用这个小技巧,在交易的输出中嵌入用于第 t+1 个交易的签名。
使用ANYPREVOUT的缺点
使用ANYPREVOUT也有一些缺点。
首先,问题是一旦广播了交易,就无法撤销或“收回”先前签名的交易。您只能签署一个新交易,并赋予其更新或取消先前交易的权限,如果有人试图使用它,但您无法收回先前的交易。
其次,不是所有比特币钱包都支持ANYPREVOUT。这意味着如果您想使用ANYPREVOUT,必须确保您的钱包和接收方的钱包支持它。
软分叉和向后兼容性
旧版软件将在软分叉的情况下继续运行,无需进行修改,不希望处理这些功能的用户可以继续正常使用。
未升级以支持BIP 341的节点将把所有Taproot见证程序视为任何人都可以花费的脚本;已经升级以支持BIP 341和BIP 342但未升级以支持BIP 118的节点将把针对BIP 118公钥的任何非空签名视为有效。
因此,鼓励节点升级以完全验证新公钥类型的签名。
未升级的钱包可以与未升级和升级的钱包之间进行比特币的接收和发送,使用SegWit版本0程序、传统的支付至公钥哈希等方式。
根据实现方式,如果非升级的钱包支持向BIP350 Bech32m地址发送,并且不会因为认为输出是非标准的而阻止交易广播,则可能能够发送到SegWit版本1程序。
更平滑地在链上和链下过渡
ANYPREVOUT在某些情况下是一个有用的功能,尽管现在可能不太流行,但它在未来肯定会产生影响。如果我们吸引更多的比特币用户,链上和各种链下协议之间的流动将需要更加平滑,否则您的扩展解决方案将无法充分发挥其影响。
假设您在高费用/竞争激烈的区块空间环境中仍然使用传统的链上交易,那么您要么被限制在第二层封闭的生态系统中,直到费用合理,要么等待着在链上和链下之间进行转移,这对于比特币来说并不是一个理想的情况。
所有评论