<Weiji,Founder of Lightec>写于2024年4月28日。以下是原文:
2023年4月28日,也就是去年今日,本人向比特币开发者邮件组发送了一封公开信[1],提议在比特币内置编程语言Script中增加一个操作码,用于验证零知识证明。
这个操作码OP_ZKP,将使比特币能够验证链下计算以作为UTXO的支付条件,从而使得Script具备最终图灵完备性,支持诸多新应用。
现在整整一年过去了,我们可以进一步讨论这个提议。接下来,我将提供更多的技术背景,解释过去一年的进展,最后展望未来。
每个提案都需要伴随一个或多个BIP (比特币改进提案),其中规范了相关的技术细节,以及支撑性的论证。然而,我们认识到零知识证明技术仍在快速发展中,有许许多多的证明方案,需要花费很多的资源去研究、发现正确的技术组合,以及可验证地正确实现相关技术(可验证意味着,社区可以严格地验证一个技术实现是正确的,可参考[6],[7]和[8]则提供了在零知识证明系统中应用形式化验证方法的信息)。与此同时,所使用的技术栈必须在相当长的时间内保持安全和稳定。
这里没有一项是容易的。每个需求都需要大量的努力。
同时,人们仍然抱有疑问,即,这个新操作码是否真的能在严肃的应用场景中有用,而不仅仅是技术精英们喜欢的新奇玩意。
因此,我们采取了一个不同的方法。过去一年,我们致力于开发一个名为zkBTC的应用。它并非我们随意编造出来演示OP_ZKP操作码的示例应用。它跟我们的愿景和路线图紧密结合。具体展开解释如下。
很多人认为比特币是可编程的金钱。比特币内置了栈语言Script,用来表达UTXO的支付条件。当某人尝试花费某些UTXO的时候,比特币节点将运行一段Script代码以判断这些支付条件是否达成。
可编程性影响巨大,甚至可以说是历史性的。在人类历史上,人们第一次能够无须信任对方而达成协议。共识协议中的程序,而非可信第三方或背后站着警察的仲裁者,决定了一个合同的最终决算。
人们可能已经注意到并且感到困惑: 为什么比特币网络上的应用反而没有其它区块链多呢?如果比特币是第一个安全的加密货币,又是可编程的,为什么大家都在别的链上编程?什么东西在妨碍比特币?
答案在于,比特币内置编程语言Script不是图灵完备。非图灵完备意味着在理论上,有很多的应用无法计算,无论软件工程师多么的聪明。这就好比一个人无法光手空拳打穿一块厚厚的钢板,无论他多么的强壮有力。在比特币中,这个限制是数学上的,而不是物理或生理。
那么为什么要把Script设计成图灵不完备的呢?为什么不直接修复它,把某些操作码加回来,使得Script图灵完备,然后我们就可以用Script表达任意可计算的支付条件了,不是吗?
实际上,缺乏图灵完备是一种刻意的安全选择,否则的话,比特币节点将无法判断任意一段Script代码会否终止执行。而如果这种情况发生的话,比特币节点将面临攻击,陷入无限循环中,无法完成交易验证,从而使得比特币网络遭到巨大破坏。这在理论计算机科学中被称为停机问题,感兴趣的读者可以参考[2]获取更多资料。另外,[3]或[4]也提供了通俗易懂的视频解说。
我们能够绕过这些限制吗?以太坊是众所周知的例子,引入燃油费概念(gas)来保证任何Solidity程序的执行都会终止。这是因为执行程序需要消耗燃油费,而燃油费终有耗尽之时。对于比特币而言,注意到Script由众多的操作码组成,这些操作码有些可以做很简单的事情,有些则可以做非常复杂的事情。因此,通过采纳某个操作码,将有风险的计算委托到链下,就能达成最终图灵完备性。
这就是我们的提议——一个对任意支付条件的链下计算进行验证的操作码,取代链上直接计算。验证过程完全是决定性的,不会产生任何不可决定性的风险。比特币仍然是可编程的金钱,只是可编程性增强了。
我们称之为最终图灵完备性。出于安全上的考虑,Script仍然是图灵不完备的。而所谓最终,指的是有潜在危险的任意支付条件的计算被放在了链下,而最终在链上加以验证。
如果比特币具备了最终图灵完备性,我们能做到什么?世界连接者,可以连接可计算世界的万事万物,包括链上和链下。连接者自身必须是去中心化的、无信任的,这样人们才能无须依赖不可靠的代理或中介就能达成合作。作为最大的加密货币以及可能也是最大的自治经济体,比特币天然适合这个角色。人们的合作将受到比特币独一无二安全性的保证。
连接就是计算,而计算可以被比特币或基于比特币的二层网络所验证。一份合约,一个俱乐部会员,支付收据,某人的身份,职业经历,资产所有权,数字驾照,货物的运输和交付,web2网络上积累的声望,这些都是一些具体的例子。
我们暂且不再进一步罗列可以连接的事物。为了充分达成愿景,我们需要在OP_ZKP操作码基础上建设很多基础设施级别的应用。记住: 可计算即可连接。
zkBTC项目起始于我尝试为世界上两个最重要的加密货币系统打造一个完全去中心化的跨链桥。一开始,我开发了一个针对比特币链式结构的递归证明,其能证明自创世区块到交易所涉区块再到交易后若干区块(以保证交易深度)的完整链条。这时我意识到,当用户赎回比特币资产的时候存在私钥管理的问题。私钥管理方面存在着一些实用而强大的技术,防止出现诸如单点故障、丢失私钥、共谋等安全问题。
我最终设计了一套密码学安全的方案,而且其经济安全性也相当强悍。尽管如此,我仍然不满私钥的存在,因为管理比特币资产的地址本质上应该是一个面向公众开放的智能合约。我们在合约中取消私钥,将会如何?能够做到吗?这就是前述公开信的由来[1]。
除了激发OP_ZKP升级,我们基于如下两点额外的原因将zkBTC项目归入opZKP项目不可分割的一部分。其一,它是一个严肃的应用,将比特币和以太坊两者以完全去中心化的方式连接起来。数以十亿美元计的资产可以在桥上流动。其二,它构成了世界连接者愿景的第一阶段路线图,即,我们可以将$zkBTC进一步跨链到其他主要区块链甚至二层网络上。
我们将此第一阶段路线图命名为全链连接者。完成第一阶段将意味着比特币事实上在整个加密生态中都存在。无所不在,无处不有。
过去一年,我打造了一支精干的团队开发zkBTC项目,向着第一阶段愿景前进。以下是我们已经完成的工作,与社区分享:
a) chainark[5],一个开源的零知识证明库,可用于证明链式结构,只需要一个证明即可。基于gnark开发,但也可以移植到其他库上。我们使用chainark证明了存入交易,即用户向指定地址存入比特币,以便能够在以太坊上铸造$zkBTC代币。使用chainark,我们能够证明比特币从创世区块开始的完整历史,包括用户的存入交易,以及其后若干区块以确保交易深度。我们也证明了其他一些安全特性,但这些可以留待后续再讨论。
b) reLight, 一个证明以太坊轻客户端协议的库。我们在开源这个库之前,会先将它向合作伙伴开放。reLight也是基于chainark开发的,用一个证明数据就能证明从创世同步委员会到最新同步委员会的完整链条。同步委员会在以太坊轻客户端中扮演核心角色,其签署区块信息以便轻客户端能够验证。使用reLight,开发团队可以更容易证明以太坊上发生的一切。
d) 在OP_ZKP激活之前的安全解决方案。我们的目标是在OP_ZKP激活之前上线zkBTC项目,同时保证不损失密码学安全性。关键的安全架构设计是在一个多签钱包中管理比特币资产,使得这些私钥无人能够知晓(甚至包括项目团队在内),并且仅在验证零知识证明之后才签名资金释放交易,正如OP_ZKP操作码那样。
d) 测试网,即将发布。
我们需要合作伙伴。工作量是巨大的,机会也是。
对于全链连接者愿景,我们需要合作伙伴帮我们把$zkBTC代币(ERC-20)进一步跨链到其他主要区块链以及二层网络上——使用完全去中心化的技术。我们提供支持。按说方案应该是基于零知识证明的。我们强调指出,使用reLight项目,可以很容易向其他区块链或二层网络证明以太坊上的交易,只需要一个证明。不过,如果有现成的桥接以太坊和其他EVM区块链的方案,尽管使用。这方面并无许可之必要。
对于世界连接者愿景,我们欢迎世界各地的,学术界或工业界的朋友来跟我们交流、讨论——关于我们在OP_ZKP操作码基础上能够打造什么应用,如何打造,OP_ZKP应该支持哪些零知识证明方案,如何保证正确的实现,等等。我们也将时常发布相关信息。
联系方式:
Website: https://lightec.xyz/
zkBTC: https://zkbtc.money/
Discord: https://discord.gg/3ueNeRYpFS
Medium: https://medium.com/@LightecXYZ
Github: https://github.com/lightec-xyz
本公开信英文版:
感谢大家的阅读,保持关注。