跳转到内容

zkSync Era — Matter Labs 的 zkEVM L2

待复核

zkSync Era 是一条跑在以太坊外面的”高速辅道”——你的交易在它这里快速便宜地处理,但每隔一阵会用一份零知识证明回主网交差,证明”这一万笔交易我没造假”。日常类比:像快递公司分拣中心。包裹不一个个直接进总仓,先在分拣中心批量打包,最后只把”这批 1000 件已核对”的清单 + 一张防伪封条塞进总仓。

Era 不只是又一个 Rollup。它有三个特点:

  • EVM 兼容:你的 Solidity 合约 99% 不用改就能搬上去
  • 自研 LLVM 编译器:把 Solidity/Yul/Vyper 编成自家 zkEVM 字节码(不是直接复用 EVM)
  • 原生账户抽象:底层一律是合约账户——用户侧仍可像普通钱包(EOA)一样用私钥签名,但协议不区分”私钥账户 vs 合约账户”,因此可用 USDC 付 gas、社交登录、任意签名算法

第三点最特别——它不是装个插件实现的,而是协议层就这么设计的。

不理解 Era,下面这些事都解释不通:

  • 为什么 2023 年之后冒出”用社交账号登录的钱包”——常依赖某条带原生或强账户抽象的 L2(Era、Starknet 等)在撑
  • 为什么以太坊主网拥堵但 dApp 依然能扩——因为大部分活动转移到 Era / Arbitrum / Optimism 这层
  • 为什么 Matter Labs 要自己造 LLVM 后端——EVM 字节码不适合 zk 证明(指令开销不一样),需要重设计指令集
  • 为什么有人能”用 USDC 付 gas”——账户抽象 + Paymaster 的产物;L1 协议层做不到,只能靠 EIP-4337 这类应用层补丁

zkSync Era 把”L2 高速 + L1 验证”拆成 三件事

  1. L2 执行:你发交易给 zkSync 的 sequencer(排序器),它在 zkEVM 里跑合约,更新自己内部状态。这步快、便宜、和 L1 无关。类比:分拣中心当场盖章入库。

  2. 证明生成:sequencer 累积一批交易后,调 Boojum 证明器把”这批交易的状态变化”压成一个 PLONK 证明。这步慢(GPU 算几分钟)但只算一次。类比:每装满一货车才贴防伪封条。

  3. L1 验证 + 提交:证明 + 状态差异(state diff)发到 L1 上的 zkSync 合约,L1 用约 100k gas 验证证明,接受状态。类比:总仓收到货车,扫一下封条就放行,不挨个验。

账户抽象贯穿三件事:因为所有账户都是合约,第 1 步执行就允许任意签名/付费逻辑,不像 L1 卡死在 ECDSA + ETH 付费。

用熟悉的 Hardhat,加 @matterlabs/hardhat-zksync(还需 zksync-ethers,部署用其 Deployer):

hardhat.config.ts
import "@matterlabs/hardhat-zksync";
export default {
zksolc: { version: "1.5.0" },
networks: {
zkSyncEra: { url: "https://mainnet.era.zksync.io", ethNetwork: "mainnet", zksync: true }
},
solidity: "0.8.24"
};

逐部分解释

  • zksolc 是 Era 自家的 LLVM 后端,是普通 solc——它把 Solidity 编成 zkEVM 字节码而不是 EVM
  • zksync: true 触发 hardhat 走 zk 部署流程(用 paymaster 或 ETH 付 gas)
  • 合约代码本身(ERC20)一字不改,但底层字节码完全不同

案例 2:写一个 Paymaster 让用户用 USDC 付 gas

Section titled “案例 2:写一个 Paymaster 让用户用 USDC 付 gas”
// 教学简化:省略完整 IPaymaster 接口与 gas 计价,勿照抄上主网
contract USDCPaymaster {
function validateAndPayForPaymasterTransaction(
bytes32, bytes32, Transaction calldata _tx
) external returns (bytes4 magic, bytes memory) {
require(IERC20(USDC).transferFrom(_tx.from, address(this), priceOf(_tx)), "USDC fail");
magic = PAYMASTER_VALIDATION_SUCCESS_MAGIC;
}
}

三步走:① 用户签名时把 Paymaster 地址塞进交易;② Era 协议先调它的 validateAndPay...;③ 通过后由 Paymaster 替用户付 ETH gas。L1 协议层做不到同等原生流程——只能靠 EIP-4337 应用层补丁,且默认仍要用户有 ETH。

