以太坊执行层 (Eth1) 和信标链 (Eth2)合并后会发生什么

  • 六天
  • 更新于 2022-03-14 19:25
  • 阅读 3352

以太坊从POW过渡到POS,难度堪称是在正在飞行中的飞机上更换引擎。好在经过漫长的等待,即将迎来本次合并。那么,本次合并什么时候发生,发生后执行层和共识层会发送什么改变?

为了以太坊2.0升级做准备,今年1月底时,以太坊基金会宣布”以太坊 1.0”(ETH1)和“以太坊 2.0”(ETH2)一词将被淘汰,取而代之的是“执行层”和“共识层”,执行层+共识层=新的以太坊。

而目前合并的开发工作已基本完成,正处于公开测试阶段,预计到22年第二季度完成合并。本次合并,将是以太坊有史以来最大的一次升级,如何保障以太坊这个去中心化的网络在不停服的前提下,六千多个节点顺利升级,并且升级后不影响已有合约、资产的使用。

为了本次升级,以太坊核心开发者和整个社区准备已久,所有的以太坊用户也都拭目以待。那么,本次合并什么时候发生,发生后执行层和共识层会发送什么改变?

一、如何触发

信标链通过监测当前以太坊的出块难度total difficulty, 一旦出块难度大于等于某一个临界值(TERMINAL_TOTAL_DIFFICULTY),该区块将会是最后一个POW块,之后的区块将由信标链构建。

二、何时触发

目前各项工作已准备就绪,预计在第二季度进行合并,更准确的是在6月份之前。当然,也不排除由于一些意外情况导致的推迟,如公测期间发现一个漏洞,修复完成的时间就不确定了。

之所以是6月份,是因为在21年12月的Arrow Glacier(箭形冰川升级)中,通过了EIP-4345,将难度炸弹推迟到了22年6月,也就是说,如果在6月份,合并还没完成,那么难度炸弹会将再次推迟,希望这种情况不会发生。

三、合并后的以太坊

合并后执行层+共识层等于新的以太坊,其中:

  • Eth1 → 执行层:负责处理事务和数据
  • Eth2 → 共识层:负责处理 PoS 共识,采用信标链

合并后的架构如下图所示。 image.png

从图中可以看出:

  • 执行层节点和信标链节点为独立节点
  • 二者有各自的p2p网络和暴露的API
  • 二者通过引擎API进行通信

四、执行层

合并后的执行层会将POW共识相关的部分删除,状态管理、区块构建和验证会有修改,其他的如EVM等功能保持不变。

4.1 区块格式的修改

在区块中,与POW相关的字段会被设置为0,如下表所示。 image2.png

另外,extraData字段长度会被限制为32字节。

相应的,对区块的有效性校验,会有如下更改:

  • 去掉关于difficulty的验证
  • 去掉nonce和mixHash的验证
  • 去掉叔块ommers列表及列表成员的验证

4.2 以太币增发

由于共识从POW切换为POS,将取消叔块的奖励,而执行层会继续处理交易的手续费,手续费将会支付给ExecutionPayload(执行数据)中的feeReceipient(费用接收者)。

4.3 区块广播

合并后,执行层将不会在进行区块广播,具体到客户端上,就是取消NewBlockHashes (0x01)NewBlock (0x07) 的处理逻辑。同时,执行层仍然会同步网络状态,广播交易和维护交易池。

4.4 Engine API

Engine API是执行层不同于JSON RPC API的,一个独立端口的API模块。

Engine API引入了三个接口:

1、engine_newPalyload

engine_newPalyload,引擎执行数据,该接口的主要作用是要求执行层验证ExecutionPayload(执行数据)是否符合要求,执行层响应的状态包括:

  • VALID,有效
  • INVALID,无效
  • SYNCING,同步中
  • ACCEPTED,已接受,防止重复提交
  • INVALID_BLOCK_HASH,区块hash无效
  • INVALID_TERMINAL_BLOCK,区块终端无效

2、engine_forkchoiceUpdated

engine_forkchoiceUpdated,引擎分叉选择更新,其功能主要是共识层让执行层生成一个新的区块ExecutionPayload。

3、engine_getPayload

engine_getPayload,引擎获取数据,共识层通过请求engine_getPayload接口,获取执行层中的ExecutionPayload数据。

ExecutionPayload数据结构如下图所示。 image4.png

五、信标链

信标链在2020年12月1日就已经上线,由于还没有合并,因此目前的信标链是对空快达成共识的。信标链浏览器:https://beaconscan.com/

合并后,信标链负责对区块达成共识,合并后的区块如下图所示。 image5.png

当共识层需要打包一个新的区块时:

  • 首先会调用执行层引擎API的engine_forkchoiceUpdated接口,携带payloadAttributes参数,执行层返回payloadId
  • 其次,共识层调用engine_getPayload接口,传入payloadId,执行层返回ExecutionPayload数据。
  • 再次,共识层调用engine_newPalyload接口,传入ExecutionPayload数据,执行层验证交易并返回数据是否有效。
  • 最后,共识层调用engine_forkchoiceUpdated,传入ForkchoiceState参数,执行层同步新的区块。

合并后,信标链开始打包区块,如下图所示。 image6.png

六、参考

《AllCoreDevs Update 007》https://tim.mirror.xyz/sR23jU02we6zXRgsF_oTUkttL83S3vyn05vJWnnp-Lc

《eip-3675》https://eips.ethereum.org/EIPS/eip-3675

点赞 1
收藏 4
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

2 条评论

请先 登录 后评论
六天
六天
躬身入局