好好学习,天天向上

  • 后端开发
    • Rust
  • 区块链
    • BTC
    • Layer2
  • 经济投资
  • 文学创作
    • 哲学思考
    • 随笔
HhxxTtxs
人生到处知何似,应似飞鸿踏雪泥。
  1. 首页
  2. 区块链
  3. L2
  4. 正文

基于zkrollup L2的典型实现

23 6 月, 2024 395点热度 1人点赞 0条评论
内容 隐藏
1 前言
2 zkrollup L2的通用实现
3 主要组件
3.1 L1链上合约
3.2 L2 node(定序器)
3.3 L2合约
3.4 L2证明器(zk prover)
3.5 L1与L2的交互
4 其他
5 总结

前言

“可扩展性、去中心化、安全性”被称为区块链的不可能三角,以太坊强调去中心化与安全性,这使得以太坊处理交易的速率非常慢。目前已知的BTC处理交易的TPS大约为7,以太坊的TPS约为27。较慢的速率导致在交易量暴增的情况下,会出现网络拥堵与gas费较高的情况。

以太坊的效率与gas费较高成了亟需解决的问题,开发者也提出了各种各样的方案,包括:闪电网络、侧链、plasama、L2等。其中以L2中的zk rollup最引人关注(也有另一种基于op rollup),其中更是有被称为zk四大天王----polygon、starkware、scroll、zksync,每一个项目都拿了巨额融资。

zk rollup的底层技术都是零知识证明,这里简单介绍下:零知识证明(Zero-Knowledge Proof,简称ZKP)是一种加密协议,它允许一方(证明者)向另一方(验证者)证明某个陈述是真实的,而无需透露任何有关该陈述的其他信息。这种证明的关键特性是“零知识”,即验证者在验证过程中不会获得任何额外的知识,除了证明者确实知道某个秘密或某个陈述是真的。零知识证明有两个主要特性:隐私和压缩。隐私是指零知识证明可以隐藏一些信息并证明某个陈述是正确的,压缩是指通过零知识生成的证明将远远小于证明的陈述逻辑的大小。

在L2中,零知识的作用是L2需要通过零知识证明向L1上的合约证明发生在L2上面的批量交易是正确的、合法的。这里就使用了零知识的压缩特性,当然隐私性在这里也是有用的。

下面就来介绍基于zk rollup L2的典型实现。

zkrollup L2的通用实现

L2的实现原理就是将大量应直接发生在以太坊上的交易,在L2进行“汇总”并通过单个 ZK 有效性证明向以太坊网络证明这些交易发生的有效性。通过“打包”的方式大大降低gas费,同时提升以太坊的TVL。

我们接下来以一个用户使用流程的角度来说明整个zkrollup的技术实现原理:

  1. 用户在使用L2网络之前,首先需要在以太坊主网通过调用L2部署的合约进行质押,质押的ETH将被放进合约的“保险箱”。
  2. 质押成功后,该账户会同步到L2网络,之后用户就可以在L2进行操作了
  3. 用户在L2进行交易, L2对应的节点将执行用户提交的交易,并将多个交易信息打包给到zk prover。prover根据交易信息输出证明与对应的状态转换hash
  4. 状态转换hash与证明会同步到L1对应的智能合约中,智能合约通过校验提交的证明是否合法来决定是否更新状态hash。
  5. 如果用户需要取走自己的ETH,需要在L2发起申请,交易会同步到L1,并在L1上根据其余额从“保险箱”中转账给具体用户对应的余额。

这里比较重要的一点是:如果用户需要在L2上进行交易,需要在L1上进行质押,质押成功后,对应的账户+余额会同步到L2网络,之后用户就可以在L2上进行交易。可以类比下中心化的交易所:你存钱到交易所,然后在交易所内进行交易,其实都是交易交易所展示在你账户上的一个数字,加加减减,而真正的用户的资产是交易所统一管理的,只有在进行提现的时候,你的账户上的余额才会具体“转换”为具体的资产。L2也是同样的道理,在L1上通过合约锁定用户资产,“展示”在L2上面一个数字,用户在L2上面进行数字的加加减减,批量处理后将最终加减的结果同步到L1。当用户发起提现时,就根据加减的数字余额,将相等的L1上真实的余额转账给L1上对应账户的用户。

图示:

主要组件

