原文:Bitcoin Covenants Part 3: SIGHASH_ANYPREVOUT

这是 Cointelegraph Research 有关比特币契约的技术文章系列的第 3 部分。要阅读上一篇文章,请点击此处。

BIP 118 中提出的 SIGHASH_ANYPREVOUT 建立在 Joseph Poon 和 Thaddeus Dryja 2015 年闪电网络论文中提到的早期 SIGHASH_NOINPUT 概念的基础上,后来由 Joseph Poon 于 2016 年 2 月在比特币开发邮件列表上正式提出。

SIGHASH_ANYPREVOUT 不是一个新的操作码,而是 SIGHASH 标志的提议新值,旨在作为比特币的软分叉升级进行部署。 SIGHASH 标志附加到签名后,确定交易的哪些部分已签名并将由 CHECKSIG 操作码检查。所选标志由签名者选择,而不是由 scriptPubKey 强制执行。由于与软分叉中的可升级性相关的技术细节,SIGHASH_ANYPREVOUT 提案仅扩展到来自主根地址的支出。

多种标准 SIGHASH 模式已经存在,如图 1 所示。如果标志设置为 SIGHASH_ALL,则签名必须覆盖所有输入、所有输出以及所花费的特定输出点,从而以加密方式将授权绑定到该确切的 UTXO。出点是交易 ID 和输出索引的组合,它们共同唯一地标识交易正在消耗哪个 UTXO。使用 SIGHASH_NONE,仅需要对输入进行签名,而输出不受约束。 SIGHASH_SINGLE 变体对所有输入进行签名,但仅对与被签名的输入具有相同索引的输出进行签名。 ANYONECANPAY 修饰符允许单个输入独立于其他输入进行签名,从而引入了进一步的灵活性。至关重要的是,这些现有模式都不允许签名省略对出点的承诺。 SIGHASH_ANYPREVOUT 删除了该限制。

BIP-118 定义了两个 ANYPREVOUT 变体,它们的不同之处在于它们从摘要中省略了多少先前的输出,如图 2 所示。在 SIGHASH_ANYPREVOUT 下,出点被排除在外

阅读原文 →