木星链 木星链
Ctrl+D收藏木星链

BIN:观点 | 无状态以太坊:二进制状态树实验

作者:

时间:1900/1/1 0:00:00

作者:?IgorMandrigin

翻译:?阿剑

来源:以太坊爱好者

什么是“无状态以太坊”?

如果您已经了解什么是“无状态以太坊”以及“区块见证数据”,可以跳过这一段。

为执行交易及验证区块,以太坊网络的节点需要了解整条区块链的当前状态——也就是所有账户和合约的余额和存储数据。这些数据一般来说是存储在DB里面的,在需要用于验证时才会加载到一棵默克尔树中。

无状态以太坊客户端的工作思路则稍有区别。顾名思义,无状态客户端就是不使用硬盘DB来执行区块。相反,无状态客户端依赖于“区块见证数据”——就是一段特殊的数据,它会跟相应的区块一起传播;拥有了这段数据,客户端就可以重建出一个默克尔子树,该分支足可用于执行该区块中的所有交易。

你可以在这篇文章中读到关于无状态客户端的更深入的描述:https://blog.ethereum.org/2019/12/30/eth1x-files-state-of-stateless-ethereum/

当然咯,需要传播区块见证数据就意味着无状态客户端的网络要求要比普通节点更高。

-见证数据大小折线图-

现在人们已经提出了很多降低见证数据规模的思路:使用有效性/计算完整性证明、加入更多的压缩手段,等等。其中一种办法是将以太坊的默克尔树从十六进制转为二进制。

这就是本文想要探讨的问题。

为什么要使用二进制树

默克尔树的一大优良特性是,验证树根值正确与否并不要求你具有整棵树所有的数据。只需把所有省略的非空路径替代为相应的哈希值就可以可。

观点:对于加密货币市场来说,与比特币挂钩的ETF可能比集中式交易所更糟糕:金色财经报道,批评者认为,对于加密货币市场来说,与比特币挂钩的ETF可能比集中式交易所更糟糕。因为持有者永远无法利用比特币最重要的一个特点:无需信任任何人就能控制自己的资金。这并非空谈。在加拿大等市场,这些投资工具的潜力已经显现。例如,Purpose比特币ETF在推出后的短短两天内就募集了超过4亿美元的管理资产。加密货币是否是一种资产类别已不再是一个问题。机构投资者已经开始行动,为以加密货币ETF为起点的金融格局的地震式转变奠定了基础。[2023/8/14 16:24:29]

那么使用十六进制默克尔树有什么不好呢?

设想整棵树都已填满数据。要验证一个区块,我们只需要一小部分默克尔树节点的数据。那么,我们只需把其他路径的数据替代为哈希值就可以了。

但是,每多加入一条哈希值,区块见证数据就会大一些。

如果我们转变为二进制默克尔树,这个问题就可以得到缓解——因为默克尔树上的每个节点都只有两个子节点,所以至多只有一个字节点需要被替换为哈希值。

这样做也许能大幅降低见证数据的规模。

我们再举例说明一下。

假设执行某个区块只会影响一个账户:3B路径下的Acc1。整棵树是全满的。

观点:BTC的飙升可能归因于“过去一个月的波动性有限”和“市场正在寻找生命迹象”:金色财经报道,加密数据公司Kaiko的研究分析师Riyad Carey称,BTC的飙升可能归因于“过去一个月的波动性有限”和“市场正在寻找生命迹象”。[2022/10/26 16:39:28]

-二进制状态树与十六进制状态树的比较-

如果说二进制状态树看起来有点吓人,那只是因为二进制树我画全了,但没有把十六进制树的所有代之以哈希值的节点都画出来。

来数个数:

为创建出一棵二进制状态树,见证数据需要包含8个哈希值,7个分支节点和1个账户节点。也就是见证数据中有16个元素。

为创建出一棵十六进制状态树,我们只需1个分支节点,1个账户节点,但需要30个哈希值。也就是有32个元素。

所以,假设哈希值和分支节点在区块见证数据中的所占的空间是一样大的,在我们的例子中,使用二进制树所需的见证数据大小只有十六进制下的一半。看起来不错。

那么,理论上就是这样。

我们来看看实际情况是如何。我们直接拿以太坊主网的数据来看看吧。

开始实验

先说最紧要的:我们怎么知道自己构建出来的区块见证数据是有用的呢?

测试方法如下:我们使用区块见证数据来生成一棵默克尔子树,在这棵树上运行相应区块中的所有交易,然后校验结果是否与我们所知的一致。只要交易都能成功执行,等等),我们就可以断定这个见证是足够充分的。

