zkMega 是 Patract 的第五个项目,提供多条密码学曲线(alt_bn128、bls12_381、BLS12-377、BW6_761)的链上 Runtime 支持和链下开发工具,致力于为 Polkadot 生态引入基本的零知识证明基础支持,以便开发人员可以通过 Wasm 智能合约或 Runtime 轻松地在较高级别上开发应用程序。zkMega 将首先支持更成熟的与 zkSNARK 相关的技术,并可能在以后支持与 zkSTARK 相关的基础技术。目前 zkMega 已完成了v0.2的开发。

本周四晚,由ZKValidator(https://zkvalidator.com/)发起的「Privacy on Polkadot」线上主题演讲活动,由 Patract 创始人岳利鹏、Automata Network 联合创始人 Deli Gong、Phala Network 联合创始人 Marvin Tong 以及 Manta Network 联合创始人 Shumo Chu 、zCloak Network 联合创始人张晓等 Polkadot 生态系统中针对隐私的项目共同参与。


以下为 Patract 创始人岳利鹏的分享:

01 Patract Labs: 波卡 Wasm 合约技术实验室

首先介绍一下 Patract Labs,我们是一家为波卡 Wasm 合约生态提供解决方案的技术实验室。我们希望加速智能合约行业向 Wasm 技术栈的转变,同时作为 Polkadot 和 Kusama 议会的议员,我们为社区提供基础设施级别的工具和服务支持,ZK(Zero knowledge) 就是其中很重要的一部分。

02 Patract Open Platform: 波卡 Wasm合约联盟

Patract 并不会发行自己的代币或启动自己的平行链,而是作为技术提供方,帮助整个社区的平行链去集成主要由 Parity 开发的 Wasm 合约模块 Pallet-Contracts,并且帮助整个社区更便捷地开发 Wasm DApp。所以,我们组建了 Patract Open Platform,上图是已经加入平台的成员列表,其中就包括一些专注于 ZK 相关的项目。

Patract zkMega & ZoPatract 源代码:
https://github.com/patractlabs/zkmegahttps://github.com/patractlabs/zopatract


03 背景:以太坊中的 ZK

在介绍我们如何为波卡 Wasm 合约提供 ZK 支持前,我们需要先来了解下以太坊 ZK 相关的技术架构。

2017年,以太坊通过 EIP196 和 EIP197 加入了三个预编译合约,是关于 bn256 曲线的 ADD,MUL,Pairing。它们基于 ZCash 的库,运行在以太坊的 Native 层。
开发者可以继续使用 Solidity 编写电路的验证逻辑和应用逻辑,它们运行在 EVM 虚拟机层。并且再继续开发一些链外的程序,用于生成证明等,最后才是用于跟用户交互的前端程序。

目前大部分 ZK 相关的 Layer2 项目都选择在以太坊开发,就是因为4年前集成的这3个预编译合约,其余都是社区开发的。那么我们也应该首先为波卡补充好这类基础库支持。

04 背景:Substrate 中的智能合约

Polkadot 生态的链都是基于 Substrate 框架的,这个框架与 Ethereum 的合约相比多了一层,就是基于 Wasm 的 Runtime 层。社区可以开发不同种类的合约模型,包括兼容 EVM 的 Frontier、Parity 的 Wasm 合约、Libra 的 Move 合约等。所以在 Runtime 之上才是合约层,只不过我们专注于支持 Wasm 合约,但 Native 和 Runtime 层的支持是可以和其他合约模型共用。

如果一个平行链项目拍卖完插槽后,不集成合约功能,则只能自己开发少量的 ZK 应用。而如果集成了合约功能,并且能把 Runtime 的 ZK 能力提供给上层合约开发者,就可以支持大规模的 ZK 应用,成为支持 ZK 的平台。

Native 和 Runtime 之间通过 Runtime Interface 通信,也叫 Wasm Boundry。Runtime 和 Pallet-Contracts 之间通过 Chain Extention 通信。Native 直接运行在 CPU 上,有最高的执行效率,Runtime 运行在 Wasmtime JIT 执行器上,速度会比 Native 慢3倍左右。Pallet-Contracts 运行在 Wasmi 解释器上,速度会比 Native 慢10倍左右。由于 ZK 运算的复杂度都非常高,所以越是把这些 ZK 基础库放在更底层,执行的速度越高,能够获得的 TPS 也越高。

05 设计1: Substrate 中的 zkMega(Native 版)

相比以太坊只支持一条古老的 bn256 曲线,zkMega 从一开始希望也能够支持更高效的 bls12_381 曲线,后来 Alistair 还推荐了 bls12_377,bw6_761 这两条曲线,而且是基于 Arkworks 的库开发,而不是 ZCash。另外,我们希望直接在 Native 层集成这4条曲线的 ADD,MUL,Pairing,然后一步步通过 Runtime Interface 和 Chain Extention 提供给 Wasm 合约调用。之后将我们在 Native 层的改动合并进入 Substrate。

但是后来 Web3 基金会首席科学家 Alistair 觉得可能可以集成的曲线会很多,如果每条曲线,都开3个 Runtime Interface 接口的话,那接口的数量就会很多,整个 Polkadot 也需要硬分叉才能支持这些新曲线,因为热升级只能更新基于 Wasm 的 Runtime 层。
所以更好的做法是将这些曲线更底层的公用算法分解出来,然后集成进 Native 层,这样的接口就会比较固定,社区可以任意添加上层曲线,不过详细接口还有待研究。因此,即使我们开发了 Native 版本的, Substrate 也不同意我们进行合并。

06 设计2: Substrate 中的 zkMega(Runtime 版)

如果不能改动 Native 层,我们还可以在 Runtime 内增加一个 Pallet 来集成这些曲线,只是速度会慢很多。所以我们在 Native 层和 Runtime 层做了两遍相同的工作,但 Native 版本无法用于生产环境,只是作为和 Runtime 版本的性能对比来使用。
现在 ink! 合约可以调用这些曲线了,所以 Patract 还封装了一个 ink! 合约库,放在我们的 Metis 项目中,包括更高层的 Groth16 Verification 函数和其他三个小的工具函数,更加方便开发上层应用。这些都是现有的以太坊 Layer2 合约常用的功能,之前通过昂贵的 Solidity 编写,现在我们用更加高效的 Wasm 或 ink! 合约编写,比 EVM 快100倍。

07 Benchmark 结论: Basic Units 上的 Native Vs Runtime

通过对这四条曲线的 Basic Units 进行 Benchmark,Runtime 版本至少比 Native 版本慢5倍。虽然还是比较大的差距,但还可以接受。

08 Benchmark 结论: Verification 上的 Native Vs Runtime


通过对上层的 Verification 函数进行 Benchmark,由于混杂了额外的计算,Runtime 版本对 Native 的差距缩小到了只有2倍,而且实际耗时大约是 60-170ms,仍然小于1s的出块计算时间,仍然具备实用性。在未来,我们需要联合起来研究如何为 Substrate 设计 Runtime Interface,来提升这些基础库的运行效率。

09 ZoPatract: 适用于 zkMega 和 ink! 的Off-chain 工具箱!

上图是 Patract 的 zkMega v0.1工作,在 v0.2 中,我们添加了链下的工具支持。我们移植了著名的 ZoKrates,使得它可以支持 ink! 合约和 zkMega,我们把这个项目取名为 ZoPatract,这个已经发布了。通过 ZoPatract,开发者可以进行 Compile,Setup,Compute witness,Generate Proof and Export-Verifier 等操作。原本我们 v0.3 的计划是开发一个示例的 ZKRollup 转账应用,但还没有时间。任何将来对 ZK Wasm 合约有用的,我们都会拥抱。

About Patract


Patract 为波卡 Wasm 合约生态的平行链和 DApp 开发提供解决方案。我们帮助社区平行链设计和开发链上合约模块和 Runtime 支持,并且为 DApp 开发者提供覆盖开发、测试、调试、部署、监控、数据提供和前端开发等阶段的全栈工具和服务支持。

How to join Patract


1.对于合约开发者,可以访问官网 ,熟悉测试链和工具套件。欢迎加入官方开发群:Element|Discord,或搜索“Patract 开放平台”关注 Patract微信公众号。

2.对于将要集成 Wasm 合约功能的平行链项目方,或者使用 Wasm 合约开发的 DApp 项目方,商务合作欢迎联系 [email protected]

3.对于用户,欢迎加入:Telegram|Twitter

4.对于求职者,我们在招聘区块链开发工程师、前端/全栈开发工程师、产品经理、开发者运营等岗位,可以联系 [email protected]