众所周知,随着时间的流逝,区块链上将会有越来越多的交易,这也将导致区块链的数据容量不断增加。由于区块链的冗余备份,所有节点都需要保存全部数据文件。此时,如果用户希望自己创建一个用于DApp开发的区块链节点,但又不想参与共识,那么实际上,对于该用户而言,同步大量数据是一回事。这是一项耗时的任务,并且浪费了相关的硬盘资源。因此,专员想与您讨论区块链中完整节点和轻节点的概念。专员的思维角度实际上主要来自以太坊的账户模型。今天,我们还以太坊为例来说明这一问题。 。以以太坊为例。在讨论完整节点和轻节点之前,专员将首先告诉您有关以太坊的区块头的信息。以太坊块的存储主要分为两个部分,即Header和Body。正文实际上是相对简单的,只是一个交易列表以及有关Block叔叔的信息,但实际上更复杂的是Block Header。如下图所示,块头中将有很多数据,例如父块。块散列,时间戳,挖掘难度值和其他相关参数,但是专员认为最重要的是“三棵树”。在以太坊中。块头中对应的一个是StateRoot,TransactionRoot和ReceiptRoot的三个哈希值。在以太坊中存储块数据的核心数据结构是什么?以太坊使用一种称为Merkle-Patricia Trie(MPT)的核心数据结构来存储块数据。最简单的理解是倒置的树形结构。每个节点可以具有几个子节点。在底部,即叶节点,将数据分为几个小数据块,然后计算相应的哈希。但是从较高的层次来看,默克尔树不直接计算根哈希,而是将两个相邻节点的哈希合并为一个字符串,然后计算该字符串的哈希,这样每两个哈希就可以得到一个“子散列”,并且该自散列是其父节点的散列值。因此,仍然通过类推以相同的方式计算哈希值,并且可以获得更多数量的节点的新级别的哈希。最后,必须形成一棵倒置的树。在树的根部,这一代只剩下一个根。对其进行哈希处理,我们称其为Merkle Root。在以太坊中,相应地优化了Merkle树,并在Merkle树的基础上构造了前缀树。因此,可以通过前缀树快速查询相关的数据信息,但是专员今天不会详细介绍。有兴趣的学生可以私下学习。因此,通过Merkle树,我们实际上可以做几件事:1.快速重新哈希处理:实际上,当树节点发生变化时,可以根据上一台计算机的结果计算部分值来计算出一个新的树节点。默克尔·根(Merkle Root)。 2.轻节点扩展:使用Merkle树,我们可以在公共链环境中扩展轻节点。轻型节点的特征在于,它仅需要存储“块头”,而不是存储完整的事务列表和其他信息。 Merkle证明用于确定交易是否在当前区块链交易列表中。实际上,以这种方式,以太坊的光节点可以在诸如小容量个人PC的终端设备上运行。让我们来谈谈以太坊的根节点哈希值分别在StateRoot,TxHashRoot和ReceiptHashRoot中,这是从以下三个MPT的计算结果中获取的:stateTrie,txTrie和receiveTrie。在这种情况下,例如,在块同步过程中,我们可以通过比较接收到的TxHash来确认事务列表是否已同步且完整,并使用StateRoot确定节点之间的状态是否一致。因此,在以太坊中,所谓的完整节点实际上是一个同步所有区块链数据的节点,包括各种区块主体,交易清单和其他相关信息。而且还因为节点的所有数据都已保存,所以我们不需要依靠中介来验证数据。所谓的以太坊轻节点(轻客户端)每当一个块出现在网络上(而不是完整状态)时下载块头,并发送客户端要求的特定状态的Merkle证明。要求。同时,在以太坊轻型节点中使用分布式哈希表来跟踪前缀节点,而不是直接使用LevelDB进行直接存储。实际上,在文章末尾,无论是轻节点还是完整节点,都有其价值和意义。我们可以选择深