Verkle 树与 Merkle 树:全面解析

Merkle 树和 Verkle 树代表了区块链设计中两代密码学数据结构。

New to Nervos? Start here.

Explore the guide
Verkle 树与 Merkle 树:全面解析

每条区块链都面临同一个核心约束:如何在不要求每个参与者存储完整状态(state)的情况下,证明数据存在且有效。

多年来,Merkle 树(Merkle trees)一直是标准解决办法。它将数据组织成基于哈希的树形结构,让节点能够使用紧凑证明验证数据是否被收录以及是否正确,而无需下载整个数据集。

但这一方式难以顺畅扩展。状态规模增长时,Merkle 证明也随之增大,带来的带宽和验证开销在规模扩大后越来越显著。Verkle 树(Verkle trees)正是为应对这一局限而出现,它提供小得多的证明,让无状态客户端架构更具可行性。

理解区块链中的 Merkle 树

Merkle 树是一种密码学数据结构,专门用于以最小开销组织和验证大型数据集。概念上,可以将它看作哈希值的分层组合;哈希值是由数据确定性地产生的“指纹”(fingerprint)。它具有一项关键性质:底层数据即使发生最微小的变化,也会产生完全不同的输出,让篡改立即可被发现。

树的底部是叶节点(leaf nodes),每个节点代表一份独立数据的哈希,例如一笔交易或一个账户状态。叶节点的哈希值两两组合,再次进行哈希,形成父节点(parent nodes)。这一聚合过程逐层递归重复,直到整个结构最终汇聚成顶部的单个哈希值。

顶端的值称为 Merkle 根(root),是对整个数据集的简洁承诺。任何参与者只需一份小证明,就能验证单个数据元素的完整性,而不必访问完整数据集。关键在于,树是递归构建的,所以数据中任何位置的修改都会向上传导,改变 Merkle 根,以极少的计算开销暴露不一致。

Verkle 树与 Merkle 树:全面解析

Merkle 树为何对区块链重要

Merkle 树在区块链验证中发挥关键作用,因为它让节点无需下载整条区块链,就能确认特定数据存在。

大型图书馆的目录系统是一个有用的类比。要确认某本书存在,不必逐个书架查找,而可以沿一连串索引,直接找到书的位置。同样,Merkle 树让节点只需检查树的一小部分,就能验证某笔交易,而不必检查整个数据集。

这种验证所需的数据称为 Merkle 证明(Merkle proof),包含重建从特定交易到 Merkle 根路径所需的哈希值。由于证明只含少量哈希值,大幅减少了网络需要传输的数据量。这让轻客户端(lightweight clients)或简化支付验证(Simplified Payment Verification,SPV)节点能够以极少存储运行,也是 Merkle 树广泛应用于区块链系统的原因。

例如,比特币使用 Merkle 树组织每个区块内的交易,让节点无需保存完整交易历史,也能高效验证交易。以太坊则使用更复杂的 Merkle Patricia 树(Merkle Patricia Trie)存储账户余额、智能合约存储和交易收据,确保所有节点都能验证网络的全局状态。

Merkle 证明的局限

Merkle 树一直是区块链验证中稳健的基础工具,但它诞生时,状态规模较小,网络要求也较低。现代区块链不断扩张,累积数百万个账户、合约和存储槽,其局限也越来越明显。

Merkle 证明由一串兄弟节点哈希值组成,用来重建从叶节点到根的路径。随着状态增长、树变深,路径变长,证明也相应增大。在大型系统中,尤其是一笔交易访问多个状态项时,证明可能膨胀至数十 KB,带来不可忽视的带宽和验证开销。

对无状态客户端设计而言,这成为结构性瓶颈:节点依赖外部提供的证明,而不是在本地维护完整状态副本。证明越大,带宽需求越高、验证越慢、区块传播越差。这些限制对以太坊等高吞吐量平台尤为突出。

Merkle 树同时验证多个值时也不够高效。每个元素都需要自己的认证路径,虽然路径可能重叠,但标准构造并未高效压缩这些重叠部分。结果,证明中存在冗余数据,进一步增大体积,加剧可扩展性难题。

Verkle 树简介

Verkle 树是一种较新的数据结构,旨在解决 Merkle 树的扩展局限,尤其是区块链状态增长时证明体积增加的问题。与 Merkle 树一样,它让系统能够对大型数据集作出承诺,并为特定值生成收录或正确性证明。区别在于证明的构造方式。

Merkle 树依赖递归哈希:证明中的每一步,都需要披露从叶节点到根的路径上的兄弟节点哈希值。Verkle 树用向量承诺(vector commitments) 替代这一机制。这是一种更先进的密码学原语,能以单个紧凑结构对整组值作出承诺。Verkle 证明无需沿哈希路径证明成员关系,而是使用简洁的数学论证,展示某个值属于已承诺的向量。

