火星链 火星链
Ctrl+D收藏火星链
首页 > Coinw > 正文

比特币:无状态以太坊:二进制状态树实验

作者:

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

编者按:本文来自:以太坊爱好者,作者:IgorMandrigin,翻译:阿剑,Odaily星球日报经授权转载。本文所用的数据和脚本都放在这个github代码库中:https://github.com/什么是“无状态以太坊”?

如果您已经了解什么是“无状态以太坊”以及“区块见证数据”,可以跳过这一段。为执行交易及验证区块,以太坊网络的节点需要了解整条区块链的当前状态——也就是所有账户和合约的余额和存储数据。这些数据一般来说是存储在DB里面的,在需要用于验证时才会加载到一棵默克尔树中。无状态以太坊客户端的工作思路则稍有区别。顾名思义,无状态客户端就是不使用硬盘DB来执行区块。相反,无状态客户端依赖于“区块见证数据”——就是一段特殊的数据,它会跟相应的区块一起传播;拥有了这段数据,客户端就可以重建出一个默克尔子树,该分支足可用于执行该区块中的所有交易。你可以在这篇文章中读到关于无状态客户端的更深入的描述:https://blog.ethereum.org/当然咯,需要传播区块见证数据就意味着无状态客户端的网络要求要比普通节点更高。

-见证数据大小折线图-现在人们已经提出了很多降低见证数据规模的思路:使用有效性/计算完整性证明、加入更多的压缩手段,等等。其中一种办法是将以太坊的默克尔树从十六进制转为二进制。这就是本文想要探讨的问题。为什么要使用二进制树

Ault Alliance公司任命Jay Looney为旗下子公司新任CEO负责管理挖矿等事务:2月21日消息,多元化控股公司Ault Alliance, Inc.宣布数据中心服务资深人士Jay Looney为其全资子公司AC Management, Inc.(ACM)的首席执行官,负责管理密歇根数据中心以及旗下矿企子公司BitNile, Inc的运营。据了解,密歇根数据中心目前运营着大约9400台蚂蚁矿机,其中包括大约4600台S19 XP和4700台S19j Pro,公司有大约11,200台S19j Pro待安装。(businesswire)[2023/2/21 12:20:08]

默克尔树的一大优良特性是,验证树根值正确与否并不要求你具有整棵树所有的数据。只需把所有省略的非空路径替代为相应的哈希值就可以可。那么使用十六进制默克尔树有什么不好呢?设想整棵树都已填满数据。要验证一个区块,我们只需要一小部分默克尔树节点的数据。那么,我们只需把其他路径的数据替代为哈希值就可以了。但是,每多加入一条哈希值,区块见证数据就会大一些。如果我们转变为二进制默克尔树,这个问题就可以得到缓解——因为默克尔树上的每个节点都只有两个子节点,所以至多只有一个字节点需要被替换为哈希值。这样做也许能大幅降低见证数据的规模。我们再举例说明一下。假设执行某个区块只会影响一个账户:3B路径下的Acc1。整棵树是全满的。

Bitget推出去中心化聚合交易服务MegaSwap:12月26日消息,加密货币交易平台Bitget宣布推出去中心化聚合交易服务MegaSwap,允许用户以去中心化的方式交易他们的数字资产。

MegaSwap现已支持8个区块链(包括以太坊、BSC、Polygon、OP、Fantom、Klay、HECO和OEC)和10个主要DEX平台。此外,与普通DeFi交易中交易必须准备多个链上原生代币来支付交易产生的gas费用相比,MegaSwap支持自动从用户账户中的稳定币余额中转换gas费用。[2022/12/26 22:08:36]

-二进制状态树与十六进制状态树的比较-如果说二进制状态树看起来有点吓人,那只是因为二进制树我画全了,但没有把十六进制树的所有代之以哈希值的节点都画出来。来数个数:为创建出一棵二进制状态树,见证数据需要包含8个哈希值,7个分支节点和1个账户节点。也就是见证数据中有16个元素。为创建出一棵十六进制状态树,我们只需1个分支节点,1个账户节点,但需要30个哈希值。也就是有32个元素。所以,假设哈希值和分支节点在区块见证数据中的所占的空间是一样大的,在我们的例子中,使用二进制树所需的见证数据大小只有十六进制下的一半。看起来不错。那么,理论上就是这样。我们来看看实际情况是如何。我们直接拿以太坊主网的数据来看看吧。开始实验

