

本篇为Cointelegraph Research关于比特币Covenants技术演进的深度分析系列第三部分,聚焦于BIP-118提出的SIGHASH_ANYPREVOUT设计原理及其在实际场景中的意义。
SIGHASH_ANYPREVOUT源于2015年闪电网络白皮书首次提出的核心思想,并在2016年由Joseph Poon正式提交至bitcoin-dev邮件列表。该提案并非引入新操作码,而是定义一种新的签名标志值,作为软分叉升级的一部分部署于比特币网络。该标志由交易签署者自主选择,决定哪些数据被纳入签名摘要,从而影响CHECKSIG验证过程。值得注意的是,该功能仅适用于Taproot地址的支出场景,受限于软分叉的可升级性设计。
BIP-118规范了两种具体变体:SIGHASH_ANYPREVOUT与SIGHASH_ANYPREVOUTANYSCRIPT。前者在摘要中剔除输出点信息,但仍保留对前一笔输出金额、scriptPubKey及输入nSequence的承诺;后者则进一步移除金额与锁定脚本的约束,使签名完全脱离所花费UTXO的结构限制。其余字段仍遵循标准的Taproot消息构造规则,取决于基础标志(如SIGHASH_ALL或SIGHASH_SINGLE)。
由于签名不再绑定具体输出点,同一预签名可应用于多个满足条件的兼容UTXO。例如,针对0.5 BTC输出生成的预签名,在后续收到相同金额且同脚本的另一笔资金时即可直接重用,即便原始私钥已丢失。若新接收金额超过原定额度,则超额部分将无法返还,归矿工所有。这一“重新绑定”特性显著提升了多链上状态管理效率,特别适用于需要批量处理链上输出的二层协议。对于以Covenants为目标的应用,保留scriptPubKey承诺的ANYPREVOUT变体更具适用性,而完全去除非脚本约束的变体则不适宜此类逻辑。
有研究指出,移除输出点承诺可能催生一种新型密钥恢复构造——即从固定签名与消息对中推导出公钥,使得对应私钥在数学上不可知,从而强制该UTXO只能通过脚本路径花费。这避免了传统方案中对临时密钥的依赖。该设想源自Jacob Swambo等人2020年论文《Bitcoin Covenants: Three Ways to Control the Future》,但尚未纳入BIP-118的实际设计方案,目前仍属理论探索范畴。
最突出的安全挑战在于签名重放。由于缺乏对特定输出点的承诺,同一签名可能被用于花费非预期的其他兼容UTXO。高危情形包括:使用ANYPREVOUT | SINGLE且输出金额可重构;存在同金额同脚本的备用输出;或同一公钥出现在多个兼容脚本中。此外,矿工若能操控交易排序,亦可能利用这些条件实施攻击。然而,多数风险源于人为配置疏漏或协议设计缺陷,而非协议本身漏洞。
下期内容将转向辅助型操作码的探讨,重点分析OP_CHECKSIGFROMSTACK与OP_CAT如何增强比特币脚本表达力,为未来契约功能奠定基础。
声明:文章不代表币圈网立场和观点,不构成本站任何投资建议。内容仅供参考!
免责声明:本站所有内容仅供用户学习和研究,不构成任何投资建议.不对任何信息而导致的任何损失负责.谨慎使用相关数据和内容,并自行承担所带来的一切风险.