一文读懂 Layer2 方案 zkSync 基本原理

活动预告

imToken 邀请到了 zkSync 创始人 Alex链闻研究总监潘致雄明晚 19:30 和大家一起聊聊 Layer2,扫描文末二维码参加活动。

一文读懂 Layer2 方案 zkSync 基本原理_第1张图片

以太坊的理想之一是普惠金融,但由于现在几乎所有的交易都在 Layer1 处理,导致网络严重拥堵,矿工费居高不下,不少用户因此被拦在门外。

所以社区希望借助 Layer2 降低矿工费,吸引更多用户参与进来。在《给区块链扩容难吗?从比特币到以太坊》中,我们介绍了 Layer2 中被以太坊创始人 Vitalik 看好的 zkRollup 方案。

从中长期来看,随着 ZK-SNARK 技术的改进,ZK Rollup 最终将在所有场景中胜出。- Vitalik Buterin

imToken 2.9.0 已经深度集成了 zkSync 方案,今天这篇文章我们就来具体介绍下 zkSync 的原理和架构,下文将把 Layer1 和 Layer2 简写为 L1 和 L2。

zkSync 概览

zkSync 是基于 ZK Rollup 架构的低成本扩容协议,主要通过零知识证明和数据可用性保障用户资产安全,该项目目前的产品路线图规划如下:

一文读懂 Layer2 方案 zkSync 基本原理_第2张图片

zkSync 正处于第一阶段:支付场景,如其 Slogan 所述:

zkSync: secure, scalable crypto payments

zkSync:安全可拓展的加密资产支付方案

工作原理

1. 用户签署交易并提交给验证人;

2. 验证人将数千笔交易 Rollup 到一个区块中,并向主网的智能合约提交新状态的默克尔根和加密证明(SNARK),证明新状态是基于旧状态的正确更新;

3. 除了证明以外,每笔交易的数据都会使用廉价的 Calldata 在主网发布,以便任何人在任何时刻都可以重建状态;

4. 证明和状态均由智能合约验证,从而验证区块中所有交易的有效性和区块数据的可用性。

特点

  • 支持 ETH 和 ERC20 转账,L2 毫秒级确认,L1 10 分钟内获得最终确认;

  • 主网级别的安全性,毋需依赖第三方;

  • 零成本创建账户;

  • 极低的交易手续费(低至 $0.001);

  • 支持任意有效的以太坊地址(包括智能合约地址);

  • 支持任意代币作为手续费支付;

  • 15 分钟以内将资金从 L2 提现到 L1(OP Rollup 至少要 1~2 周);

  • 支持多重签名;

  • 支持智能合约(即将到来)。

优势

  • 验证人不可能破坏状态和窃取资金;

  • 验证人即使停止工作,用户也可以借助数据可用性随时取回资金;

  • 用户不必时刻监控 Layer2 网络以防欺诈。

zkSync 架构

一文读懂 Layer2 方案 zkSync 基本原理_第3张图片

架构说明

  • 主要架构分为链上和链下,也就是所谓的 L1 和 L2;

  • L1 的核心为智能合约,主要负责存款、提款、交易验证;

  • L2 分为 L1 交互(Watcher、Sender)、L2 状态维护(Mempool、Block Proposer、State Keeper、Block Commiter)、零知识证明系统。

zkSync 架构运作模式

存款

  1. 当用户想要存款时,调用 L1 zkSync 智能合约存储资金;

  2. Watcher 监控 L1 存款交易,当交易发生时则会放入 Mempool 中;

  3. Block Proposer 处理 Mempool 交易打包,并提交 State Keeper 更新账本。

转账

  1. 当用户想要使用 L2 低成本快速转账时,调用 zkSync API 提交转账交易;

  2. 交易同样会按照流程流转至  Mempool > Block Proposer > State Keeper;

  3. 最终 State Keeper 通知 Block Commiter 收集生成零知识证明所需信息,调用 Plonk Proving System 生成零知识证明后,借助 Sender 将存款和转账等交易数据,以及将对应的零知识证明提交到 L1 的 zkSync 智能合约验证;

  4. 等待 L1 交易确认后,Watcher 会通知 L2 更新交易状态为最终确认。

1 - 存款

L1

  1. 用户从 L1 调用 zkSync 合约充值 ETH / ERC20 资产;

  2. 用户可以设定充值地址和资产;

  3. 非代币白名单内的资产,可能会出现合约 Revert。

