详解以太坊2.0如何与1.0合并(二)

 空投币   2020-04-25  来源:互联网  0 条评论
优质活动 币圈快讯 平台公告 行情分析
最新羊毛 最新空投 链圈挖矿 活动线报
新币上市 币圈空投 国外项目 币链屋
提醒:本站内容均转自网络,仅用于开发者下载测试,请明辨风险,若涉资金安全及隐私,请谨慎!谨慎!再谨慎!一切风险自担,涉及资金交易及个人隐私务必小心并远离,切记千万别投资,勿上当受骗。《本站免责申明》

文|ONE_PIECE

接上篇

状态

eth2有一种与核心共识相关的状态,这就是所谓的“信标状态”(beacon-state)。信标状态数据很小(大约只有10-40MB,取决于验证者集的大小),它包含了理解核心共识及如何处理分片链所需的所有信息。事实上,要处理分片链中与共识相关的部分,客户端必须能够访问信标状态(例如,运行分片链分叉选择的最新交联crosslink、验证分片链签名的当前验证集或shuffling随机分配)。

eth2的状态不会一直和用户层状态交互,其交互最多的是分片链数据的可用性。实际的用户层数据根位于该分片链数据中,对于eth1分片链,则为当前以太坊用户状态根。

下面讨论了和eth2客户端相关的eth1状态的不同情况:

1、没有eth1引擎的eth2客户端

核心eth2协议可以在没有附加eth1引擎的情况下运行。单独的eth2客户端可以遵循信标链和分片链(包括eth1分片)。而没有eth1引擎,客户端将无法执行无状态eth1分片区块,因此无法完全验证它们或从中获取任何有用的用户信息。不过,根据对eth2核心共识和验证者的假设,eth1分片链的头部(head)仍然可以安全地找到。

2、带无状态eth1引擎的eth2客户端

要运行一个验证者节点,必须使用附加的eth1引擎运行eth2客户端。这可以通过无状态的方式完成(即不在本地存储整个eth1状态),因此eth1分片区块具有可用于执行的验证数据(witness)。信标委员会可以通过对eth1引擎进行无状态调用,来检查分片区块数据的可用性及关于eth1的数据有效性。

除了验证者外,很多用户/应用程序节点也可能使用无状态或半状态的eth1引擎运行。使用瘦eth2客户端,来跟随eth1分片链的头部,并以无状态或半无状态的方式与其交互。

3、带有状态eth1引擎的eth2客户端

要运行可产生eth1 分片区块的验证者,必须使用附加的eth1引擎和完整的eth1状态运行eth2协议(研发者们正在探索无状态的区块产生方法,但为简单起见,我们不对其进行讨论)。然后,可以使用本地状态和交易存储池(TX mempool)按需形成新的有效区块(在下文中有更多讨论)。

除验证者外,很多用户/应用程序节点也可能使用完全有状态的eth1引擎运行,例如区块浏览器、存档节点、状态提供者等。

网络

为简单起见,eth2和eth1最初会维护它们各自独立的网络堆栈和协议。为了响应责任转移(例如eth1分片区块gossip),开发者已不赞成使用某些现有的eth1协议(例如eth1分片区块gossip),取而代之的是eth2协议。在初始原型设计阶段之后,或者在更进一步的阶段,可能需要将eth1协议迁移到libp2p以统一网络堆栈,但这不是必须的。

eth2客户端和eth1引擎可以访问相同的discv5 DHT,但是可独立地找到具有适当功能的对等节点并独立地维护连接。

ENR

eth1+eth2组合客户端会使用一个ENR,因为节点位于具有多个功能的逻辑网络标识之后。

eth1功能(状态、交易等)由ENR中的现有ETH(或新eth1)key表示。

eth2功能(核心共识)在ENR中用eth2 key表示。

每种协议的存在,都意味着节点能够且愿意识别底层网络协议的类别。

Wire协议

1、eth2协议

1、eth2请求/响应(1、状态,2、信标区块同步,3、分片区块同步); 2、核心共识gossip(1、Beacon区块,2、证明,3、分片区块,包括eth1分片, 4、其它验证者操作);

2、eth1协议

1、eth1 wire协议的子集 (1、交易gossip,2、同步方法,例如getnodedata或新方法, 3、获取收据receipt)

2、NOT(与区块哈希、区块头或体相关的消息);

3、为什么eth2客户端会处理eth1区块gossip ?

eth2专门用于处理分片区块的生产、gossip以及验证。我们的目标是让eth1分片成为标准分片,并尽可能与其余分片保持一致。关于核心共识,与其他分片相比,eth1区块的主要区别在于针对eth1引擎执行/验证区块内容的能力,

当验证者正在将eth1分片区块叉联到信标链时,eth2客户端将再次调用eth1引擎来执行和验证该区块。

当有状态的eth1 + eth2组合节点收到新的eth1分片区块时,eth2客户端将再次调用eth1引擎,以验证该区块并更新本地状态存储。

交易gossip和存储池mempool

eth1引擎几乎会以当前以太坊相同的方式,维护用户交易gossip以及eth1交易储存池。同样的网络协议和本地机制,可以用于gossip及存储池的维护,为区块的生产做好准备。

主要的区别在于如何确定已用交易的知识,以及如何将存储池用于区块生产,但这些可以说是位于存储池外部的一个层中。

eth1分片区块是从附属eth2客户端提供给eth1引擎的。包含在这些区块中的交易,应该以类似于当前以太坊主网PoW区块的方式从存储池中清除。

eth1分片区块是根据附属eth2客户端,通过存储池mempool的内容生成的。此RPC方法和基础功能类似于getWork,但将返回完整的区块内容,而不仅仅是一个哈希值。

区块生产

在eth2协议中,所有区块(信标区块、分片区块、eth1分片区块)必须由PoS验证者根据核心共识进行生产及签名。为此,eth2客户端最终要负责所有区块的生产。

对于信标区块和非eth1分片区块,eth2客户端具有生成有效区块所需的一切。

对于eth1分片区块,eth2客户端立即/随时访问eth1状态、交易和其它底层eth1结构,以生成有效区块。相反,当指定验证者生成eth1区块时,eth2客户端从eth1引擎请求一个可行的eth1区块数据(TX、状态根等)。然后,eth2客户端将此eth1区块数据打包到完整的分片区块中(添加slot、positer_index、positer_signature等),并将该区块广播至网络。

eth1引擎之所以能够生成有效/可行的eth1区块数据,是因为它采用了今天以太坊主网所使用的相同方式来管理eth1交易存储池,并且它通过eth2客户端的更新来维护eth1头状态的最新信息。

下一步该怎么走?

如果这一总体设计被大家认同,那接下来的步骤包括:

本文地址:http://bilianwu.com/39849.html
版权声明:项目均采集于互联网, 空投币 无法审核全面,且希望大家能赚钱,请谨慎切勿上当受骗!
温馨提示:★★★天上真会掉馅饼!天道酬勤,都是机会!不错过每个空投糖果!真假难以辨认,尽量0撸!
重要提醒:本站内容均转自互联网,请明辨各个项目风险,不构成投资建议,如涉及资金交易,请谨慎操作与自担风险!
《新人必看》 《本站免责申明》

评论已关闭!