FTX申请破产保护的前几天,价值3.33亿美元比特币从FTX消失:金色财经报道,FTX于2022年11月11日申请破产保护,申请破产的前5天,20,176个比特币在不到24小时内离开交易所。

在币安首席执行官赵长鹏(CZ)告诉公众币安将抛售其所有FTT代币后,人们立即开始关注FTX的反应。除了关注FTX对CZ声明的反应外,人们还开始关注这家陷入困境的交易所的加密货币余额。很多人都在关注基于以太坊的地址,这些地址在申请破产保护的同一天从交易所吸走资金。然而,FTX在2022年11月5日还持有至少20,176.84比特币(BTC)。然而,第二天,FTX的BTC储备下降至220.26比特币。到2022年11月7日,数据显示该交易所仅持有0.25个比特币,因为这些比特币在FTX申请破产之前就已全部转移。(news.bitcoin)[2022/11/21 7:50:19]

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

-测试方法:1.执行区块;2.从状态树中抽取出见证数据;3.使用见证数据构造出一棵子树;4.禁用DB访问、使用子树来执行区块。因此,我们也使用500万到850万高度的区块、在十六进制默克尔树模式下生成了见证数据,并将见证数据大小的统计数据存在一个超级大的csv文件中。我们尝试的第一步是执行完一个区块后就组装出一棵十六进制树,然后将它转为二进制树,再从这棵二进制树中提取出见证数据。这种方法有几个好处:易于实现,而且验证十六进制-二进制的转换也很简单。不过,我们遇到了两个问题,而且其中一个还不小。第一个,正如我们上面证明的那样,比起二进制树,十六进制树包含更多的账户节点,如果我们先生成十六进制树再转换,得到的结果就跟在二进制树模式下直接生成所得到的见证数据不一样。为什么呢?因为十六进制树数据总是以1/2字节的速度增长,而二进制树总是以1比特的速度增长,因此键的长度可以是奇数位。实际上,见证数据中还包含一些额外的扩展节点,它们还要稍微大一点。不过即便对内容较多的区块,体现在见证数据大小上的差别也非常之小。关键的是性能。随着树的规模增长,转换的速度会越来越慢。用更具体的数字来说明一下:在我们的GoogleComputeEngine虚拟机上,处理速度约为每秒0.16个区块,也就是每分钟处理小于10个区块,处理100万个区块要超过3个月!所以,我们决定采取更复杂的办法,开发出一个原生使用二进制默克尔树的实验性分支。也就是说,我们要把turbo-geth代码库例地所有十六进制状态树全部替换为二进制树,然后区块就是基于二进制树来执行的了。这种办法的不利之处在于,部分哈希值的校验只能被忽略掉。但主要的验证机制还是一样的:我们需要能够使用二进制树来执行区块、从见证数据中创建出默克尔子树。再来谈谈key。为简化起见,我们对key的编码方式是非常低效的:1bytepernibble;一个key的每一比特就要占用1字节。这样做大大简化了代码层面的改变,但区块见证数据中的”key“部分会是我们使用bitset时候的8倍大。因此,在进一步分析中,我会假设key的编码方式是最优的。Hexvs.Bin:结果

HyperPay新版本发布,Web3钱包增加安全检测中心:据官方消息,HyperPay钱包发布V5.0.9版本,在该版本中新增安全中心功能,提供环境检测、代币安全检测和授权检测三项安全监测功能,另外授权检测模块还提供了修改/取消授权的功能;自管钱包全新升级,HyperPay Web3钱包支持33+公链和主流公链DApp,优化了助记词导入/创建流程,满足用户更多使用需求,并将支持更多公链NFT资产查询及转账功能,Web3钱包发现版块上线\"A or B\"功能。[2022/8/25 12:47:57]

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