L2

  1. 等待主网 10 个区块确认后,zkSync 会将资产入账;

  2. 如果充值地址此前未创建,那么将会自动为该地址创建账户。

2 - Signer

一文读懂 Layer2 方案 zkSync 基本原理_第4张图片

1. 创建 zkSync 账户

  1. 场景:L1 存款或者 L2 转账都会自动创建账户;

  2. 注:zkSync 的创建账户类似 EOS/Cosmos,账户会有唯一 ID 维护 ETH 地址、zkSync Signer 公钥、Nonce、Balance 等关系。

2. 生成 zkSync Signer

  1. 场景:每次调用 Transfer / Withdraw 时派生 Signer 用于授权交易;

  2. 步骤

    1. ETH 钱包进行 personalSign 签名

    2. 使用「personalSign 签名」作为种子生成 zkSync Signer

3. 设置签名公钥

  1. 场景:每次 Transfer / Withdraw 检查是否设置公钥,如果没有设置则提示用户生成 zkSync Signer 完成签名公钥设置;

  2. 步骤

    1. 生成:调用 PersonalSign 生成 zkSync Signer

    2. 检查:每次 Transfer / Withdraw 检查是否设置公钥,若有则进入步骤 iv

    3. 设置:调用 zkSync SDK - setSigningKey 设置 Signer 公钥

    4. Next:继续 Transfer / Withdraw

  3. 说明:

    1. zkSync Signer 专用于 L2 交易签名,但收款地址依然采用以太坊地址,底层签名则是采用 zkSync Signer;

    2. 用户除了首次设置公钥之外,其余场景均对 Signer 没有感知。

3 - 转账

一文读懂 Layer2 方案 zkSync 基本原理_第5张图片

转账机制基本跟以太坊一样,以下罗列部分特点:

1. 收款地址:

  1. 任意有效以太坊地址皆可转账

  2. 但转给不存在的账户需要更多的手续费用于创建账户

2. 代币

  1. 理论上支持任意 ETH/ERC20

  2. 但目前依赖代币白名单

3. 手续费

  1. 支持任意代币支付手续费,比如 Dai

  2. 手续费计价:

    1. 链上(gas 费)

      验证 SNARK (~1.5k gas) + 交易状态 (~0.4k gas)

    2. 链下(存储和证明费)

      ~ 0.001 USD/笔

4. 交易状态

  1. Committed

    1. 时间:秒级;

    2. L2 交易发送成功的状态,交易区块虽然还没有获得 L1 最终确认,但不影响用户继续发起下一笔交易。

  2. Verified

    1. 时间:~10 分钟

    2. 当交易区块 SNARK 证明被 L1 智能合约验证,L2 交易即获得最终性。 

4 - 提款

一文读懂 Layer2 方案 zkSync 基本原理_第6张图片

目前 zkSync 有 3 种提款至以太坊 L1 钱包的方式:

1. Withdraw

  1. 类型:L2 交易;

  2. 时间:~10 分钟 / ~4 小时(由用户选择的挡速决定);

  3. 场景:当你拥有账户的 Signer 密钥即可使用。

2. ForcedExit

  1. 类型:L2 交易;

  2. 时间:不确定;

  3. 场景:当将资金转入智能合约 / 交易所等特殊地址(无法拥有对应私钥),为了解决无主账户(无法设置 Signer)的问题,zkSync 提供一份人工表单登记处理,帮助用户提现资产。

3. FullExit

  1. 类型:L1 交易;

  2. 时间:1 周;

  3. 场景:当遭遇 zkSync 网络不可信,验证人不作为等情况,用户可以选择向 L1 智能合约提交退出证明,将资金提款至 L1。

如何体验 zkSync 呢

imToken 2.9.0 已经深度集成了 zkSync,如果你想上手体验 zkSync 的完整流程,可以点击视频????查看。

-  活动报名  -

明晚 19:30,我们邀请到 zkSync 创始人 Alex 和链闻研究总监潘致雄,和大家聊聊 Layer2 能否解决以太坊拥堵问题?zkSync 是 Layer2 腾飞的引爆点吗?zkSync 会如何考虑 Native Token 机制和发放计划?扫描海报二维码即可报名参加活动。

一文读懂 Layer2 方案 zkSync 基本原理_第7张图片

你可能感兴趣的:(区块链,比特币,分布式,人工智能,java)