OP_CHECKSIGFROMSTACK (OP_CSFS) 是一种操作码,可以检查对任意消息的签名。文章介绍了 OP_CSFS 的概念、原理,以及它在为签名支付、委托授权、断言机、防重复花费保证金和交易内省等方面的应用,并探讨了它的优点和缺点。OP_CSFS 提供了对运行脚本的交易的完全内省,但可能会增加交易的体积。
作者:Bitcoin Optech
_来源: https://bitcoinops.org/en/topics/op_checksigfromstack/_
OP_CHECKSIGFROMSTACK(OP_CSFS) 是基于 ELEmentsProject.org 的侧链上的一种操作码,有时候也被提议在比特币上实现。这种操作码可以检查对任意消息的签名。它会接收三个参数:一个签名、一条消息和一个公钥。
比特币现有的签名检查操作码,比如 OP_CHECKSIG
,是不允许指定任意消息的;它们所验证的消息是从执行签名检查操作码的交易中派生出来的,这样它们就能验证签名跟一个公钥相匹配、且该公钥背后的私钥生成了授权这次花费的数据(公钥和签名)。这套机制足够强大,足以保护比特币的 UTXO,但阻止了使用电子签名来鉴证比特币系统中的其他类型的数据。使用 OP_CSFS
,我们就能验证对任意消息的签名,从而给比特币用户带来多项新特性:
不过,近期,涉及为签名支付的协议通常 假设使用 “适配器签名”,那会更加隐私,也只需使用更少的区块空间。
另一种可以实现相同效果的替代方案是 graftroot,而且更加隐私、更加灵活,也更节省区块空间,不过着需要一个软分叉,而且到目前为止很少关注。
近期对断言机主持合约的关注包括 “ 谨慎日志合约(DLCs)”,它会更隐私,区块空间效率也会更高。
这种用法可以跟 “ single-show signatures” 相类比,后者允许任何人只要看到来自同一密钥的两个签名就能推导出用来创建它们的私钥,从而可以花费该密钥所保护的其他资金。
OP_CSFS
和 OP_SHECKSIG
两种操作码都是有效的,那就说明,传递给 OP_CSFS
的消息跟 OP_CHECKSIG
所隐式使用的序列化交易(以及其他数据)是完全一样的。因此,我们可以利用这一点,将一个经过验证的花费交易的副本放在脚本求值堆栈 中、使用其它操作码来运行检查,从而对实际的花费交易执行一些限制。比如说,如果 OP_CSFS
在 2015 和 2016 年就启用了,那么,我们只需编写一种验证脚本就可以实现 BIP65 OP_CHECKLOCKTIMEVERIFY
(CLTV 脚本绝对时间锁)和 BIP112 OP_CHECKSEQUENCEVERIFY
(CSV 脚本相对时间锁)的特性,无需专门的共识变更。
展望未来, OP_CSFS
也可以用来编写能够 实现 提议中的 SIGHASH_ANYPREVOUT 特性,以及提议中的其它操作码(比如 OP_CHECKTEMPLATEVERIFY)特性的脚本。此外, OP_CSFS
还可以用来创建 “ 限制条款” —— 用来约束一组比特币被花费的方式 —— 比如,“ 保险柜合约” 可以限制花费交易的输出的脚本公钥,从而限制被盗的风险。
OP_CSFS
的强大指出在于,它提供了对运行脚本的交易的完全内省,而且是完全通用的。它的缺点在于,它需要将交易的完整副本添加到堆栈中,可能会极大地增加交易的体积。相比之下,一些单一用途的内省操作码,比如 CLTV 和 CSV,只有极小的开销,但是每添加一种特殊的内省操作码都需要一次共识变更,而且想要禁用就必然要冒让某些用户丢失资金的风险(即使它看起来已不再流行)。
- 本文转载自: btcstudy.org/2025/03/20/... , 如有侵权请联系管理员删除。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!