-测试方法:1.执行区块;2.从状态树中抽取出见证数据;3.使用见证数据构造出一棵子树;4.禁用DB访问、使用子树来执行区块(具体可见

观点:加密货币市场或将继续增长:鉴于Coinbase的业务与主要加密货币的表现密切相关,如果市场出现明显回落,营收增长势头有可能逆转。前Coinbase高管Hunter Merghart表示,加密货币公司最终需要找到分散收入来源的方法。目前市场仍处于投资阶段,整个加密市场将继续增长。加密交易平台Luno首席执行官Swanepoel表示,比特币如果出现回调,可能会确立一个新的基准水平,并在基准线上继续增长。[2021/4/14 20:20:12]

github)-

其次,我们需要一些基准数据。因此,我们也使用500万到850万高度的区块、在十六进制默克尔树模式下生成了见证数据,并将见证数据大小的统计数据存在一个超级大的csv文件中。

我们尝试的第一步是执行完一个区块后就组装出一棵十六进制树,然后将它转为二进制树,再从这棵二进制树中提取出见证数据。

这种方法有几个好处:易于实现,而且验证十六进制-二进制的转换也很简单。

不过,我们遇到了两个问题,而且其中一个还不小。

第一个,正如我们上面证明的那样,比起二进制树,十六进制树包含更多的账户节点,如果我们先生成十六进制树再转换,得到的结果就跟在二进制树模式下直接生成所得到的见证数据不一样。

为什么呢?

因为十六进制树数据总是以1/2字节的速度增长,而二进制树总是以1比特的速度增长,因此键的长度可以是奇数位。

实际上,见证数据中还包含一些额外的扩展节点,它们还要稍微大一点。不过即便对内容较多的区块,体现在见证数据大小上的差别也非常之小。

关键的是性能。随着树的规模增长,转换的速度会越来越慢。

用更具体的数字来说明一下:在我们的GoogleComputeEngine虚拟机上,处理速度约为每秒0.16个区块,也就是每分钟处理小于10个区块,处理100万个区块要超过3个月!

观点:区块链技术与农业经济融合 解决农村经济发展不平衡问题:美中经济与文化发展基金会执行会长吴限最近指出,区块链技术在今年被纳入新基建的范畴,在产业落地方面被寄予厚望,若将区块链技术与农业经济融合发展,构建可信的农业数字化营销平台,可以赋能农业经济转型发展,将优化资源配置、改造传统农业经济的生产方式与商业模式,形成区域竞争新优势与新动力、解决农村经济发展不平衡等问题。(界面)[2020/7/26]

所以,我们决定采取更复杂的办法,开发出一个原生使用二进制默克尔树的实验性分支。也就是说,我们要把turbo-geth代码库例地所有十六进制状态树全部替换为二进制树,然后区块就是基于二进制树来执行的了。

这种办法的不利之处在于,部分哈希值的校验只能被忽略掉。

但主要的验证机制还是一样的:我们需要能够使用二进制树来执行区块、从见证数据中创建出默克尔子树。

再来谈谈key。

为简化起见,我们对key的编码方式是非常低效的:1bytepernibble;一个key的每一比特就要占用1字节。这样做大大简化了代码层面的改变,但区块见证数据中的”key“部分会是我们使用bitset时候的8倍大。

因此,在进一步分析中,我会假设key的编码方式是最优的。

Hexvs.Bin:结果

我的分析分为两段,总共分析了以太坊主网上的200万个区块。

区块高度500万到650万

我在这个github库里面提供了使用python脚本来重复这一实验的命令行:

https://github.com/mandrigin/ethereum-mainnet-bin-tries-data

首先我们来分析一下数据集。

pythonpercentile.pyhex-witness-raw.csvbin-stats-5m-6.5m.csv50000006500000adjust

观点:股市回调风险犹在,比特币作为对冲工具或迎来利好:比特币在1万美元的技术阻力位下方谨慎交易了一个多月。但在防御性投资组合中,再度买入避险资产的乐观情绪,可能在2020年推高比特币价格。纽约梅隆资产管理公司(BNY Mellon Asset Management)的Shamik Dhar在向英国《金融时报》发表的最新声明中表达了看涨的观点。

这位首席经济学家表示,由于一系列相互矛盾的指标,很多投资者并不买盘当前的股市反弹。因此,对冲基金购买对冲资产是有意义的。他提议,“考虑到目前的风险平衡,建议为投资组合购买主权债券、黄金和其他对冲工具,以为投资组合提供保险”。(Bitcoinist)[2020/6/8]

-

一个箱型图,箱体显示上四分位到下四分位之间的数据,左右延伸出去的线条显示上1%到下1%之间的数据

-百分比分析-

现在我们可以生成一些很酷的图表了!

