主页 > 军事 > hth华体会-无状态以太坊:二进制状态树实验

hth华体会-无状态以太坊:二进制状态树实验

hth华体会 军事 2021年08月05日
本文摘要:本文使用的数据和脚本是https://github.com/mand rigin/ether eum-main net-bin-tries-data中的“无状态以太坊”是什么? 如果您已经了解“无状态以太网”和“数据块目击数据”,可以跳过此部分。为了继续执行交易和检查块,以太网网络的节点必须理解整个块链的当前状态——,即所有账户和合同的余额和存储数据。这些数据一般存储在DB (数据库文件)中,如果不用于检查,就不能读取到默克尔树中。 无状态以太网客户端的工作思路有点不同。

hth华体会

本文使用的数据和脚本是https://github.com/mand rigin/ether eum-main net-bin-tries-data中的“无状态以太坊”是什么? 如果您已经了解“无状态以太网”和“数据块目击数据”,可以跳过此部分。为了继续执行交易和检查块,以太网网络的节点必须理解整个块链的当前状态——,即所有账户和合同的余额和存储数据。这些数据一般存储在DB (数据库文件)中,如果不用于检查,就不能读取到默克尔树中。

无状态以太网客户端的工作思路有点不同。顾名思义,无状态客户端不用于硬盘DB,而是继续执行块(客户端也可能保持原来的状态)。

忽略,无状态客户端依赖于“块witteness”——是类似的数据,不会与相应的块一起传播。通过共享此数据,客户端可以修复默克尔子树(表示某些状态)。此子树可用于继续执行块中的所有事务处理。

这篇文章可以写关于无状态客户端的更熟悉的描述: 3359 blog.ether eum.org/2019/12/30/eth1x-files-state-of-stateless现在有效性, 一种方法是将太郎的默克尔根(即,用于响应太郎的默克尔根)从十六进制变为二进制。这是本文想探究的问题。为什么用于二进制树根默克尔根的优良特性大多只需将省略的所有非空路径替换为适当的散列值即可。

那么用于十六进制默克尔树根有什么不好呢? 假设整个树都充满了数据(即树的节点没有为零的子节点)。要验证块,只需要默克尔树根节点的一小部分数据。

那么,只要把其他路径的数据置换成散列值就可以了(可以检查这个孩子的树根)。但是,每次再次添加哈希值时,块的目击数据都不会太大。如果改成二进制默克尔树根,这个问题会减轻——。

由于默克尔树中的每个节点都只有两个子节点,因此必须至少用散列值替换一个字节的点。(换句话说,我们的粒度是16进制的,不是4比特而是1比特,所以可以很快切断默克尔树根的路径。

这样做可能会大大减少自己眼睛的数据规模。我们再举一个例子来说明。

假设继续执行一个块不会影响一个帐户: 3B路径上的Acc1 (二进制为0011 1011 )。整个树都满了(树节点不为零的子节点)。二进制状态树根和十六进制状态树根的比较-二进制状态树根看起来有点可怕的只有二进制树根,但没有画出散列值的节点来代替十六进制树根。数一下:为了建立二进制状态的树根,必须在自己的眼睛数据中包含8个哈希值、7个分支节点和1个帐户节点。

也就是说,自己眼睛的数据有16个要素。为了建立十六进制状态的树根,需要一个分支节点和一个帐户节点,但需要30个散列值。

hth华体会

也就是说有32个元素。因此,假设散列值和分支节点在块目击数据中所占的空间是相同的大小(但是,散列值所占的空间更大),则网卓新闻网在我们的例子中,二进制树所需要的目击数据大小只有十六进制的一半 看起来不俗气。那么,理论上是这样的。我们想想实际情况吧。

让我们来看看以太网主网络的数据。开始实验,最重要的是我们怎么告诉自己做的区块目击数据很简单? 测试方法是我们使用块的目击数据分解默克尔的子树,在该树中运营适当块内的所有交易,验证结果是否与我们熟悉的完全一致。如果交易能顺利继续(Gas充足,轨迹完全相同(they have the same traces )等),可以推测这是足够的。


本文关键词:hth,hth华体会,华,体会,无,状态,以太,坊,二进制,树,实验

本文来源:hth华体会-www.ruijia-china.com

标签: hth   实验   二进制       状态   体会     以太