复制成功

分享至

主页 > Web3.0 >

如何让比特币支持ZK:从OP_CAT到状态证明和BitVM

2024.08.08

作者:Janos Nick,Blockstream

编译:白丁 & Faust,极客Web3

摘要:这篇文章简明扼但又一针见血的指出了如何让比特币支持ZK验证功能,涉及的具体话题包含比特币UTXO和脚本在功能性上的缺陷、Taproot和OP_CAT以及BitVM和Chain State Proof等概念的大致内容。文中抛出了比较鲜明的观点:

比特币协议引入ZK是必然趋势,对此有两种路线:一种是让比特币脚本直接支持SNARK验证,需要借助OP_CAT操作码,而OP_CAT最终通过的概率很大;第二种路线是基于BitVM的,需要引入欺诈证明的方式,而ZeroSync团队还针对性的提出了Chain State Proofs来降低节点客户端验证历史数据的成本。

如何让比特币支持ZK:从OP_CAT到状态证明和BitVM

正文:为了更深刻的理解比特币,我们最好把它当做一个社会系统来看待。比特币早期启动的时候,开发者就确定了比特币节点需要运行的软件程序,就像确定了一套社会系统所遵循的规则。比特币这个社会系统之所以能够稳定运转,是因为大家在“比特币的本质是什么”、“应该是什么“等关键问题上存在某种共识。当然,共识的达成并不容易,人们在面对上述问题时,仍然存在广泛且不断演化的分歧。

如何让比特币支持ZK:从OP_CAT到状态证明和BitVM

这可以追溯到比特币的历史来源问题。当初中本聪在发布比特币白皮书时,曾说:"我在研究一套全新的电子支付系统,这套系统完全是P2P的,不需要依赖于任何第三方"。这段话发表于密码朋克邮件列表(一个成立于1992年的电子邮件讨论组,由一群关注隐私保护和密码学技术的密码学家及技术爱好者组成)。

然而,比特币在产品设计层面限制了数据吞吐量。其单位时间内能处理的交易笔数有限,如果待处理的交易数量快速上升,用户为了快点交易成功,就会发起价格战,迅速拉高付出的手续费。比特币网络内手续费最高的单笔交易出现在2024年出块奖励减半后,一笔上链优先级中等的交易手续费达到150美元。可以说,比特币网络昂贵的交易手续费已成为一个难题。

为了解决交易手续费问题,人们把很多资源投入到闪电网络开发工作中。但根据一篇发布于2016年的论文,闪电网络在实践中最多只能支持数千万用户,无法实现其全球支付系统的愿景。

除了交易手续费过于昂贵外,还有一个问题,就是比特币始终无法实现其愿景中想达到的匿名性。中本聪在曾在密码朋克邮件讨论组中指出,比特币具有隐私保护功能,交易发起者可以是完全匿名的。然而,虽然交易发起人不需要KYC,但比特币链上的交易数据泄露了许多信息,很大程度上暴露了用户隐私。

虽然有一些附带隐私功能的钱包客户端一定程度解决了上述问题,但这些钱包客户端的开发者却面临着大大小小的威胁。比如,Samourai CoinJoin钱包的开发者在2024年4月被FBI逮捕,而在一周后,Wasabi钱包的开发者就关闭了他们的CoinJoin协调组件。显然,这些所谓的隐私钱包并不完全值得用户信任。

总结下来,直到今天比特币的许多理念还远未实现,相关技术仍处于不断发展中。即使这样,比特币社区中很多人还认为比特币的协议设计应该保持不变,但也有很多人像我一样,热衷于对比特币做出改进。那么,比特币应该向何种方向改进呢?

如何让比特币支持ZK:从OP_CAT到状态证明和BitVM

针对上述问题,比特币社区中有很多提案,理论效果最好的应该是和ZK及SNARKs相关的。借助ZK和SNARKs,可以实现如下特性:

1. 显著改善隐私性:使用同态Peterson承诺对交易数额和Range Proof显著提高用户隐私性(如Blockstream的 Element侧链中所做的);通过可链接签名(如Monero )隐藏交易痕迹;实现真正的私密交易(如 Zcash)。

2. 提高交易吞吐量

    其实有很多技术手段可以解决比特币身上存在的问题,但为什么直到今天,这些技术仍没有被加入到比特币协议中?这是因为比特币协议很难被修改。比特币生态里没有类似于以太坊基金会的组织,对协议的任何修改都需要社区达到高度共识才行,这里涉及到大量的博弈和权力制衡,所以不同于以太坊那样每年都会有EVM操作码的更新,比特币协议自问世以来,变更就非常少。

    其实,协议难以被修改在某种程度上是好事,如果修改比特币协议很容易,那么对其进行恶意更改和攻击也会很容易。这就引出了一个问题:在不改变比特币协议设计的情况下,有什么手段可以改善比特币的性能?

    如何让比特币支持ZK:从OP_CAT到状态证明和BitVM

    要回答这个问题,我们要先回顾关于比特币的知识。如果我们要将比特币转账给别人,需要先创建一笔交易,将其广播到比特币网络中。交易的输出数据会说明转账的BTC数额,BTC接收者可以再创建一笔新的交易,来花费收到的BTC。此后,这笔新的交易又会产生新的输出数据,并将BTC发送给其他人。

    这里要注意的是,比特币没有以太坊那样的全局状态,特别是没有账户的状态,只有交易输出数据。每笔交易的输出有两种状态:已被接收者花费或未被花费。未被花费的交易输出就是我们熟悉的UTXO。

    当然,除了关联的BTC数额外,每个交易输出都有一段附加程序,用一种叫比特币脚本的语言来编写。谁能向这段程序出示正确的证明Witness,谁就能花费这笔交易输出(UTXO)。比特币脚本本身是一种基于堆栈的编程语言,包含一系列操作码,前述UTXO的附加程序往往由多个操作码组成,它们基于堆栈完成计算并将结果再放回堆栈。

    常见的比特币脚本有很多种类型,从比特币启动之初就已经存在了。举个例子,比特币中最常见的脚本程序由公钥+检查数字签名的操作码组成。该操作码规定,要花费/解锁某个UTXO,必须出示对应公钥的数字签名。

    推荐阅读:《走近BTC:理解BitVM所需的背景知识(1)》

    如何让比特币支持ZK:从OP_CAT到状态证明和BitVM

    这里我们来总结一下比特币脚本的功能。首先比特币脚本能做什么?

  1. 可以重排堆栈,等式检查(使用等式检查来验证特定条件是否满足,从而确保交易的安全性和有效性),可以进行类似于if-else的分支操作。

  2. 可以对32位数字进行有限的算术运算,即加法和减法。

  3. 可以将数据哈希化,且可以检查ECDSA和Schnorr签名。

  4. 免责声明:数字资产交易涉及重大风险,本资料不应作为投资决策依据,亦不应被解释为从事投资交易的建议。请确保充分了解所涉及的风险并谨慎投资。OKEx学院仅提供信息参考,不构成任何投资建议,用户一切投资行为与本站无关。

    加⼊OKEx全球社群

    和全球数字资产投资者交流讨论

    扫码加入OKEx社群

    相关推荐

    industry-frontier