pythonxy-scatter-plot.pyhex-witness-raw.csvbin-stats-5m-6.5m.csv50000006500000adjust

-XY散点图(横轴为Hex下见证数据大小,纵轴为Bin下见证数据大小)-

可以看出,二进制见证数据的大小总是优于十六进制树下的见证数据。

我们再加入另一个参数,用二进制见证数据大小除以十六进制见证数据大小,看看我们得到了怎样的提升。

pythonsize-improvements-plot.pyhex-witness-raw.csvbin-stats-5m-6.5m.csv50000006500000adjust

-二进制见证数据的大小/十六进制见证数据的大小-

为更好地理解这张图标,我们也输出了平均值和百分位值。

平均值=0.51

P95=0.58

P99=0.61

在实际场景中这意味着什么?

对于99%的区块,见证数据的大小可以降低至少39%。

对于95%的区块,见证数据的大小可以降低至少42%。

平均来说,见证数据可节省49%。

我们也要考虑见证数据大小的绝对值。为使数据变得可读,我们每1024个区块取滑动平均值。

pythonabsolute-values-plot.pyhex-witness-raw.csvbin-stats-5m-6.5m.csv50000006500000adjust

-依时间顺序绘制的见证数据大小折线图,纵轴单位为MB-

再来看看最新区块的情况。

区块高度800万到850万

pythonpercentile.pyhex-witness-raw.csvbin-stats-8m-9m.csv80000008500000adjust

-箱型图,箱表示上下四分位以内的数据,线表示上下1%以内的数据-

-800万号到850万号区块的百分位分析-

还有XY散点图。

pythonxy-scatter-plot.pyhex-witness-raw.csvbin-stats-8m-9m.csv80000008500000adjust

还有规模上的节约。

pythonsize-improvements-plot.pyhex-witness-raw.csvbin-stats-8m-9m.csv80000008500000adjust

-XY散点图(横轴为Hex下见证数据大小,纵轴为Bin下见证数据大小)-

平均值=0.53

P95=0.61

P99=0.66

最后,再来看看见证数据的绝对大小。

pythonabsolute-values-plot.pyhex-witness-raw.csvbin-stats-8m-9m.csv80000008500000adjust

-依时间顺序绘制的见证数据大小折线图,纵轴单位为MB-

结论

在使用以太坊主网数据做过测试以后,我们可以看到,切换为二进制树模式可以大幅提升生成见证数据的效率。

另一个结论是,这种提升并没有理论上那么显著。原因可能在于主网区块的实际数据。

也许,通过分析一些例外情况,我们可以知道更多优化见证数据规模的办法。

试着使用别的原始数据来跑跑GitHub中的脚本吧:https://github.com/mandrigin/ethereum-mainnet-bin-tries-data

标签:BINHEXSTATATBinaryX (old)HEX币怎么样Bitcoin InstantTAT币

莱特币价格热门资讯
区块链:专访陈伟钢:银保监会严禁银行为炒币提供支付渠道

来源:新京报记者:张姝欣随着区块链上升至国家战略,金融机构开始加大在区块链领域的投入。而与此同时,监管也在收紧,除了央行发布风险提示外,银保监会处非联办近期提示防范以“虚拟货币”“区块链”名义非.

1900/1/1 0:00:00
EOS:EOS跌落神坛:百万TPS未兑现,“VOICE”沉默

出品/CoinVoice文?/菱禾区块链世界中,EOS是什么样的存在?很多人将EOS视为区块链3.0的代表。在诞生之初的新闻报道里,EOS确实有着这种趋势.

1900/1/1 0:00:00
比特币:最新报告:闪电网络隐私性和可扩展性优势低于预期

据Cointelegraph1月13日报道,加密货币交易所BitMEX的研究人员表示,闪电网络比特币实现的隐私和可扩展性方面的优势不及预期.

1900/1/1 0:00:00
区块链:观察 | 区块链溯源,发展到什么程度了?

来源:中外管理杂志,有删减作者:朱冬2019年12月24日,一家科技公司甘道智能发布了“物链1号”,声称可以通过从源头到终端全产业链的溯源,来为疫苗保真.

1900/1/1 0:00:00
区块链:2020投资人大讨论:市场起伏,资本如何预判?

2019年1月9日,由Odaily星球日报主办的?2020「FAT」高峰论坛暨颁奖典礼在北京落下帷幕.

1900/1/1 0:00:00
TEN:加密量化交易平台提供商AlgoTrader AG完成380万美元A轮融资

瑞士自动算法交易平台提供商AlgoTraderAG周三宣布结束其A轮融资,获得370万瑞士法郎.

1900/1/1 0:00:00