聊一聊 zkMove(一)

本文是 zkMove 系列的第一篇,介绍了项目创建的背景和用途。

刚刚过去的一年,伴随着 Defi 的繁荣以及 NFT 应用大量涌现,以太坊的容量逐渐接近上限。虽然 POS、分片等技术可以在一定程度上提升吞吐率,但是从长远来看,拥堵的根源依然存在。因为任一交易想要上链,都需要全网大多数节点验证其合法性,而验证的方法就是重复执行该交易。随着应用数量的指数级增长,以及智能合约的逻辑越来越复杂,验证交易合法性所耗费的计算资源也会指数级增加,表现出来就是交易的拥堵、高昂的手续费,以及所谓的“价值的外溢”。

其它区块链,不管是什么类型,只要是通过重复执行来验证交易合法性,都会面临同样的问题,只是时间早晚而已。那么有没有办法既能验证交易合法性,又无需重复执行该交易呢?

有的。一种方法是所谓的“欺诈证明”。它依赖某种经济激励和惩罚机制,默认用户的交易都是正确的,无需验证。如果有人提交了非法交易,其它人都可以发起挑战,挑战成功后作弊者的押金将被没收,挑战者会受到奖励。

另一种方法就是基于密码学的“零知识证明”。假设我有一个程序,运行它非常耗时,我的计算机资源有限,所以想让别人来帮我运行它。但是我怎样才能知道别人真的执行了程序,而不是捏造了假的结果呢?我可以让他在执行程序的同时生成一个“零知识证明”,虽然生成这个“证明”非常慢,但是验证它却非常快,有了这个“证明”,我就无需运行程序也能验证结果是否正确了。

我之前在 westar 实验室工作时写的一篇文章《深入理解区块链二层扩展方案 Rollup》,对“欺诈证明”和“零知识证明”这两种扩容方案做了对比分析。目前基于“零知识证明”的扩容方案每部署一个合约都需要单独编写电路(circuit),而且只能支持单个应用场景,因而通用性或者说可编程性要比“欺诈证明”差很多。zkSync、ZKEVM 等项目通过构建零知识证明虚拟机来提升可编程性,他们的扩容方案正在趋于成熟。

zkMove (www.zkmove.net)就是在这样的背景下被提出的。zkMove 中的 zk 是 Zero Knowledge 的缩写,代表零知识证明,Move 是 Facebook 为 Diem 区块链开发的智能合约编程语言。所以 zkMove 就是将 Move 编程语言和零知识证明技术结合在一起,构建一个Move 语言的运行环境,使得部署 Move 智能合约时可以自动生成电路,执行合约时生成零知识证明。这样区块链就可以通过零知识证明来验证交易合法性,无需重复执行该交易。

之所以首选 Move,是因为 Move 是目前最安全的智能合约编程语言。作为新一代的面向数字资产的编程语言,Move 引入了类似 Rust 的所有权概念,能够定义满足线性逻辑语义的资产类型,在语言层面保证资产只能被转移,永远不能被复制或丢弃。同时,Move 语言也摒弃了动态调用这样的 EVM 中最容易产生安全漏洞的功能,给用户带来比以太坊智能合约更高的安全性。

除了给区块链扩容,zkMove 还能做什么?

细心的朋友可能已经发现了,我刚才在介绍零知识证明时只提到“证明”,忽略了另一个重要概念“零知识”。这里的“知识”,就是有用的信息,“零知识”就是指没有泄露任何有用的信息。“零知识证明”就是在不透露我知道某样东西的前提下,向别人证明我确实知道这个东西。有点绕口,翻译成工程师术语,就是我运行了这个程序,输入参数我不告诉你,但是我能证明这个运行结果是对的。神不神奇?所以,zkMove 除了给区块链扩容,还可以保护隐私。

大家都知道,区块链的账本内容是完全公开的。一个内容完全公开的账本,它的用途是非常有限的。很难想象,一个基于联盟链的遗嘱库、投票系统、或者是发票系统、医疗信息系统等等,如果用户敏感信息完全公开会有什么后果。有了 zkMove,就可以将敏感信息作为智能合约的隐藏输入参数,既能保护用户隐私,又能保证数据不可篡改。

写到这里,zkMove 的用途应该是说清楚了。如果非要再升华一下,我想,或许将来有一天 zkMove 会和现在的 Web Runtime 融合,跑在浏览器里的除了 Html、Java Script 和 WASM,还会有一个新成员 —— Move script。

本文作者朱光宇 (@guangyuz),区块链爱好者,zkMove (zkmove.net) 开源项目创建人,专注于智能合约编程语言、零知识证明密码学研究。更多文章请关注同名公众号:宇宙流拓荒者。

点赞 2
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Young Rocks
Young Rocks
zkMove 开源项目创建者,专注于智能合约编程语言、零知识证明密码学的研究