Ethereum 2.0,即 Ethereum 的升级版,其主要目的主要有两个:
- 降低能源消耗,即共识从 PoW 转为 PoS;
- 扩容,也称为分片(sharding),即提高 Ethereum 的 TPS(Transactions Per Second)。
为实现这两个目的,分三个阶段:
- The Beacon Chain
- The Merge
- Sharding
目前(2022-09-20),已经进入到第二阶段,其中 The Merge 完成了第一个目标,第二个目标在第三阶段 sharding 中实现, 预计是在 2023 年完成。
The Beacon Chain 于 2020 年 12 月 01 日上线,简单的来说就是 Ethereum 2.0 的先行网,PoW 转 PoS 以及 sharding 都先在 Beacon Chain 上测试,最终于 2022 年 09 月 15 日和 Ethereum 主网合并,即 The Merge。
北京时间 2022 年 09 月 15 日下午 03:00,Ethereum 合并成功, 即 Beacon Chain 和之前的 PoW 的 Ethereum 合并成功,Ethereum 正式从 PoW 转为了 PoS。这就是 The Merge 的带来的改变,Ethereum 不再需要消耗比较多的的能源来进行挖矿了,由 PoW 共识转为了 PoS 共识, 大概减少了 99.95% 的能源消耗。
这次升级,除了降低了挖矿的能源消耗,还带来了以下两个改变:
- ETH token 开始进入通缩
- 节点架构改变
在 The Merge 前,每天 PoW(Ethereum Mainnet)上大概可以挖出
13,000 ETH,PoS(Beacon Chain)大概可以挖出 1,600 ETH。
Merge 之后,PoW 去除,只保留了 PoS 上的奖励,即每天 ETH 的新
增量变为原来的
P.S 通过 https://ultrasound.money/#burn 的数据来看,在 gas 的平均价格为 11 gwei 时,每分钟会销毁大概 0.80 ETH,即一天大概 会销毁 0.80 * 60 * 24 = 1,152 ETH。如果 gas 的平均价格为 16 gwei 的话,则 ETH 一天的销毁量大概为:1,152 * (16 / 11) = 1,675。
具体详细的数据都可以在 https://ultrasound.money 这个网站上查看。
因为共识机制的改变,所以节点架构也就不得不变了。The Merge 前 只需要执行一个程序,就能进行挖矿。The Merge 后需要执行两个程序: 一个执行层,一个共识层。其中执行层的是原有的 PoW 的软件的,用来 执行验证 tx,公式层是新增的,用来出块的。如下图:
以下是对应的节点的软件:
- 执行层:
- 共识层:
各个软件的使用占比参考:https://clientdiversity.org/#distribution
NOTE:如果自己不想跑节点的话,可以直接使用第三方的节点,比较知名的有三个: Infura,Alchemy 和 QuickNode。其中 Infura 支持主网和所有的测试网,但 Alchemy 只支持主网和 Goerli 测试网。更多 三方的节点供应商可到 https://ethereumnodes.com/ 查看。
如果想自己跑节点的话,现在也有集成的环境,DappNode 和 Avado。 其中 DappNode 可以自己安装,也可以直接购买预装好的硬件,Avado 是软硬件一体 化,只能购买,不能自己安装配置。
既然共识变了,block 也会做出对应的改变。The Merge 后区块主要有三个 变化:block 结构,OPCODE 和 区块的出块时间与状态
The Merge 后,区块结构变得更复杂了,增加了以共识层的一些字段,同时 对于原有的共识层(现在的执行层)的一些字段做了一些改变。下图是 The Merge 之后一个区块的结构图:
在 PoW 的共识中,是有一定的概率出现叔块(ommer/uncle block)的,
所以之前的区块结构中会有 ommer block 的相关字段。但是在 PoS 中,
出块是确定的,不可能出现 ommer block,因此 The Merge 之后区块
执行层生成的区块的中 ommers
为空数组 []
,封装成 tx 就是:
RLP([]) = 0xc0
,即 ommers
字段的值为 0xc0
。因此
ommersHash
的值为 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347
(Keccak256(RLP([]))
)。
同时,PoW 中最关键的两个字段 difficulty
和 nonce
也都设置
为零,即 difficulty
的值为 0,nonce
的值为
0x0000000000000000
(nonce
类型为uint64
,8 bytes)。
汇总起来如下表:
FIELD | CONSTANT VALUE | COMMENT |
---|---|---|
ommers |
[] / 0xc0 |
RPL([]) = 0xc0 |
ommersHash |
0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347 |
= Keccak256(RLP([])) |
difficulty |
0 |
|
nonce |
0x0000000000000000 |
又因为出块由共识层出,所以在 PoW 中用来验证是否具有出块权的
mixHash
字段用来存储上一个出块者选出的这一轮的出块者,
用来证明自己有出块权,并命名为 prevRandao
。prevRandao
是根据 slot number 算出来的随机数。具体的可参见:
EIP-4399 及其讨论
EIP-4399: Supplant DIFFICULTY opcode with RANDOM
和 EIP-4788。
注:Ethereum 2.0 中 slot 可对应 1.0 中的 block,但 严格来说 slot 是 block 的超集,因为 slot 可以包含 block, 也可以没有 block。32 Slots = 1 Epoch,这是在为后续的 sharding 做准备。
The Merge 只改动了两个 OPCODE:
-
BLOCKHASH(0x40)
:准备弃用,虽然还可以正常执行,但是其安全程度 变得很低,因为不是由 PoW 来算 Hash 了。 -
DIFFICULTY(0x44)
:改名为PREVRANDAO
,可以用来获取随机数。
因为 PoS 出块时就是由一个质押者(Staker)来出,所以时间 PoW 的更 具有确定性,PoS 每 12s 出一个块,PoW 是平均 13s 出一个块。
同时 PoS 中没有 PoW 的 confirm 状态,而是将区块分为四中:
- head,就是刚出的块,状态为
unfinalized
- safe head,出块一段时间后,有超过 2/3 的验证者验证过,状态为
safe
- confirmed,由
safe
状态转为finalized
过渡类型,在被其他的节点 添加到链上 - finalized,有超过 2/3 的验证者将这个区块添加到链上,状态变为
finalized
状态为 finalized
的区块被视为可信任区块,即对应 PoW 中的 confirmed
的区块。
-
Ethereum 2.0 的 token 为 ETH2:错。不论是 PoW 的 Ethereum 和 PoS 的 Ethereum,其 token 都是 ETH,从来都没有 ETH2 的 token,ETHW 也不是 Ethereum 之前的 token,而是有人在 The Merge 时进行分叉,利用大量矿工 手里的显卡。在术语中,eth1 指代的是 Ethereum 中的执行层(execution layer), eth2 指代的是 Ethereum 中的共识层(consensus layer)。
-
运行一个节点需要质押 32 ETH:错。不质押 ETH 也可以运行一个节点,只是没有出块权。
-
The Merge 降低了 gas fee:错。The Merge 是共识的替换,并没有降低 gas fee。
-
The Merge 提高了 TPS:错。The Merge 后 Ethereum 的 TPS 并没有显著的提高, 出块的速度只是从原来的平均 13s 一个块到每 12s 一个块。提高 TPS 是 sharding 的目标,而不是 The Merge 的目标。
-
The Merge enabled staking withdrawal:错。取消质押需要等 Shanghai Upgrade 后才能操作。The Merge 时 Shanghai Upgrade 还没完成,所以 The Merge 后 不能马上取消质押。
-
验证者不能收到出块奖励直到 Shanghai Upgrade:错。只要出块,就能得到出块奖励。
-
如果可以取消质押,所以的质押者(验证者)会同时取消质押:错。每个 epoch(6.4 mins) 内最多允许 6 个质押者退出,如果退出者过多,会动态调节每个 epoch 的最大退出数,同时 还在质押的人的 APR 提高,以吸引更多的人进行质押。
Sharding,称为分片,即在水平方向拆分数据库,分散数据库的负载,以达到扩容的目的。 Ethereum 2.0 的 sharding 和 Layer 2 一起来分摊负载,这样就可以减少网络拥堵, 提高 Ethereum 的 TPS。
Sharding 的特性可以让运行 Ethereum 节点的门槛降低,让更多的人运行节点,构建 更稳定的共识网络。
Sharding 的实现分两步:
- Data availability
- Code execution
Data availability 是在提高 TPS 的同时,保证之前的数据(即 state)是可用的; Code execution 是在 state 都可用的情况下执行执行智能合约(Smart Contract), 这一步需要引入 zk-snarks(零知识证明)。
总的来说,这次 Ethereum 的 Merge 并没有完全的升级为 Ethereum 2.0,最多 算是 Ethereum 1.5,毕竟目前 Ethereum 或者说整个区块链都在突破“不可能三角”1, 其中已经有其他的公链走在 Ethereum 前面。但是只能说 Ethereum 在前期积累了 较多的 dapp 和 用户,形成了聚集效应,但是 Ethereum 能否赶在其他新的公链 之前突破这个三角,这个没人能预测。从这次 Merge 来看,我们能知道的是 ETH 的 供应有通缩的趋势,同时 PoW 转为 PoS 变成了有钱的更有钱,没钱的会更没钱,会逐渐 形成两极分化。而且因为 PoS,运行节点的矿工会减少,虽然有机制来保证质押者不会 一次性大量撤出,但是没有质押的人不太会去维护一个节点。
Anyway,去中心化是一种趋势,最终谁能胜出,让我们拭目以待吧。
(reference)=
- The Beacon Chain. https://ethereum.org/en/upgrades/beacon-chain/
- The Merge. https://ethereum.org/en/upgrades/merge/
- How The Merge impacts ETH supply. https://ethereum.org/en/upgrades/merge/issuance/
- Tim Beiko. 2021. How The Merge Impacts Ethereum's Application Layer. https://blog.ethereum.org/2021/11/29/how-the-merge-impacts-app-layer
- Tim Beiko. 2022. Shanghai Planning. ethereum/pm#450
- Wackerow. 2022. SPIN UP YOUR OWN ETHERUM NODE. https://ethereum.org/en/developers/docs/nodes-and-clients/run-a-node/
- Ethereum 2.0 Knowledge Base. https://kb.beaconcha.in/glossary
- EIP4844: https://bicoin8.com/152740.html
- 一文了解以太坊的“扩容杀手锏”danksharding: https://www.defidaonews.com/article/6727438
- V神科普的“Danksharding”到底是什么: https://mp.weixin.qq.com/s/6SaXnZtSHN-pb7rvCm7B9g
- 認識 Danksharding -以太未來擴容的新方案: https://medium.com/taipei-ethereum-meetup/%E7%9E%AD%E8%A7%A3%E7%A5%9E%E7%A7%98%E7%9A%84-zk-starks-ee56a697af76
- beaconcha. https://prater.beaconcha.in/block/3641948
Shanghai Upgrade 需要实现以下的 EIP:
- EIP-1153: Transient storage opcodes
- EIP-2537: Precompile for BLS12-381 curve operations
- EIP-2935: Save historical block hashes in state
- EIP-3651: Warm COINBASE
- EIP-3540: EVM Object Format (EOF) v1 + EIP-3670, EIP-3690, EIP-4200
- EIP-3855: PUSH0 instruction
- EIP-3860: Limit and meter initcode
- EIP-4396: Time-Aware Base Fee Calculation
- EIP-4444: Bound Historical Data in Execution Clients
- EIP-4488: Transaction calldata gas cost reduction with total calldata limit
- Statelessness gas cost changes (Verkle Tree HF1) and the groundwork necessary for it (unhashed state + sync)
Proto-danksharding(又名 EIP-4844)是一个以太坊改进提议(EIP). EIP-4844 提案是在以太坊 2.0 更新完成之前作为临时解决方案。该提案解释了一种新方法来帮助划分交易中所需的信息,例如验证规则和交易格式,而无需实际实施任何分片. EIP-4844 包括以下内容:
- 一种新的交易类型,是“全分片”所需要的
- 全分片所需的所有执行层逻辑
- 全分片所需的所有执行/共识交叉验证逻辑
- 信标块验证和数据可用性采样 blob 之间的层分离
- 完全分片需要信标块逻辑。
- blob 的自我调整和独立的 gas 价格。
EIP-4844 最重要的特性是 blob,它是一种新型事务。blob 类似于常规事务,但它只携带一个额外的数据——称为 blob。数据片段或 blob 是大型数据包(大约 125 KB),但执行此类事务会比执行具有相同数据的 calldata 更便宜。但是,存储在 blob 中的数据无法被 EVM 访问,它只能看到它,而不能验证它。
这些 blob 可以由验证者和用户下载。proto-danksharding 中插槽的数据带宽限制为 1 MB(而不是 16 MB)。数据传输方式的这种变化产生了巨大的影响,解决了我们在以太坊方面都非常熟悉的可扩展性问题。通过采用 EIP-4844 提案,来自 blob 的这些数据不是普通以太坊交易的 gas 使用量。
为了向前兼容,EIP-4844 还引入了对块中包含的最大 blob 数量的限制。这些存储在共识层(信标节点)上,而不是执行层。它们只需要来自 EVM 的确认。
Danksharding会把以太坊转变为一个统一的结算和数据可用性(DA)层。将结算和数据可用性抽样(data availability sampling)统一起来。
PBS 提议者-构建者(数据生成者)分离 (PBS:proposer/builder separation PBS) Builders(数据生成者)是一种新角色,它会聚合所有以太坊L1交易以及来自rollup的原始数据。使用crList,区块提议者可以强制Builders包含交易。
纠删码(Erasure coding)
DA证明数据层
Celestia 模块化区块链分成三部分:执行、安全性以及数据可用性。
verkel
KZG承诺 https://hackmd.io/yqfI6OPlRZizv9yPaD-8IQ
EIP-4488降低calldata费用。
Footnotes
-
区块链不可能三角指的是目前区块链不能同时实现去中心化、可拓展性和安全性。 ↩