想象一下,你正在翻译一本5000页的书籍,作者一直打电话告诉你他对故事做了调整,这会影响到你已经翻译过的页面……而这可能会一直持续下去,这就是以太坊从当前使用的MPT十六叉树转变为二叉树结构中遇到的一个类似困境。对此,以太坊核心开发者Guillaume Ballet提出了一种方案,可以在大约几天的时间内,通过3个步骤完成这一转换手术。
对于该提案,以太坊联合创始人vitalik评论称:
以下是译文:
影响以太坊的众多问题之一是账户和合约数据的存储方式,以太坊目前选择的结构称为默克尔帕特里夏树(Merkle Patricia Tree,或简称MPT)。尽管从理论上讲,它是很有意义的,但在实践中,它带来的问题要比其解决的问题要更多。多年来,核心开发人员一直在讨论向二叉树(binary tree)的转换,在本文中,我将阐明我对这一问题的看法,然后给出一个解决它的方法。
以太坊共识层存款合约地址ETH余额突破1200万枚,已超当前ETH总量的 10%:4月29日消息,据 Etherscan 数据显示,以太坊共识层(原 Eth2)存款合约地址中的 ETH 数量突破 1000 万枚,超过当前 ETH 总量的 10%,目前为 12,041,650 枚,价值逾 351 亿美元。[2022/4/29 2:39:33]
提议的过程引入了一个过渡期,在此期间,两种树结构都会存在。这样做的好处是,在转换树结构时,主链可以保持运行,并且还可以确保将所有帐户转换为二叉树格式。
背景
目前,以太坊的账户是被存储到一棵十六叉树当中的。所谓十六叉,就表示一个节点有16个子节点,理论上这是很好的,因为这意味着你需要更少的"阶段"来存储你所有的数据。
例如,这就是以十六叉树的形式表示键与值对(170,v)的过程。在十六进制中,170表示为0xaa,因此你只需要两层:其中之一用于第一个a,另一层则用于第二个a。
在加密市场回调超10%之前,排名前1000的以太坊钱包减少逾8%的SHIB持仓:11月27日消息,在昨天的抛售之后,SHIB在一天内上涨了大约30%,但随后又跌回了15%的日涨幅。自11月26日以来,SHIB一直在短线波动,尚未突破任何关口。虽然一些鲸鱼用户购买了大量SHIB,但市场似乎没有任何反应。根据交易量指标,由于买卖压力降低,SHIB代币的波动率仍然很低。
此外,WhaleStats数据显示,在加密货币市场在一天内崩溃超过10%之前,1000个最大的以太坊钱包通过买入USDT和以太坊链上的其他稳定币,减少了超过8%的SHIB持仓。目前,鲸鱼的SHIB持仓已回升至修正前的水平,截至发稿时,鲸鱼钱包中仍有大约10亿美元的持有量。(U.Today)[2021/11/28 12:36:38]
以太坊开发工具Hardhat发布2.2.0,添加对柏林硬分叉的支持:4月19日消息,NomicLabs发布以太坊开发工具Hardhat的2.2.0版本,添加对柏林硬分叉的支持。Hardhatv2.2.0更改了HardhatNetwork的默认配置以匹配主网的行为,以及包含一些小的修复程序,包括修复了在MacOS上下载Solidity编译器时的一些问题。[2021/4/19 20:37:31]
图1: 这是一棵十六叉trie树示例,显示了值“v”如何存储在键0xaa处。此树只有2字节长的键,并且只沿0xaa键的子树被展开。为了简洁起见,不相关的子树被替换为“…”。
注意,这棵树很浅,也很宽。然后将其与以下相同键与值对的二叉树表示法进行比较。在二进制中,170表示为10101010。
加密收藏品市场报告:绝大多数DApp建立在以太坊链上:8月11日,Dappradar发布加密收藏品报告。报告显示,几年过去,加密收藏品已经成为一种利基市场。绝大多数加密收藏品应用都建立在以太坊链上,仅有少数应用建立在TRON和EOS链上。截至2020年,排名前三的加密收藏品项目为:CryptoPunks、CryptoKitties和Avastars。[2020/8/11]
图2: 和图1中相同的键值对,以二叉树形式进行存储。为了简洁起见,不相关的子树被表示为“…”。
你可以看到,这棵树要深得多,也窄得多。
在以太坊中,每个区块都包含一个stateRoot字段,它是MPT根的哈希值。总而言之,这个哈希,是通过对根的16个子项的哈希列表进行哈希运算而获得的。这些子哈希列中的每一个,又依次是其子哈希列表的哈希,依此类推。
每次生成一个新区块时,矿工都会更新帐户树并重新计算其根哈希值。哈希存储在新区块的stateRoot字段中,然后新区块被密封。
声音 | 以太坊联合创始人:Libra更似一台性能良好的监控器:以太坊联合创始人Mihai Alisie近日对Libra发表个人看法。其表示:“Libra更似一台性能良好的监控器,积极操纵着人们的一举一动。”理论上,分布式计算系统的一个重要元素是没有任何一个组织能够审查交易,或制定成为某区块链网络的成员的门槛。然而,Facebook推出的Libra却将区块链所特有的特性给扼杀了。Facebook希望将Libra支付网络推广到100家公司中。对此,Alisie预见的风险是:用户的交易掌控在这些大公司手中,他们可以封锁或冻结用户的交易,而这些情况在比特币或以太坊上是不可能发生的。[2019/7/12]
图3为区块头的state root字段指向十六叉树的根。
问题就出现在这里了:通过对所有节点进行哈希运算来重新计算哈希根花费的时间太长,因此,为了计算根节点,矿工将从数据库中检索同级哈希(sibling hash)。尽管从数据库中获取所有子叶并对整棵树进行哈希运算所需的时间不多,但此操作仍然需要大量时间。这是因为必须要从数据库中获取每个哈希。
在十六叉树中,通常每个阶段要获取15个同级哈希。在上面的示例中,这就是30个哈希。
即使更深入,二叉树每个阶段也只需要一个同级哈希。在上面的示例中,就只有8个哈希!这就是为什么在实践当中,二叉树实际上要更好的原因。
覆盖转化法
不幸的是,要将以太坊从十六叉树切换到二叉树,并不是一件容易的事。有很多数据需要转换,并且执行更改需要花费超过15秒的区块时间。
除此之外,想象一下,你正在翻译一本5000页的书籍,作者一直打电话告诉你他对故事做了调整,这会影响到你已经翻译过的页面……而这可能会一直持续下去。
这就是目前以太坊遇到的问题,因为用户可以更新已转换的地址,这意味着你必须重新开始转换过程。
解决此问题的建议是设一个过渡期,在此期间,在十六叉树的顶部放置一棵覆盖二叉树,它的作用是保存状态发生的所有更改,直到基树转换为二叉树。
这种过渡会分成三步进行:
在这种方法中,确定在区块高度H1处,区块具有两个stateRoots:一个用于“基础”十六叉树,一个用于“覆盖”二叉树。
图4: 在转换过程中,区块具有2个状态根(state Root):一个是传统十六叉树的只读根,第二个是“覆盖”二叉树的根。
十六叉树被认为是只读的,因此对状态的任何更新都将是对覆盖树的更新。
当一笔交易读取或更新一个帐户时,系统首先搜索覆盖树。如果在那里找不到帐户,系统将在旧的十六叉树中搜索该值。
而在同时,十六叉树正在后台转换。现在可以不用担心插入,因为所有更改都存储在顶部树中。
后台转换过程完成后,矿工将通过转换结果替换只读的十六叉树基础根来宣布他们已准备好进行切换。对状态的读写操作与步骤1相同。
图5:转换的第二个阶段,区块头将十六叉树基础根替换为其二叉树转换基础根,以向网络发送信号,告知它们已准备就绪。
当一个足够大的序列区块对转换后的基础根具有相同的值时,这意味着大多数矿工都完成了转换,并对转换后的树的外观达成了共识。接下开,就进入到合并过程。
合并过程会逐渐进行:每次生成新区块时,都会从叠加层中删除n个键,然后将其重新插入到基础树中。该过程将持续进行,直到从叠加层中删除所有键为止。在此阶段,覆盖状态根将从区块头中删除。
除此之外,如果交易执行写入覆盖树中找到的键,则该键将从覆盖树中删除,并直接写入到基础树。
下一步
我们已经创建了一个初步的原型,以便估计完成转换所需的时间。我们相信,整个过程可以在合理的时间内(大约几天)完成。随着算法的改进,我将发布更多的细节。
致谢
这项提议得益于Alexey Akhunov,Vitalik Buterin,Anna George,Sina Mahmoodi,Tomasz Stanczak以及Martin H. Swende提供的宝贵意见。
相关讨论:https://ethresear.ch/t/overlay-method-for-hex-bin-tree-conversion/7104
本文是ConsenSys创始人Joseph Lubin在2月举办的ETHDenver hackathon演讲分享.
1900/1/1 0:00:00金色财经 区块链4月2日讯 根据区块链研究机构Chainalysis本周发布的一份研究报告显示,在此前加密货币市场剧烈波动期间.
1900/1/1 0:00:004月2日,欧洲改善生活和工作条件基金会(EuroFound)发布了最新报告,详细介绍了区块链如何有效地交付和跟踪公共福利(public benefit).
1900/1/1 0:00:003月19日,Vitalik终于对以太坊未来的规划进行了总结和说明,以太坊是全球最大的公链、加密社区,在加密世界的影响力和领导力毋容置疑.
1900/1/1 0:00:00近日,韩国N号房事件沸沸扬扬,也令加密货币久违的以正面形象出现在大众的视野中。据悉,参与犯罪的涉案人员通过比特币和门罗币等加密货币来进行交易,给予了利用加密货币的可溯源性捉拿涉案人员的机会.
1900/1/1 0:00:00金色财经 区块链3月22日讯 最近传统金融市场的崩盘让许多人联想到2008全球金融危机时的状况,包括黄金、比特币在内的许多所谓“避险资产”似乎也未能幸免.
1900/1/1 0:00:00