zkSync 2.0:首个测试网版本上线

介绍

克服了最困难的技术挑战之后,我们进入了这项工作的冲刺阶段:在兼容 EVM 的环境中部署智能合约。zkSync 推出 zkSync 2.0 首个测试网版本:用户已经可以使用区块浏览器查看 zkSync 2.0 的交易活动。在本文中,我们将深入解释每个关键组件,公布进度更新以及下一个版本的计划。

ZKSYNC 2.0 测试网浏览器:

https://zksync2-alpha.zkscan.io/

关键成就

在密码学方面,zkEVM 的指令集已经确定下来,并且两种实现都已经完成:在电路中和在执行环境中。

在编译器方面,用 Solidity 和 Zinc 编写的智能合约现在可以编译到 zkEVM 字节码中。

在核心基础设施方面,全节点集成已完成,并且能够成功地部署和执行已编译的智能合约。

虽然 zkEVM 和 2.0 的核心基础设施已经准备好向公众公开,但是该版本的编译器还需要更多工作进行完善,以应对所有极端情况。为了提供更加全面的开发者体验,我们决定在该编译器 100% 可靠之后,将同时开放对 zkEVM、编译器和核心 SDK 的访问。

比较 zkSync 2.0 和以太坊

两者看起来大部分相同,以下几点是比较重要的区别:

智能合约

zkSync 2.0 支持以太坊上的大部分操作码。然而,有以下这些例外:

1. 这次的测试网版本不支持 ADDMOD、SMOD、MULMOD、EXP 和 CREATE2 操作码,但是未来的版本会支持。

2. 我们将暂时不支持 KECCAK256 操作码,而是通过自动调用另一个抗碰撞的哈希函数来替代它的所有调用。KECCAK256 之后将作为预编译引入。

3. 我们决定不再包含 SELFDESTRUCT 操作码,因为以太坊正计划将其移除。

4. 我们可以移除对完整 256 位 XOR/AND/OR 操作码的支持,因为这些操作码只存在于那些用于位屏蔽的已编译的 solidity 代码中。这可以由编译器使用其他操作码来完成。

Gas

在 zkSync 2.0 中,有一个不同概念的 gas。交易费价格将根据当前 L1 gas 费和生成零知识证明 (ZKP) 的成本而波动。智能合约的调用将有一个最大的 zkEVM 步骤和存储写入参数。

Web3 API

下一个版本将包含我们 Web3 API 实现,它将与以太坊文档所定义的 Web3 标准兼容。事件将开箱即用,并且所有服务都可以轻松整合。

zkSync 包含 L1 没有的特性,比如已验证和已敲定区块的概念。因此,还会有其他方法让开发者更精确地控制数据。Web3 客户端代码将接收与以太坊相同的数据,但可以通过 zksync_ 名称空间请求特定的信息。

因为 zkSync 有多种交易类型,并且使用 EIP712 签名,所以 eth_sendRawTransaction 数据的格式与 L1 不同。然而,编码与以太坊 ABI 相对应,所以支持它并不困难。

对交易进行签名

zkSync 2.0 中的交易可以通过两种方式进行授权 (除了优先级队列机制):

1. 用户可以通过对一个 EIP712 信息签名,从而用他们普通的以太坊钱包 (如 Metamask 或者任意的 WalletConnect 钱包) 对交易进行签名。

2. 任何账户都可以设置一个公钥来创建我们的内部 Schnorr 签名来对交易进行签名。这允许基于智能合约的钱包与 zkSync 2.0 进行交互,而无需额外的成本发送 L1 的信息。

存储效率提升

每个区块只能对存储槽覆写一次。这意味着,如果多个用户与单个 AMM 合约交互,那么该 AMM 合约的存储槽只会被覆写一次。这允许排序者稍后向用户退还单次写入的共享成本。

预编译

“预编译”机制是在计划中的,但将在稍后发布。我们计划首先支持 keccak256、sha256 哈希和 ECDSA 恢复原语。此外,我们会根据需求和复杂性考虑包含其他预编译,例如 Blake2f 轮函数 (以当前形式在以太坊中几乎无法使用)。

进一步的限制

zkSync 2.0的第一次迭代可能会增加一个额外的限制,即每笔交易只能调用 32 次智能合约,直到可以实现恰当的记账机制。

执行跟踪将有硬限制,但它将与以太坊区块大小目前的限制相当,不应影响大多数。

可能会有更多的限制,但我们的目标是在最终版本中将这些限制尽可能减少到最低限度。

深入了解 zkSync 2.0 的架构

你可能听说过“区块链的不可能三角”,但当谈到扩容以太坊时,还有第4个因素:可编程性。所有当前的扩容解决方案都牺牲了一些安全性、去中心化和可编程性来实现可扩展性。zkSync 2.0 的设计结合了下列两大技术突破,旨在最大化实现上面说到的四个特性:

1. zkEVM:为兼容 EVM 的 zkRollup 提供支持的引擎,这是同时提供 L1 安全性以及支持 solidity 智能合约的解决方案。

2. zkPorter:一个链下数据可用性系统,其可扩展性比 rollups 高出两个数量级。

由于 zkEVM 和 zkPorter 是可互操作以及可组合的,zkSync 2.0 显著优于所有其他扩容解决方案。

目前的共识是:Eth2数据分片 将在 2022年底 上线,在不牺牲去中心化的前提下提供更大的数据可用层。结合了 Eth2 数据分片的 zkRollup 技术是 zkSync 的最终目标,在不牺牲 4 个因素中任意一个的前提下达到 10 万以上的 TPS。

状态树

