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 Trie | Verkle 树 |
|---|---|---|
| 证明类型 | 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 等主要客户端均在实现