Eth2.0 - Merge
原文链接:How The Merge Impacts Ethereum’s Application Layer 日期:2021/11/29 作者: Tim Beiko
以太坊即将到来POS过渡,如何保证以太坊用户过渡时的智能合同和dapps提供最小的影响,即合并(The Merge)。如果对合并有一个全面的了解,可以参考:
- Roadmap evolution
- Post-merge client architecture 想了解更多,可以参考
- Execution Layer
- Consensus Layer
- Engine API
Block structure
合并后, 不会再使用POW共识算法生成了以前的新块POW区块将成为信标链的一部分,信标链将成为以太坊的新产品POS共识层。信标区块将包括 ExecutionPayloads字段, ExecutionPayloads就相当于POW下图显示了信标块和POW区块关系:
终端用户和App开发者,ExecutionPayloads是原POW链与信标链交流的地方。此级交易仍由执行层客户端进行(execution layer clients:Besu, Erigon, Geth, Nethermind)处理。幸运的是,由于执行层的稳定性,合并只会给予Eth影响很小。
- 上图中以下三张图片是从官网截取的, 分别合并ExecutionPayloads、信标区块体(BeaconBlockBody)数据结构。我们可以比较ExecutionPayloads和POW块的数据结构, 两者的数据结构相似。同时,信标区块包含在同一时间ExecutionPayloads说明这个字段是信标链和分片链(原始字段POW链)通信的关键。目前只有一个分片链, 那么这个字段会不会是未来扩展到64条分片链的列表呢?唯一让我疑惑是:合并后的BeaconBlockBody中为啥还有eth1_data字段, 记录以前吗?POW区块,以及BeaconBlockBody字段数据存储是否过大?
- Eth2的整体结构是信标链作为管理链协调每个子链,交易处理在子链上完成,所以在Eth2.分片链被称为执行层,但目前分片链还没有上线,只有原始的POW链条作为分片链。合并前,POW链和信标链都是自己挖的,共识算法也不一样。通过信标区块连接两个不同的共识链(BeaconBlockBody)中的eth1_data实现的。在合并后,POW它将被废除, 原本的POW链将转为POS链,即分片链。我们知道原来的POW链条以前一直在稳定运行,所以上面会说执行层的稳定性只会合并Eth带来很小的影响, 这里的执行层是指原来的POW链转成POS链。
- 合并阶段仍在发展中。
Mining & Ommer Block Fields
合并后, 以前在POW由于它们和,区块头的几个字段将不再使用POS链条无关。为了减少对现有现有ETH这些字段设置为0或其他等价数据结构。这里可以具体参考区块的变化。主要包括字段:
POS链不会产生叔叔区块,所有ommers置为空,ommerHash也就是空列表。同时,不再挖矿, 所以difficulty、nonce也没了。
但是, 原先的mixHash字段将被放置Eth2.0的信标链的RANDAO下面将介绍字段。
mixHash字段:256位哈希值,用于与之相匹配Nonce证明当前区块已经实施了足够的计算量
BLOCKHASH & DIFFICULTY opcodes changes
合并后,BLOCKHASH 操作码(opcode)它仍然可用,但由于操作码将不再通过POW在共识算法中使用, 因此,操作码提供的伪随机性也将大大降低。 相反, DIFFICULTY 操作码(0x44)将更新并重命名为RANDOM。合并后,它将返回信标链提供的随机信标(randomness beacon)输出。因此,对于应用程序开发人员来说,这个操作代码将是一个比例BLOCKHASH随机性源更强(source of randomness),虽然现在有偏倚。
RANDOM存储值ExecutionPayload也就是原来POW区中的mixHash字段,即mixHash字段也命名字段random。
本段的描述及上图ExecutionPayload在数据结构中random字段注释有冲突,博客表示将mixHash被改成random, 而注释中说random原本是POW区块中的difficulty字段。虽然这个地方可能有点冲突,但我们只需要知道:POW区块中的mixHash字段和difficulty在POS区块里以random方式存在
下图是DIFFICULTY & RANDOM合并前后操作码的变化:
此外,该EIP允许智能合约判断是否已升级PoS。这可以通过分析难度来操作代码(DIFFICULTY opcode)返回值完成。当返回值大于时 2**64表示交易在PoS块中执行的
Block time
合并后,将影响以太坊的平均区块时间。目前在工作量证明中,区块平均每13秒出现一个区块,但实际出块时间有相当大的差异。而POS每隔12秒(即)Slot)除非验证人处于离线状态,或者因为没有及时提交块而错过,否则会出现一个块Slot。这种情况目前发生在现实中<1%的Slots中。 这意味着平均出块时间减少了约 1 秒。在计算平均计算平均块时间时需要考虑这一点。
Safe Head & Finalized Blocks
在POW在共识下,区块链总是有重组(reorg)的可能性。应用程序通常需要等待几个新区块在某个区块后被挖出,然后才能确定该区块不太可能从合法链中删除。该区块已被确认(confirmed)。合并后,我们有了最终化(finalized )和安全头(safe head) 块块的概念。使用这些块比POW下"已确认"块更可靠,但需要理解转换才能正确使用。
一个被最终化(finalized)块是指被子>三分之二的验证人被认定为合法区块,即被三分之二以上的验证人投票。为了创建非法区块,攻击者必须至少烧毁它 1/3 总权益。写这篇文章时,代表以太坊价值超过100亿美元(>250万ETH)。
安全头(safe head)在正常的网络条件下,我们希望安全头包含在合法链中。假设网络延迟小于4秒,大多数验证者都是诚实的,没有分叉攻击,安全头永远不会被孤立。具体可以参考:Gasper High Confidence Fast Block confirmations。此外,安全头的假设和保证会在即将发表的论文中被正式定义和分析。
合并后,执行层API(例如 JSON RPC)在请求 块时默认返回安全头。在正常网络条件下,安全头和链的实际前沿( actual tip of the chain)将是等价(安全头只会跟着几秒钟(with safe head trailing only by a few seconds))。与当前的POW下的 与块证相比,可能重组安全头更小。为了公开POS链的实际尖端(the actual tip of the proof of stake chain),将向 JSON RPC 添加一个**unsafe ** 标志。
最终化的区块也将通过带有 标志的JSON RPC公开。这些可以作为POW的有力替代品。下表总结了这一点: