



注:交易内省是指在比特币脚本中对交易本身的各个组成部分进行检查和分析的能力。简单来说,就是让脚本能够「理解」和处理它正在处理的交易的详细信息,比如检查交易的输出内容、金额或者特定的签名等。这样,脚本就能根据交易的具体内容做出更加智能和细致的响应。这样用户在堆栈上提供整个交易的数据,脚本利用 OP_CAT 将这些数据打包成一个单一项,进行哈希处理,然后传递给 CHECKSIGFROMSTACK 来验证数据上的签名。接着,它将相同的签名和密钥传递给 CHECKSIG。如果两次验证都通过,表明用户提供的交易数据确实是真实的交易数据。这样,脚本就可以直接利用这些数据执行契约所需的任何检查。 Andrew Poelstra 的影响力,和这篇文章的构思,引起了比特币开发人员的注意,并在那一周的会议,对这种操作码的结合和关于在激活 taproot 后对脚本语言进行微小更改如何提高合约灵活性作出了许多讨论。 距离《CAT and Schnorr Tricks I》的发布过了两周左右的时间,Andrew Poelstra 发了第二篇《CAT and Schnorr Tricks II》,在这篇中,Andrew Poelstra 叙述了更多细节和他的想法: 2019 年 5 月,比特币开发者 Jeremy Rubin 提出了比特币的 CHECKOUTPUTSHASHVERIFY 操作码,目的是为了实施一种基础而有限制的智能合约,避免了之前智能合约设计中的技术和社会风险。这个操作码后续被 SECURETHEBAG 替代,再之后又被 CHECKTEMPLATEVERIFY 取代,而 CHECKTEMPLATEVERIFY 于 2020 年 1 月正式成为比特币改进提案 BIP 0119。 同时,Russell O'Connor 建议直接向比特币添加 CHECKSIGFROMSTACK 和 OP_CAT 操作码,以支持不受鲁宾提案限制的智能合约。尽管该提议遭到了一些反对,并且讨论最终减少,主要是由于 CAT+CHECKSIG 类型智能合约效率低下,以及人们对全面通用智能合约持有的长期负面印象。 Andrew Poelstra 一开始也不愿意支持所谓的比特币智能合约功能。然而,在 2019 年秋天,和 Ethan Heilman 的一次私下交流改变了他的想法。Ethan Heilman 指出,尽管存在担忧,但实际上通过 CHECKMULTISIG 就可以实现被认为有害的智能合约,而这类合约由于缺乏认可和可用性,实际上并不被钱包和用户接受。为了证明这一点,Ethan Heilman 在社交媒体上发起挑战,鼓励人们提出可行的「黑暗」智能合约,但至今无人成功。 于是 Andrew Poelstra 转而开始思考,大家对智能合约的恐惧可能被夸大了。文章还提出,即使存在顾虑,智能合约在比特币的发展中是不可避免的,并鼓励继续探索使用非专用操作码 OP_CAT 创建智能合约的可能性。 2021 年 接着是 Jeremy Rubin 于 2021 年 7 月 6 日的一篇文章,从比特币量子安全的角度对 OP_CAT 进行了阐述。Jeremy Rubin 不仅是比特币开发者,也是 Judica 的创始人,这是一家比特币研发组织,专注于开发比特币的智能合约编程语言 Sapio。 在邮件和博客文章中,Jeremy Rubin 讨论了如何利用 OP_CAT 操作码和 Lamport 签名来对比特币进行量子验证。作者首先回顾了之前的一篇博文,讲述了如何利用比特币脚本算术和 Lamport 签名来注册 5 字节值的方法。尽管这个方法整洁,但它有其局限性。Jeremy Rubin 提出了一个想法:如果我们能对更长的信息进行签名会怎样?特别是如果我们能签署最多 20 字节,我们就能签署一个可能是量子安全的 HASH160 摘要。 Jeremy Rubin 在文章进一步探讨了对 HASH160 摘要签名的含义,并解释了即使量子计算机破解了 ECDSA,也只会泄露私钥而不会改变实际签名内容的能力。为此,作者咨询了密码学家 Madars Virza,并得到了肯定的回答。 Jeremy Rubin 指出,如果我们要求 ECDSA 签名使用量子证明签名算法进行签名,我们就能拥有量子证明的比特币。而之前讨论的 5 字节签名方案实际上是一个量子安全的 Lamport 签名。但遗憾的是,这种方法至少需要 20 个连续的字节。 因此,Jeremy Rubin 提出需要某种类似 OP_CAT 的操作。文章说明 OP_CAT 不能直接软分叉到 Segwit v0,因为它会修改堆栈。因此,为了简化,作者展示了如何使用一种新的操作码 OP_SUBSTRINGEQUALVERIFY,该操作码通过验证语义来检查字符串的某个部分是否相等。 2021 年 11 月 5 日,在亚特兰大比特币会议上,Jeremy Rubin 和 Andrew Poelstra 作为演讲人,就在讨论关于重新启用操作码 OP_CAT 的提案,他们认为 OP_CAT 在比特币的上下文中很重要,并强调了它的潜力,特别是在量子安全性和制作复杂智能合约方面。例如,结合 CAT 和 Schnorr 签名验证操作码,理论上可以实现非递归的智能合约。这种智能合约能够将交易数据的 SHA2 哈希直接放入堆栈。通过这样做,可以在某种程度上对交易的各个部分施加限制。 讨论也提到,如果重新引入 CAT,可能会使比特币在某些方面变得复杂的同时也,会引入新的功能和可能性。重启 OP_CAT 需要谨慎考虑,以避免过去出现的问题,如内存爆炸问题。 2022 年 在 2022 年 5 月 18 日的比特币开发者邮件列表中,有关重新引入 2010 年从比特币中移除的 OP_CAT 操作码的讨论中,开发者 ZmnSCPxj 提出,要实现不可避免的递归智能合约,需要将 OP_CAT 与 OP_TX、OP_CHECKSIGFROMSTACK(CSFS)等提议的操作码结合。递归智能合约利用比特币共识规则确保接收到合约的所有比特币只能被花费在相同的合约上。 递归智能合约依赖于事务内省技术,即操作码可以分析执行该操作码的事务的一部分。现有的操作码,提供的都是有限的内省。为了创建递归智能合约,需要确保前一个输出和下一个输出相同。因此,或前一个输出、或下一个输出、或两者都必须从它们的组成元素中动态构造,这就是为什么需要 CAT 或类似结构来实现递归智能合约。 Nadav Ivgi 指出,在创建递归智能合约时,仍然需要 CAT 来解决哈希问题,但这意味着专注于输出内省的 CTV 和 APO 等功能也能够与 CAT 结合创建递归智能合约。Ivgi 认为,在与 taproot 的功能结合使用时,通过下一个输出验证前一个输出可以使智能合约脚本更易于编写,并提供了两个递归智能合约示例的链接。 ZmnSCPxj 同意 Ivgi 的分析,并重申了他对在比特币上启用递归智能合约风险的担忧,尽管他也在后续帖子中指出,递归智能合约可能是安全的,因为它们实际上不是图灵完备的。Russell O』Connor 引用了 Andrew Poelstra 的文章,描述了 CAT 本身如何与已有的比特币功能结合,足以创建非递归智能合约,并且理论上,如果重新添加到比特币中,也可能能够自行创建递归智能合约。 2023 年 1 月,Anthony Towns 推出了 Bitcoin Inquisition,这是一个复刻了 Bitcoin Core 的软件,旨在默认的 signet 上运行,用于测试人们提出的软分叉和其他重大协议变更。截至 2023 年年末,Bitcoin Inquisition 已经支持了多项提案,此外,旨在为 OP_CAT、OP_VAULT 以及限制 64 字节交易的 PR(拉取请求)已经提交到其代码库,预计将进一步扩展这个测试平台的功能。 2023 年 8 月 23 日,在Lightning-Dev 邮件列表中,Thomas Voegtlin 提出了一个关于过期备份状态的欺诈证明的想法。Voegtlin 指出,如果比特币中以软分叉的方式添加 OP_CHECKSIGFROMSTACK (CSFS) 和 OP_CAT 操作码,就有可能在链上使用这种欺诈证明。该提案引发了大量讨论,Peter Todd 指出基本机制是通用的,不仅限于 LN,可能在各种协议中有用,不过他还提出了一个更简单的机制,在此处就不展开讨论了。 到了 10 月,Rusty Russell 对进行最小更改的比特币脚本语言的通用智能合约进行了研究。与此同时非常重要的是,Ethan Heilman 和 Armin Sabouri 联合发布了一份BIP 草案,提议添加 OP_CAT 操作码,该操作码用于将堆栈上的两个元素连接起来。这两个议题的讨论持续到了 11 月。 2024 年 时间来到了 2024 年 1 月,Quantum Cats 确实成功地将关于 OP_CAT 的 BIP 和比特币进程的讨论提升到了一个新的水平。 在和社区的互动中,Bitcoin Core 开发者Ava Chow 曾表示:「我不认为 CTV 是粗略的共识。我认为实际上其他更一般的智能合约提案更接近,例如 txhash 或 CAT。但是,我没有密切关注讨论。」





