这篇文章深入探讨了以太坊的交易树的概念及其在网络可扩展性中的作用。文章详细介绍了全节点与轻节点的工作原理,解释了如何通过Merkle树优化交易验证过程,从而减少轻节点所需的资源。整体结构清晰,配有多幅图片,帮助读者理解复杂的技术细节。
一个以太坊节点存储两种类型的数据:区块数据和状态数据。状态数据包括世界状态树、账户存储树、交易回执树和交易树。每个区块都有一个交易树。交易树将区块中的交易组织成树形结构,根哈希存储在区块头中(如下所示)。但是为什么需要它?
以太坊全节点(灵感来源于 Lucas Saldanha 的 博客)
随着以太坊网络中交易和智能合约数量的增长,区块链的大小正在迅速扩大。一个全节点需要约 700GB,而一个档案节点需要约 11TB。这使得任何小型设备参与网络几乎变得不可能。当你想进行一个交易时,你唯一的选择是运行一个全客户端或者依赖于一个中心化服务。
最终目标是区块链应该对所有人都可访问。必须有一种更简单的方法来运行以太坊节点,而不需要存储大量数据。轻节点是对此的响应,它可以在任何小型设备上运行,比如智能手机或树莓派。
轻客户端是不包含整个区块链数据的节点。相反,它们只下载区块头的链。然而,它们无法参与区块验证,但它们可以以类似于全节点的方式访问区块链。
以太坊轻节点
假设你想在手机应用(一个轻节点)中检查你最近的交易是否已被确认,然后再发起另一个交易。由于轻节点只有区块头,它们不知道该交易是否被包含在最新的区块中,因此需要向全节点请求。
区块链的基本假设是,不能信任任何节点。如果是这样,轻节点如何确定全节点不是恶意的?它可以请求证据。即使全节点提供了额外的信息,轻节点可以对什么进行验证呢?因为轻节点有区块头(假设大多数节点是诚实的),这是轻节点唯一可以依赖的数据。
让我们看一个简单的例子来看看这可能是如何运作的。
当一个区块被创建时,所有的交易都可以被哈希以生成一个交易根哈希。然后将根哈希保存于区块头中。
交易树(简单树)
当轻节点想确认某个交易是否存在于一个区块中时,它们可以向全节点请求该区块的完整交易列表。轻节点然后可以将所有交易一起哈希并与头部的根哈希进行比较,以确认交易的存在。
轻节点交易验证 — 简化
虽然上述方法效果很好,但轻节点每次想确认交易时必须向全节点请求整个交易列表以验证哈希。考虑到轻节点是资源有限的小型设备,这可能很快变得资源密集,尤其是区块可能有数百笔交易的情况下。
那么我们该如何解决这个问题呢?Merkle 树。
Merkle 树通过反复对其节点对进行哈希来计算根哈希。上述交易列表的 Merkle 树看起来像这样:
交易树(Merkle 树)
好吧,它是如何促进验证的?如果你仔细观察,你会注意到为了证明根哈希,全节点并不需要返回每个交易哈希,而只需要轻节点验证证明所需的哈希。如果有不清楚的地方,我希望下面的图片能更好地解释。
轻节点交易验证 — 简化
Merkle 树的实现要求全节点只发送三个哈希,而不是之前实现中的十个。考虑一个有 1000 笔交易的区块。Merkle 证明只需请求 10 个 (log2(n))哈希,从而实现快速交易验证。
我希望这篇文章能让你更好地理解交易树如何促进网络的可扩展性。我将在未来的帖子中拆解交易回执树。如果你想在那篇文章发布时获得通知,请一定关注。如果你有任何问题或评论,请随时联系。
- 原文链接: medium.com/coinmonks/eth...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!