我在这个github库里面提供了使用python脚本来重复这一实验的命令行:https://github.com/首先我们来分析一下数据集。

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

ENS 24小时交易额增幅达161%:8月21日消息,OpenSea数据显示,以太坊域名服务(ENS)24小时交易额为335 ETH,位列OpenSea第六,24小时交易额增幅达161%。[2022/8/21 12:38:07]

-百分比分析-现在我们可以生成一些很酷的图表了!

-XY散点图(横轴为Hex下见证数据大小,纵轴为Bin下见证数据大小)-可以看出,二进制见证数据的大小总是优于十六进制树下的见证数据。我们再加入另一个参数,用二进制见证数据大小除以十六进制见证数据大小,看看我们得到了怎样的提升。

-二进制见证数据的大小/十六进制见证数据的大小-为更好地理解这张图标,我们也输出了平均值和百分位值。平均值=0.51P95=0.58P99=0.61在实际场景中这意味着什么?对于99%的区块,见证数据的大小可以降低至少39%。对于95%的区块,见证数据的大小可以降低至少42%。平均来说,见证数据可节省49%。我们也要考虑见证数据大小的绝对值。为使数据变得可读,我们每1024个区块取滑动平均值。

-依时间顺序绘制的见证数据大小折线图,纵轴单位为MB-再来看看最新区块的情况。区块高度800万到850万

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

-800万号到850万号区块的百分位分析-还有XY散点图。

还有规模上的节约。pythonsize-improvements-plot.pyhex-witness-raw.csvbin-stats-8m-9m.csv80000008500000adjust

-XY散点图(横轴为Hex下见证数据大小,纵轴为Bin下见证数据大小)-平均值=0.53P95=0.61P99=0.66最后,再来看看见证数据的绝对大小。pythonabsolute-values-plot.pyhex-witness-raw.csvbin-stats-8m-9m.csv80000008500000adjust

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

在使用以太坊主网数据做过测试以后,我们可以看到,切换为二进制树模式可以大幅提升生成见证数据的效率。另一个结论是,这种提升并没有理论上那么显著。原因可能在于主网区块的实际数据。也许,通过分析一些例外情况,我们可以知道更多优化见证数据规模的办法。试着使用别的原始数据来跑跑GitHub中的脚本吧:https://github.com/

标签:以太坊FTXHUB比特币比特币以太坊最新价格行情FTX价格PegHub.com丘比特币一个多少人民币

Coinw热门资讯
BTC:2019年BTC、ETH链上数据汇总

BTC篇: 2019年,BTC全网算力不断上涨,在9月18日这一天首次突破了100EH/S大关,并在整个第四季度持续在100EH/s上下波动.

1900/1/1 0:00:00
以太坊:什么是以太坊“难度炸弹”?

编者按:本文来自白话区块链,作者:严,Odaily星球日报经授权转载。以太坊“难度炸弹”是以太坊开发人员2015年嵌入的一段代码,通过逐步增加区块链挖矿难度,从而人为减慢以太坊发行速度.

1900/1/1 0:00:00
NEW:联想区块链

出品/CoinVoice文/苏田2019年12月31日,柳传志退休,联想将进入完全意义上的后柳传志时代.

1900/1/1 0:00:00
比特币:区块链时代简述:从1.0到3.0

自区块链技术诞生以来,区块链时代的序幕也渐渐拉开。如果要对这段十多年的历史进行一个简单的划分,我们可以看到三个各自具备特征的区块链时代.

1900/1/1 0:00:00
POOL:可以像微信钱包一样?2020年数字钱包技术重要的进化方向(上)

编者按:本文来自白话区块链,作者:五火球教主,Odaily星球日报经授权转载。还记得你第一次接触数字货币,第一次使用钱包时的感受吗?笔者还依稀记得,第一次看到助记词页面呈现在眼前时的感受:“这什.

1900/1/1 0:00:00
300:电子发票区块链应用调查(下)

Overview概述本文将从行业政策和发展规划出发,对电子发票行业以及其区块链应用的行业环境进行回顾和展望.

1900/1/1 0:00:00