以太坊1.x:解析无状态客户端:lol2020全球总决赛下注

木工雕刻机 | 2021-01-08

Eth 1.x研究的起源、得失因素及可能的几种解决方案的详细摘要见Eth 1。在前面关于x的文章中查看了。在前面的句子末尾,我们提到了“无状态型”以太的概念,本文将对无状态型客户端进行进一步的说明。

无状态是Eth 1.x研究的新方向,因此将展开比较分析,以便更好地理解未来可能面临的挑战和可能性。如果读者对更多的理解感兴趣,我会得到与可能资源相关的链接。什么是状态?为了说明无状态以太坊,首先要解释状态的概念。当我们提到“状态”时,通常指“事务的状态”。

以太最初的“状态”描述了所有账户和余额的当前状态,以及在EVM中分发和运营的所有智能合同的集体历史。链中最后确认的每个块只有一个状态,该状态由网络上的所有参与者共同确认。

每当将新块添加到链中时,状态都会发生变化和修改。在Eth 1.x研究的背景下,我们不仅要说状态是什么,还要告诉协议(如黄书中所定义)和大部分客户端构建(如geth、parity、trinity、besu等)中的表现方式。什么是Trie?以太使用的数据结构称为Merkle Patricia Trie。有趣的是,“trie”最初是在“retrieval”一词中搜索的,但大多数人将其发音为“try”,以区别于“tree”。

回到正题,您应该理解,对于MPT数据结构,trie的一端有所有描述状态(值节点)的特定数据片段。数据可以是特定帐户的馀额,也可以是存储在智能合同中的变量(例如,ERC-20认证的总供应)。

Trie的中间是通过散列运算连接所有值的分支节点。分支节点是包含子节点散列的阵列(array),每个分支节点又经过散列,属于父节点的阵列。这一系列哈希最终不会到达trie另一端的状态根节点。

lol2020全球总决赛下注首页

在上面的修正图中,您可以看到一些值和获取这些值的路径。例如,为了获得V-2,我们经历了1,3,3,4的路径。

同样,V-3通过路径3,2,3,3提供。请注意,在这种情况下,路径长度始终为4个字符,只有一个路径可用于提供值。这种结构具有确定性和可加密测试的最重要特征。

分解状态根的唯一方法是计算状态中的每个单独数据段。这样就可以通过确认根哈希和以前的哈希(Merkle证明)出色地证明两种状态完全相同。

相反,我们不能用完全相同的6个哈希创造两个不同的状态,任何改变不同值状态的尝试都会导致不同状态的根哈希。以太引入新的节点类型,扩展节点(extension nodes)和叶节点(leaf nodes),提高效率,优化树形结构。将路径的一部分编码到节点上,trie更不灵活。

在这种优化的MPT结构中,每个节点必须在多个前一个节点共享的路径传输部分或数值(如果适用,还可以在路径的其他部分后缀)之间自由选择。虽然只有相同的数据和组织,但该树结构必须只有9个节点,而不是18个节点。

lol2020全球总决赛下注

也许看起来更有效率,但后来显然这并不理想。我们将在下一节讨论理由。

要提供状态的特定部分(例如,帐户的当前ETH馀额),必须从状态根开始,沿着trie路径从一个节点移动到另一个节点,直到超过所需的值。在每个节点上,路径中的文字用于请求下一个目标节点,看起来像用作导航系统散列数据结构的观察杆。

在以太网实际使用的版本中,路径是64位(256位)长的地址散列。值为RLP编码数据[1]。 分支节点是包含17个元素的数组,其中16个是每个可能的十六进制字符,另一个是值。叶节点和扩展节点由两个元素组成:部分路径和下一个子节点的值或散列。

为了了解更多的细节,可以使用网络以太网研讨会的维基页面[2],或者如果你不想特别学习,这句话很有趣的python directory运动[3](不出所料,这句话已经过时了)。用于在数据库中写入Trie。在这里,我们必须警告trie结构只是一个抽象的概念。

这是把整个太防状态包装成统一结构的方法。该结构必须构建在客户端的代码中并存储在磁盘上(或在全球数千个磁盘上生产)。也就是说,它使用多维树结构,并映射到只解释[键,值]对的常规数据库。

在除Turbo-geth之外的大多数以太网端客户端上,MPT是通过为每个节点创建不同的[密钥、值]对来构建的。其中值是节点本身,键是该节点的散列。|lol2020全球总决赛下注。

本文来源:首页-www.game3117.com