跳转到内容

Verkle 树

Verkle 树

本页内容正在整理中,欢迎贡献

概述

Verkle 树是以太坊计划用来替换现有 Merkle Patricia Trie(MPT) 的新型数据结构,它能生成极小的状态证明(Witness),是实现**无状态客户端(Stateless Clients)**的关键技术基础。无状态客户端不需要存储完整的链上状态,将大幅降低运行以太坊节点的硬件门槛。

主要内容

现有 Merkle Patricia Trie 的问题

Merkle Patricia Trie 状态证明大小:
- 证明一个账户状态需要包含从根到叶的完整路径
- 一笔典型交易涉及多个账户/存储槽
- 证明大小:约 几十 KB ~ 几 MB
问题:
- 证明太大,轻节点很难验证
- 导致"有状态客户端"成为刚需
- 运行全节点需要存储 ~1 TB 的状态

Verkle 树的优势

Verkle 树状态证明大小:
- 同样的访问模式,证明大小约 200 字节
- 比 MPT 证明小 10-1000 倍
原因:
- Verkle 树使用向量承诺(KZG 或 Pedersen),
而非 Merkle 树的哈希链
- 可以证明多个键值同时存在,无需重复路径

Merkle 树 vs Verkle 树

特性Merkle Patricia TrieVerkle 树
证明类型Merkle 路径(哈希链)多项式承诺证明
单次证明大小~几十 KB~200 字节
批量证明大小线性增长近乎常数
构建/更新速度较快稍慢(承诺计算)
密码学假设哈希安全椭圆曲线离散对数
量子安全性较强较弱(需后续迁移)

无状态客户端

Verkle 树是无状态客户端的核心前提:

有状态客户端(当前):
节点需要:完整状态树(~几百 GB)
验证区块:从本地状态树中查找相关数据
无状态客户端(Verkle 后):
节点不需要:存储任何状态
验证区块:使用区块附带的 Witness(状态证明)
Witness 大小:~1-2 MB/区块(可接受)

无状态客户端的好处:

  • 任何人都可以用普通笔记本/手机运行完整验证节点
  • 大幅降低去中心化门槛
  • 同步速度极快(无需下载历史状态)

Verkle 树结构

Verkle 树特点:
- 更宽的分叉因子:256(vs MPT 的 16)
- 叶节点存储 32 字节的值
- 内部节点:256 个子节点的向量承诺
- 整棵树的根:单个 32 字节承诺
新的地址空间(Address Space Extension):
账户余额、nonce、代码、存储统一放入同一棵树
使用新的键值格式,便于批量证明

状态迁移挑战

从 MPT 迁移到 Verkle 树是以太坊历史上最复杂的状态迁移:

  • 增量迁移:新数据写入 Verkle 树,旧数据保留 MPT,逐渐迁移
  • 覆盖迁移:通过”转换区块”一次性完成所有状态转换(对共识要求极高)
  • 向后兼容:需要同时支持旧 MPT 证明验证(历史存档)

对开发者的影响

Verkle 树升级对大多数 Solidity 开发者透明,但有以下注意:

  • eth_getProof:返回的证明格式将变化(从 MPT 路径到 Verkle 证明)
  • 历史 MPT 证明:需要从专门的存档节点获取
  • Gas 变化:存储访问的 Gas 成本可能调整(基于 Verkle 树访问成本)

开发进展

  • 研究阶段:Verkle 树方案已确定(基于 Pedersen 承诺)
  • 测试网:Kaustinen(Verkle 测试网)已多次运行
  • 规划部署:Osaka 升级(原称 Cancun 后继任者,约 2026 年)包含 Verkle 迁移
  • 客户端适配:Geth、Nethermind、Besu 等主要客户端均在实现

深入阅读