比特币(BTC)契约第三部分:SIGHASH_ANYPREVOUT

SIGHASH_ANYPREVOUT(APO,BIP-118)是比特币Taproot升级后引入的新型签名哈希类型。其核心创新在于签名时无需绑定具体输入UTXO,仅对输出进行签名,从而实现更灵活的支出逻辑。该机制是闪电网络Eltoo改造的技术基石,可大幅降低状态存储需求,助力通道工厂与轻量级瞭望塔构建,显著提升比特币二层扩展性能。
APO允许比特币签名授权任何兼容的UTXO,而非固定的输出点。它允许为Lightning、Vault和Layer-2协议提供可重新绑定的预签名交易,而无需新的密钥管理开销。
这是Cointelegraph Research关于比特币契约的技术文章系列的第三部分。点击这里阅读上一篇文章。
SIGHASH_ANYPREVOUT,正如 BIP 118 中所述,基于 Joseph Poon 和 Thaddeus Dryja 在 2015 年 Lightning Network 论文中提到的早期SIGHASH_NOINPUT概念,后来由 Joseph Poon 于 2016 年 2 月在比特币开发邮件列表上正式提出。
SIGHASH_ANYPREVOUT不是新的操作码,而是SIGHASH标志的一个提议新值,设计用于作为比特币的软分叉升级。SIGHASH 标志附加在签名后,决定交易的哪些部分已签署,并由 CHECKSIG 操作码检查。所选的旗帜由签署者选择,而非由scriptPubKey强制执行。由于软分叉中升级的技术细节,SIGHASH_ANYPREVOUT提案仅适用于来自主根地址的支出。
如图1所示,已经存在多种标准SIGHASH模式。如果标志设置为SIGHASH_ALL,签名必须覆盖所有输入、所有输出以及具体的输出点,从而加密绑定授权到该精确的UTXO。outpoint 是交易 ID 和输出索引的组合,共同唯一标识交易正在消耗的 UTXO。而 SIGHASH_NONE 则只需对输入进行符号,输出则不受约束。SIGHASH_SINGLE变体对所有输入进行签名,但仅对与被签名输入索引相同的输出签名。ANYONECANPAY 修饰符通过允许单个输入独立签名,增加了更多灵活性。关键是,这些现有模式都不允许签名省略对出点的承诺。正是这个限制被SIGHASH_ANYPREVOUT移除了。

BIP-118定义了两种ANYPREVOUT变体,它们在摘要中省略的前一输出比例不同,如图2总结。在SIGHASH_ANYPREVOUT下,输出点被排除在摘要之外,但签名仍然承诺到之前输出的数量和scriptPubKey,以及输入的nSequence。在 SIGHASH_ANYPREVOUTANYSCRIPT 下,金额和 scriptPubKey 也被排除,这意味着签名完全不绑定在已花费输出的锁定脚本上。所有其他承诺都遵循标准的Taproot签名消息结构,并依赖于所选的基标志,如SIGHASH_ALL或SIGHASH_SINGLE。

由于摘要中省略了该输出点,同一签名可以授权使用任何满足剩余提交字段的兼容UTXO。例如,一笔以 ANYPREVOUT | 预先签名的交易如果同一地址后来收到另一个0.5 BTC的UTXO,即使用于创建原始签名的私钥已不可用,ALL可以重复使用以产生0.5 BTC的输出。但如果新的UTXO持有超过0.5 BTC,矿工将损失多余部分,除非原始签名包含变更输出。这种重新绑定特性使ANYPREVOUT在第二层协议中非常有用,因为同一预签名事务必须适用于多个可能的链上UTXO,而无需为每个协议重新签名。
对于类似契约的应用,ANYPREVOUT 变体保留对前一输出 scriptPubKey 的承诺,通常是最相关的。它们允许签名在兼容的UTXO间重复使用,同时确保资金绑定在同一锁定脚本下。ANYPREVOUTANYSCRIPT 完全去除了这种绑定,因此不太适合契约式应用。
与OP_CTV类似,SIGHASH_ANYPREVOUT改进了预签名事务已可实现的逻辑,但本身并不支持递归契约或事务内省。相反,它放松了签名与特定UTXO之间的绑定,允许签名在多个兼容的UTXO间重复使用。
一些研究还指出,移除输出点承诺使得恢复密钥构造成为可能——即公钥可以从固定签名和消息对中推导出来,使得对应的私钥对任何人都可证明未知,使UTXO的密钥路径可证明不可使用,强制任何花费通过脚本路径。这将避免临时密钥的需求,而临时密钥在依赖脚本路径强制执行的构造中是使密钥路径不可使用的关键。这一观察出现在Jacob Swambo等人(2020年)的《比特币契约:三种控制未来的方式》中,尽管它仍是理论构造,而非BIP-118中提出的设计。
SIGHASH_ANYPREVOUT签名的主要风险是签名回放。由于这些签名不承诺特定出点,只要新的 UTXO 满足剩余的已提交字段,同一签名可用于使用与原意不同的 UTXO。这种风险在特定配置中更为明显:当 ANYPREVOUT |使用单一(SINGLE)并可重新排列输出量;当存在一个独立的 UTXO,且具有相同的 scriptPubKey 和金额时,如 ANYPREVOUT;当同一公钥以兼容的文字出现时,如ANYPREVOUTANYSCRIPT;或者矿工可以影响交易排序和包含性,利用这些条件。然而,这些场景要么是故意滥用,要么是用户或开发者在协议设计时未能考虑重放条件。
在我们的下一篇文章中,我们将开始讨论作为辅助工具的操作码。这些工具扩展了比特币脚本或数据处理的表达力,但除非与其他操作码结合,否则不实现契约功能。在下一类中,我们将讨论OP_CHECKSIGFROMSTACK和 OP_CAT。
以上就是比特币(BTC)契约第三部分:SIGHASH_ANYPREVOUT的详细内容,更多关于BTC契约三:ANYPREVOUT的资料请关注脚本之家其它相关文章!
本站提醒:投资有风险,入市须谨慎,本内容不作为投资理财建议。