Verkle 树与 Merkle 树:全面解析

Verkle 树的结构。来源:ethereum.org

可以从信息密度的角度理解二者的差别。在 Merkle 树中,验证单个值需要披露一串中间哈希,每个都是路径的一部分。在 Verkle 树中,一个承诺就能表示大量值,证明可以直接引用这一承诺,所需辅助数据少得多。结果是证明显著缩小,也更能适应规模庞大、结构复杂的状态。

Verkle 树如何缩小证明

在 Verkle 树中,每个内部节点同时对大量子节点作出承诺,而不是像 Merkle 树那样两两组合。较高的分支因子(branching factor)与向量承诺结合,使验证者即使面对扩展到数百万条目的数据集,也能通过紧凑证明确认某个值存在。以每次访问所需字节数衡量,这带来了证明大小的阶跃式改善,使 Verkle 树在大型状态系统中高效得多。

结构上,Verkle 树仍是分层树:叶节点表示单条数据,根承诺概括整个数据集。关键区别在底层密码学。Verkle 树不依赖反复哈希,而使用代数构造,尤其是定义在椭圆曲线上的多项式承诺(polynomial commitments),来编码和验证数据。这将负担从带宽转移到了计算。

还是以证明图书馆内有某本书为例。Merkle 树就像要求你展示一连串索引:书所在的书架、书架所在的区域、区域所在的楼层,一直追溯到整栋楼。每一步都会增加你需要携带的信息。

Verkle 树则更像一份统一、权威的图书馆目录,以密码学方式对楼内每本书作出承诺。要证明一本书存在,无需展示所有中间位置构成的完整链条,只需引用目录,并提供与它绑定的紧凑证明。目录已经同时“知道”所有书,因此无论图书馆多大,需要展示的信息量都很少。

底层数学虽然更复杂,效果却很直观:每次查询需要传输和验证的数据大幅减少。

这些操作的计算量虽然高于哈希,但现代硬件完全能够胜任,而且还有很大的优化空间。实践中,对于受网络条件限制的区块链系统,缩小证明、降低带宽消耗带来的整体收益,大于尽量减少本地计算的收益。

Verkle 树的其他优势

Verkle 树的一项主要优势,是支持无状态客户端架构。在无状态模型中,节点使用外部提供的状态数据及其证明来验证区块,无需维护全局状态的完整副本。Verkle 证明足够紧凑,可以随交易一起传递,而不会过度增加区块大小或网络带宽负担。

这会直接影响去中心化。较低的硬件和存储要求,降低了运行验证节点的门槛,让更多人能够参与,并随着时间推移增强网络韧性。

Verkle 树处理多值验证也更高效。它可以将多次状态查询聚合成一个紧凑证明,无需为每个访问值分别生成证明。这消除了冗余数据,对于复杂智能合约执行中常见的、一笔交易访问许多存储槽的工作负载,效率显著提高。进一步的效果是区块更小、传播更快,以及负载下的性能更可预测。

以太坊正迈向 Verkle 树

最突出的实际采用工作,正在以太坊路线图中推进。转向 Verkle 树能够带来一系列结构改善:更小的状态证明、更低的带宽需求、更快的区块传播,以及更低的节点资源要求。

这一转变与以太坊长期推动无状态验证密切相关。在这种模型中,验证者不在本地存储完整状态,而由每个区块携带验证自身所需的数据和证明。虽然概念简单,但只有证明足够紧凑,这种方式才具有实际可行性。

在基于 Merkle 树的设计中,证明大小难以良好扩展,尤其是交易访问多个存储槽时,使无状态验证效率低下。Verkle 树通过大幅缩小证明,解决了这一限制,让无状态验证能够在现实网络条件下运行。

结语

Merkle 树和 Verkle 树代表了区块链设计中两代密码学数据结构。Merkle 树以简单、可靠和稳健著称。对证明效率和无状态验证要求不那么高的应用,它仍是很好的选择。

Verkle 树则针对大型、长期运行的区块链网络所固有的可扩展性挑战。通过生成紧凑证明、支持无状态客户端运行,以及支持聚合状态验证,Verkle 树为更高效、更易参与、更去中心化的区块链架构提供了一条路径。

Share
CKB

CKBuilders:CKB 上的新一代区块链创作者——第二辑

一年过去,CKBuilders 在探索深度和参与广度上都有了显著成长。本文将继续讲述那些不断突破边界的建设者的故事

30 min read

支付通道网络如何支持多种资产

了解 Taproot Assets、RGB 和 Fiber 如何支持多资产支付通道,以及 Fiber 的跨链枢纽如何连接比特币闪电网络。

12 min read

实现即时加密货币支付的五种闪电网络替代方案

走出只支持比特币的支付层:了解为稳定币、智能合约和自主 AI 智能体打造的即时加密货币支付基础设施。

9 min read
See all articles
↑