账户抽象意味着账户合约可以装任何验证逻辑。关键改动只有一处:用自定义验证函数替换 ECDSA(Argent X 风格思路):

function validateTransaction(...) external {
// 不用 ECDSA!而是验证一份 OAuth JWT 签名
require(verifyJWT(tx.signature, googlePublicKey), "JWT invalid");
}

钱包账户的”私钥”实际上是用户的 Google 账号。L1 协议把签名校验写死为 ECDSA,这类验证写不进默认账户模型

  1. Era 不是 100% EVM 等价:少数 opcode 行为不同(CREATE2 地址算法、selfdestruct 语义、部分 precompile),从 L1 直接搬合约可能出 subtle bug——上线前必须在 Era testnet 全套跑过

  2. 底层无传统 EOA,msg.sender 直觉易失效:用户侧像 EOA,但地址全是合约;钓鱼检测、白名单若”按地址类型分流”常误判——应改按合约接口判断

  3. Paymaster 是双刃剑:dApp 替用户垫 gas 听着美好,但 validateAndPayForPaymasterTransaction 必须严格限制谁能用、用多少,否则任何人都能让你帮他付 gas,被薅到破产

  4. L1 finality 不瞬时:交易在 L2 上执行完只是”软确认”,要等 commit → prove → execute 三阶段共约 1-24 小时才在 L1 终结,跨链桥取钱必须等完整流程

适用

  • 高频小额交易(DeFi swap、NFT mint、游戏物品交易)——L2 便宜
  • 需要无 gas 体验或代币付 gas 的 dApp——账户抽象 + Paymaster 直接给
  • 想做”Web2 风格登录”的钱包——社交账号、生物识别都能塞进账户合约
  • 已有 Solidity 项目想下沉到 L2,团队不想换语言

不适用

  • 需要瞬时 L1 finality(如某些与 L1 合约强耦合的清算)——等 24 小时受不了
  • 用了大量 inline assembly / 罕见 opcode 的合约——编译可能失败或行为偏差
  • 极端低频但单笔金额巨大的资金(如金库托管)——直接 L1 更安全
  • 需要跨多条 L2 频繁互通的场景——目前 L2 之间转账还是经 L1 中转
  • 2019 年:Matter Labs 启动 zkSync 1.0,只支持 ETH/ERC20 转账,不能跑智能合约——zk 证明生成成本撑不起 EVM
  • 2022 年:zkSync 2.0 测试网上线,首个真正的 zkEVM——开发者第一次能在 zk-rollup 上写 Solidity 合约
  • 2023 年 3 月:主网正式发布,更名 zkSync Era,标志 zkEVM 进入生产阶段
  • 2023 年 8 月:Boojum 证明系统替换早期 PLONK 实现,prover 速度提升约 10 倍,证明成本降到原来的 1/3
  • 2024-2025:账户抽象、Paymaster、跨链桥(zkBridge / Hyperchain)逐步成熟,Era 成为以太坊生态主流 L2 之一
  1. L2 的核心交换是”L1 安全 ↔ 自家执行环境”——你接受”主网最终验证”的安全保证,换来便宜快速的执行
  2. zkEVM 不是简单包装 EVM——指令集、gas 模型、字节码都为 zk 证明重新设计,因此需要自家 LLVM 编译器
  3. 账户抽象是体验拐点:没有它你只有”程序员钱包”,有它才能做出”我妈也会用的钱包”
  4. 协议层做正确的事 vs 应用层补救:Era 在协议层就把账户抽象做成默认,比 L1 上事后造 EIP-4337 干净得多
  • polygon-zkevm —— 同样的 zkEVM L2 路线,但选择字节码级兼容而非源码级
  • scroll —— Type 2 zkEVM,比 Era 更接近 L1 行为但牺牲一些性能
  • arbitrum —— 另一种 L2 路线(Optimistic Rollup):欺诈证明而非有效性证明,对照学习 zk vs OP
  • optimism —— Optimistic Rollup 代表,Era 的”对立面”路线
  • argent-x —— 主打账户抽象 + 社交恢复的钱包,与 Era 的账户抽象同源思路
  • llvm —— Era 的 zksolc 编译器后端基础,复用 LLVM 优化框架
  • uniswap-v3 —— 在 Era 主网部署的代表性 DeFi 应用之一
  • bunz-bulletproofs-2018 —— Bulletproofs 2018:不用可信仪式的短范围证明
  • aptos-core —— Aptos — Move 系高性能 L1
  • argent-x —— Argent X — 让账户本身就是一个合约的 Starknet 钱包