zkSync 2.0 状态树覆盖了以太坊全部的 160 位地址空间。每个帐户将存在于 zkRollup 部分或 zkPorter 部分的状态中。zkRollup 和 zkPorter 帐户完全相同,除了一点不同:获取数据可用性的地方不同。zkRollup 交易数据通过数据调用发布到以太坊主网中;而 zkPorter 的交易数据发布到 zkSync Guardian 网络中,其中,zkSync 代币持有者能够参与该网络的 PoS 机制。

选择在哪里发布数据,是在成本和安全性两者间做出权衡。zkPorter 的交易费比 rollup 的交易费要便宜很多,但是用户的资金可能会被冻结。然而,zkRollup 和 zkPorter 账户的有效性是由零知识证明和以太坊来提供保证的。换句话说,zkPorter中的资金只能被冻结,不能被窃取。

zkRollup 和 zkPorter 帐户的互操作性和可组合性给了每个用户成为 zkSync 一流公民的机会。假设,Uniswap 部署在 zkRollup 端,用户可以通过 zkPorter 账户访问,并以最低的手续费进行 swap。zkSync 2.0 是一个专门为整个金融领域用户设计的系统。

密码学

我们的虚拟机,通常被称为 zkEVM,它并不是完成 1:1 复刻 EVM 的。但是,zkEVM 旨在能够运行 99% 用 Solidity 编写的合约,并且在遇到回滚和异常时也能维持同样的行为。同时,zkEVM 能够有效率地在一个电路中生成零知识证明。

zkEVM 的实现不需要我们对此前的证明系统做出重大的变动;我们继续使用带有自定义门和查询表的 PLONK  (通常被称为 UltraPLONK) 和以太坊的 BN-254 曲线。这是有利的,因为这个证明系统已经过实战测试 (自 2020 年 6月以来,zkSync 1.0 和其他项目就开始使用这个证明系统)。

经过几个月的努力,zkEVM 的指令集已完成,并在电路和执行环境中实现。

这里有一个重要的区别:电路和执行环境中的实现是分开的,用于不同的目的。电路的工作是生成执行跟踪的证明并提供证人,但这个过程十分缓慢。另一方面,执行环境是 zkEVM 在 rust 中的直接实现,效率高、速度快。如果我们在生成证明和执行的过程中都依赖于电路,那么敲定交易需要几个小时。而生成证明和简单执行的分离使得 zkSync 上的交易能够即时结算。

接下来,我们的工作将专注于将 zkEVM 和编译器结合在一起,并和递归结合在一起:区块之间的递归允许我们为 N 个区块发布一个证明;而区块内的递归聚合了区块不同逻辑部分的子证明。这是简单的部分!自 2020 年 6 月以来,zkSync 1.0 主网上已经使用了区块之间的递归聚合证明。更多关于区块内递归和我们的 zkEVM 如何工作的信息,请观看视频解释。

编译器

我们同时研究两种针对 zkEVM 的编译器前端:Yul 和 Zinc。Yul 是一种 Solidity 的中间表示,可以为不同的后端编译成字节码。Zinc 是我们基于 rust 的语言,用于智能合约和通用零知识证明电路。

因为编译器是使用 LLVM 框架构建的,所以可以认为它有一个前端、Yul→LLVM IR 和后端、LLVM IR→zkEVM 字节码。LLVM 的采用带来了几个主要的优点:

1. LLVM 优化框架是不匹配的:它从 LLVM IR 中生成最有效的 zkEVM 字节码。

2. 有了新版的 Solidity 或 Zinc,编译器前端将处理所有更改,而 LLVM 将使我们无需更改编译器后端。

3. 在未来,如果开发者想基于原生的 Rust 或 Javascript 编写智能合约,只需为该语言构建编译器前端,智能合约就可以在 zkSync 中开箱即用。

编译器的安全性对我们来说是至关重要的,并且已经经过了多个套件的测试:

1. Zinc 和 Yul 编译器中的词法、语法和语义测试。

2. 我们自己针对 Zinc 和 Solidity 的集成测试,它贯穿整个智能合约生命周期:从解析源代码到合约部署,再到在 zkSync 上执行交易。

3. 从 Solidity 存储库集成的广泛测试套件,适合我们的集成测试工具。

每个套件已经包含了几千个测试,我们将至少增加一个数量级。

我们的两编译器已经成功部署并用两种语言执行了简单的智能合约。但是仍然有更多的优化需要完成,一些复杂的LLVM IR 语句需要转换为 zkEVM 字节码。因此,我们决定等到我们的编译器运行状态更强健再发布。

完成编译器的工作之后,我们将集中精力完善 Zinc 的功能,然后构建 Rust 编译器前端来允许使用原生 Rust 编写智能合约。

核心基础设施

zkSync 2.0 核心基础设施由几个关键部分组成:

全节点

1. 利用虚拟机的 zkEVM 字节码的预电路执行器环境

2. 状态在交易发送后的几秒内可用

3. 过滤掉明显无效的交易 (例如,没有足够的资金进行交易),这些交易可能会使区块膨胀

4. 在内存池中执行交易并生成区块。

证明者

1. 接收区块的见证者并生成零知识证明,

2. 用于并行证明生成的证明者接口

3. 自定义的证明者自动缩放器,可根据需要创建和终止证明者机器。

交互器

1. 用来监测以及与以太坊 L1 交互的工具,

2. 基于代币价格、ZKP 生成成本以及 L1 gas 费来计算交易费用。

Paranoid监视器

Prometheus、弹性、哨兵、正常运行时间,几个单独的事件通知系统以及自定义的安全运行检查服务。

zkSync 2.0 的核心基础设施功能齐全,已经集成了 zkEVM 执行器。

zkSync 2.0:首个测试网版本上线

扫一扫手机访问

zkSync 2.0:首个测试网版本上线

发表评论