http://www.7klian.com

引介 | eth1 - eth2 转换

引介 | eth1 - eth2 转换


编者注:本文为 Vitalik 于 2020 年 10 月 19 日在以太坊研究者论坛上颁发的帖子,提议了他所设想的 Eth1 如何转换身分片化信标链的子系统的进程,并表明白开拓者、用户对这个进程会有什么知觉。确切来说,这并不是一个针对 Eth1 的提案,因为提案的内容无涉于 Eth1 的链和生态如何形成遍及的社会共鸣来完成这种转换,相反,它仅仅涉及到了分片化信标链的一个子系统(“Eth1 EE”)要按什么样的措施选取 Eth1 上的哪个状态作为本身的起始状态。另外,读者还可借此一窥作者心中一个筹备好完成转换的分片化信标链应具备哪些基本设施,譬喻,无状态性和 EE;借此可反推分片化信标链的开拓偏向和进度。


本文先容的蹊径图被用来完成从eth1 向 eth2 转换,假如你是应用开拓者或用户,你所能感觉到的变革以致颠覆实际上很是有限。已有应用将继承运行,而不会产生任何改变。所有账户余额、合约代码和合约存储(包罗 ERC20 余额、质押债仓等)都将继承存在。

你需要应对以下环境:

IO 会见操纵码(SLOAD、BALANCE、EXT*、CALL*)的 gas 本钱将增加。CALL(挪用)的 gas 本钱或许是每会见 1 字节的代码需要耗损 1 gas。你需要下载实现网络进级的代码。这在基础上与拜占庭和君士坦丁堡等其它进级没有区别。可是下载量更大一点,因为假如你还没有 eth2客户端,那你需要下载一个。以太坊区块链大概会暂停约莫 1 小时。1 小时后,“以太坊” 看似从头上线了,可是实际上 eth1 不再是一个独立的系统,而是成了在 eth2 内运行的子系统。
就是这样。假如你是开拓者,只要你确保本身的应用所需的 witness 局限不会太高(可通过单笔事务所会见的全部 存储槽+合约+合约代码 的数量来权衡),你的应用因为 gas 耗损量改变而瓦解的大概性就很小。

转换将如何产生


假设 phase 0-2 已经完成,而且 eth2 链正在不变运行。eth1 链也在不变运行中。phase 0 类型已经布置了一个名为eth1_datavoting 的机制。在这个机制中,验证者会通过投票就 eth1主链最新的区块哈希值告竣共鸣;这个机制今朝被用来处理惩罚押金。我们将从头改变该机制的用途,用它来将 eth1 的完整状态(根)传入 eth2。
今朝,该机制有约莫 6 小时的延迟(个中有 4 小时的延迟是因为 ETH1_FOLLOW_DISTANCE “Eth1 主链跟从间隔”,别的 2 小时是因为投票期) ,可是在转换完成前,这些参数会跟着时间的推移而减小,将延迟降至 1 小时阁下。
影响 eth1 向 eth2 转换的根基机制如下图所示:

引介 | eth1 - eth2 转换


指定一个(eth1 链的) 高度TRANSITION_HEIGHT。高度为TRANSITION_HEIGHT的 eth1 区块将被视为 eth1 链的 “最终” 区块。从该区块往后,(原本是 “正统链的”)eth1 将作为 eth2 的子系统运行。eth2 的 “诚尝试证者” 代码会按照(1)做出相应调解,,不答允验证者投票给区块号 >TRANSITION_HEIGHT的 eth1 区块。假如投票算法已经选出了某个区块编号 >TRANSITION_HEIGHT的 eth1 区块,则改成为TRANSITION_HEIGHT的 eth1 区块投票。另外,在已触发(2)的环境下,验证者会将deposit_count配置为比实际值高 2**63(就是将deposit_count的 top bit 作为 “eth1 已完成” 的标志)当 eth2 在 “eth1 已完成” 标志开启的环境下接管eth1data时,eth2 会执行一次 “非通例的状态调动”,将该 eth1 区块的状态根放到 “eth1 执行情况”(eth2 上的一类系统级智能合约)的状态中。与 eth1 链上的总 ETH 供给量等量的 ETH 会添加到这个 eth1 执行情况的余额中。
在这之后,转换完成。从技能层面来说,eth1 链会继承运行,但它已经酿成了一条毫无代价的链;比及冰河期到来时,这条 eth1 链将彻底消失。
eth1 系统此刻位于 eth2 系统内部。因此,通过在 eth2 上提交针对 eth1 执行情况(即上文所述的 eth2 子系统)的生意业务,eth1进一步转换成 eth2 的子系统。eth1 执行情况拥有可以实现整个 eth1 EVM 和生意业务处理惩罚逻辑的代码;它有一个update(state_root, transaction, witness) -> new_state_root成果,可以凭据 eth1 链的法则,以生意业务和见证动静(状态部门的默克尔证明)作为输入处理惩罚该生意业务,并抉择更新后的 eth1 状态根。关于见证动静和状态根的运作道理,请阅读《无状态客户端观念》。
eth1 执行情况代码可以添加特另外成果,即,将 ETH 和动静从 eth1 执行情况提取到 eth2 的其它部门,以及其它分片上的 eth1 执行情况副本中。在默认环境下,所有 eth1 账户/合约城市放在同一个分片上,因此为了操作 eth2 更大的容量,你需要主动利用这个成果将你的 ETH 或其它应用转移到其它分片上,不外难度不大。我们需要通过扩展 ERC20 尺度来支持跨分片代币转账。


用户客户端如何运作

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。