上面是大致的L2交易流程的介绍,下面再介绍下L2具体的模块。

L1链上合约

如前文所讲,链上合约的主要作用包括如下几项:

  1. 接受用户质押,并同步用户账号、资产到L2.
  2. 用户的保险箱。保存有所有质押用户的资产。
  3. 保存状态hash,一般是所有用户状态(可以理解为余额)的merkle root。这个merkle root代表该时刻所有用户的资产状态。
  4. 验证L2提交的证明,并更新对应的状态hash。

L2 node(定序器)

将L2也想象为一条链,那么定序器就类似于一个节点,不过该节点大多数情况下是中心化的,也就是说节点只有这一个,一般由L2对应团队来维护。

它接受用户的合约部署、交易,并进行校验,执行。这里需要注意的是:L1同步的账户与余额,即是同步到定序器,定序器根据这些账号与状态来对用户在L2上发起的交易进行校验与执行。

因为定序器是中心化的,可能会出现定序器作恶的情况,例如可能会出现:某用户提交的交易被定序器恶意拒绝的情况。所以目前L2开发者也在不断推出去中心化的定序器。

定序器“收集”执行一批交易后,会将合法的交易打包给到证明器去做证明。

L2合约

既然类比L2是一条链,那么链上就需要跑合约(这些合约使L1同步下来的账户有更加丝滑的体验)。因为以太坊是老大哥,所以一般的L2一般都是兼容以太坊的EVM,当然也有绕一圈的:L2的合约是自己写的,但是可以将对应的solidity代码转译为可以在自己L2上跑的字节码。例如starkware,L2有自己的智能合约语言cairo,但是也尽量在兼容以太坊的智能合约能够无缝衔接过来。

L2证明器(zk prover)

证明器接收到定序器提交的合法批量交易及老的状态root,会对齐进行证明,证明的逻辑是:

老的状态root通过执行这些合法的交易,会转化到新的状态root。

那么只要生成的证明被L1合约校验通过,那么就说明状态转化是正确的,即这些交易的执行是正确的。

polygon这里采用的是组合证明的方式,不仅会将多批的交易信息证明合并为一个,同时上链前会对最后的证明使用snark证明再包一层,最大限度减小证明体积的大小。

L1与L2的交互

该模块主要负责L1与L2之间交互的功能,主要包括:

  1. L1用户的质押同步到L2
  2. L2生成的证明同步到L1

其他

因为L2是中心化的,所以存在L2跑路的风险,目前主要靠下面几种方式来进行避免:

  1. 代码完全开源
  2. L1合约设置“逃生舱”功能,当L2挂了,用户可以使用“逃生舱”接口,把自己的钱取出来
  3. 更加去中心化。因为zk的性能原因,L2目前还无法做到完全的去中心化,不过开发者已经在努力逐渐将L2尽可能的去中心化,例如:定序器的去中心化、数据可用性委员会等。

总结

L2简单理解为:用户在L1上“存钱”,然后在L2上面给你展示个余额,用户在L2上使用这个余额进行交易。最终L2将批量的余额更新的证明同步到L1,并更新状态hash。

目前zk rollup的L2发展百花齐放,之前零知识被称为“月亮数学”,随着生态的不断完善、代码开源、学习资料越来越多,使zk的技术门槛在逐渐降低,之后的发展会越来越卷,不仅卷zk证明生成的速度,而且也会卷去中心化、DAO等,不过这对于以太坊的发展及用户的体验无疑是一个好消息。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: layer2 加密货币 区块链
最后更新:23 6 月, 2024

hhxxttxs

五年服务端开发,现专职区块链,偏零知识Layer2工程方向

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

Archives

  • 2026 年 2 月
  • 2025 年 9 月
  • 2025 年 8 月
  • 2025 年 7 月
  • 2025 年 1 月
  • 2024 年 9 月
  • 2024 年 8 月
  • 2024 年 7 月
  • 2024 年 6 月
  • 2024 年 5 月
  • 2024 年 4 月
  • 2024 年 3 月

Categories

  • BTC
  • cuda
  • L2
  • rust
  • 其他
  • 区块链
  • 后端开发
  • 哲学思考
  • 文学创作
  • 算法
  • 经济投资
  • 链开发
  • 零知识

COPYRIGHT © 2024 好好学习,天天向上. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang