来源:以太坊博客
作者:格里芬·伊希巴·霍奇基斯
以太坊1。十: 无状态以太坊“再生”新理念
本周,我们将更新技术树,为以太坊 1的开发添加一些新的主要里程碑。十、 这些里程碑并不是无状态以太坊的完全实现,而是我们可以在中期内合理实现的目标。
最重要的更新是亚历克西的再生建议。虽然这不是一个标准化的更新,但从研发的角度来看,regenesis为“完全无状态”的最终目标提供了一条更为保守和可行的路径。在其他方面,与再生的补充技术是静态网络,它可以帮助在基于比特流的DHT网络中传播状态快照和历史链路数据。
同时,一些离我们较近的目标已经在为EIP做准备,比如代码merkleization和state binary tree。在这篇文章中,我将解释已经取得的进展,并附上链接,以便读者能够更多地了解感兴趣的领域。
二叉树
目前,以太坊采用16分支Patricia-Merkel树对状态进行编码,但如果将其转换为二进制形式,将带来显著的效率提高,特别是在见证大小方面。需要一个新的范式和一个清晰的过渡策略来完全重新编码以太坊状态。**,您需要决定是阻止智能合约代码并将流程合并到二叉树转换中,还是作为一个独立的更新。
二叉树范式
与现有的十六进制树结构相比,二叉树的概念更简单。从树的根到子节点有16条可能的路径,而只有两条二叉树路径。随着状态树的重新规范,我们有机会解决过去五年中效率低下的问题。此外,我们有机会使state适应现实世界中数据库编码的性能挑战(在上一篇关于状态增长的文章中提到)。
有关形式二叉树规范和块规则的讨论,请参阅ETHrearch
转换为二叉树
重要的不仅仅是二叉树范例的目的地,还有旅程本身!在理想的过渡过程中,不会对网络的事务处理产生干扰,即客户端在处理每15秒出现一次的新块时,需要构造一个新的二叉树。
目前,最有前途的转换策略被称为“覆盖”方法,它部分基于gETH新的快照同步协议。一般来说,新的状态更改将以二进制标准形式添加到现有的十六进制树中,这意味着在转换期间将混合使用二进制和十六进制。未受影响的状态将转换为后台处理。转换完成后,这两个层将合并到一个二叉树中。
值得注意的是,客户端多样性在二进制转换过程中也起着重要作用。每个客户机都需要实现自己的转换版本或依赖其他客户机进行转换,然后在另一端等待一个新的树。
这需要我们三思而后行。所有客户机都需要一起工作来测试和协调转换。出于安全原因,网络可能需要在过渡期间临时停止服务(例如,挖出一些空块),但就任何具体计划达成共识还为时过早。
代码块
以太坊状态树的很大一部分由智能合约代码组成,约占50GB状态的1GB。所有用于智能合约交互的witness都必须为其交互提供代码来计算codehash,这可能会生成大量额外的数据。
代码merkleization的目的是将合同代码分成更小的块,然后用另一个Merkel树根替换codehash。这样,我们可以使用引用哈希来替换witness中的大部分潜在智能合约代码,从而节省数千字节的见证数据。
有很多方法可以阻止代码。根据复杂程度,简单的是通用块(例如,每个块的大小为64字节),而更复杂的方法是基于SOLidfunctionid或jumpdest指令的静态分析。**的码阻塞策略最终取决于它是否适用于从主网采集的真实数据。
再生
理解regenesis提案的**地点是@mandrigin给出的解释和@realledgerwatch提交的完整提案。一般来说,再生基本上是一个“区块链清理”完整状态在概念上分为“活动”和“不活动”整个“活动”状态将被停用一段时间,然后新事务将再次从几乎为零的状态建立一个新的活动状态(因此命名为“再生”)。
如果交易需要先前的状态,则会提供证人,这与无国籍以太坊要求的证据非常相似:默克尔证明状态变化与非活跃状态一致。如果一个事务需要状态的“非活动”部分,它将自动将其更改为“活动”状态(无论事务是否成功),并且此部分将留待下一次重新生成。
这样做的好处之一是,在使用状态时会产生一些经济约束,而实际上却没有删除任何州。第二,如果交易的发送方盲目地试图重复交易,就无法产生证人。
对于再生的意义,它使以太坊向着无状态的最终目标迈进,避免了实现无状态的**挑战,即如何计算EVM执行过程中的见证气体。同时,它还可以使某个版本的事务见证在网络中传播,使更多的轻量级客户端和DAPP开发人员有更多的机会熟悉无状态范式和见证生成。
再生后的“真正”无状态只是程度问题:无状态以太坊实际上只是每个块之后的再生。
国家网络
从一开始,网络协议的优化只是技术树中的一个“分支任务”,但随着regenesis进入无状态以太坊布局,探索共享以太坊链数据(包括状态)的替代网络原语也成为主要任务。以太坊现有的网络协议是一个整体,但事实上,有许多类的数据可以通过不同的“子网”共享,以满足不同的需求。
我们称之为“三类网络服务”,以前是无法有效改变的。由于再生的引入,这种不总是变化的数据中可以包含“不活跃”状态。从理论上讲,它可以应用于具有比特流的蜂群网络,而不是由所有节点逐个广播。
自上一次再生以来,在网络中传播不变状态的网络是静态网络,可以根据devp2p库(以太坊网络协议)中的新发现V5.1规范进行扩展。
以前,类似于Murry go round sync和更成熟的snap协议,可以用来同步活动状态,是向全分布式动态网络迈出的重要一步,使客户端能够快速同步完整的状态。
后记
对于无状态以太坊技术树的每个分支的更详细的技术描述,读者可以参考无状态以太坊规范库,也可以在ETH1x/2rD discord中讨论所有这些主题。如果要添加它们,可以访问ETHrear.ch公司你得请求邀请。如果您有任何反馈或建议,请联系twitter上的@gichiba或@jhancock。
ECA601的目标是向中国提供高质量的翻译和信息。文章的著作权属于原作者、原文的出处和以太坊网如需长期转载,请联系以太坊[email protected]授权。
文章链接:https://www.btchangqing.cn/94080.html
更新时间:2020年08月29日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。