# ETH升级学习笔记（一）

By [albertma](https://paragraph.com/@albertma-2) · 2022-05-24

---

ETH的merge越来越临近，现在看来2022年应该能完成ETH的升级。

ETH为什么要升级？
----------

*   提高执行速度， 目前官方给出的标量是20TPS，就是每秒执行20个Transaction，
    
    经过升级之后能够到达1000TPS
    
*   提高安全性，目前的ETH 还是使用PoW(proof of work)方法来完成共识，升级之后降使用PoS（Proof of stake）的方法来进行共识。提高了整个网络的安全性，防止算力垄断的问题。
    

更加环保可持续，PoW算法是通过用矿机的算力计算随机值，目前的技术算力越强，耗能越大，随着难度的提高，计算所用的时间也越长，而在使用PoS之后，就会大大节省了计算时间和功率，从而达到节能的目的。

怎么做？
----

目前分三步走

1.  启动信标链 Beacon Chain
    
2.  分片
    
    *   主链合并到信标链 Merge，终止算力挖矿
        
    *   启动分片链
        
3.  执行层启动
    

什么是信标链（beacon chain）？

信标链相当于ETH2.0的心脏；

分片链相当于四肢；

执行层相当于大脑。

\*\*Beacon chain 为2.0提供心跳，从而让系统能够达成共识和和谐。\*\*而为了要达到最终分片的目的（分片是一个大活），而分片的目的增加2.0的处理量。在分片内必须有校验者和执行者来分别对交易进行校验和执行。

### Slot &Epoch

Slot：每隔12秒，就是一个Slot

Epoch：32个slot就是一个epoch，也就是6分24秒

![Epoch0 中的32个slot，创始区块位于Slot0](https://storage.googleapis.com/papyrus_images/2e5e8688e681bc84e3f26be959d8d57811c9fa0ee5706d877c8fe6a566ccb129.png)

Epoch0 中的32个slot，创始区块位于Slot0

slot是可以产生区块的一个时间窗口，也可以没有。

Beacon Chain和Shard Chain 是同步的。每12秒，一个beacon chain的区块和64个shard chain的区块会被产生出来。验证者需要大概的同步时间。一个Slot就像出区块的时间，出块时间也可以是空的，没有区块出来。

在ETH2.0 的验证是PoS的虚拟的挖矿。验证者是积极的参与到eth2.0的，对于验证者，eth2.0有对应的激励和惩罚措施。

一个区块的提议者是从验证者里，通过伪随机方式产生的。大部分时间时间，验证者是通过投票来对beacon block和shard block进行验证，投票决定了信标链的头和分片的头。

### 质押验证者（Staking validators）

Validators 是虚拟的，有Staker来激活产生。在ETH2.0中，用户通过质押ETH去激活和控制Validators。每个Validator需要投入最多32个ETH，但是staker可以stake他所有的ETH，这样每32ETH被stake就会有一个validator被激活。

Validator是由信标链的节点的的客户端来执行的。信标节点具有跟踪和读取信标链的功能。 验证者客户端可以实现信标节点功能或调用信标节点。 一个验证器客户端可以执行一个或多个验证器。

### 交叉联接（CrossLink）

交联是信标块中对分片块的引用。 交联是信标链跟随分片链头部的方式。 由于有 64 个分片，每个信标块最多可以包含 64 个交联。 如果在这个Slot中，63 个分片没有提议的块，那么只会产生一个交联。 Eth2 Phase 1 计划使用交叉链接将分片链植根到信标链中，作为分片分叉选择、分片链终结性和跨分片通信的基础。 所有的分片链都始终跟随信标链。

### 委员会（Committee）

在每个 epoch 中，验证者被平均分配到 slot 中，然后细分为适当规模的委员会。 该slot中的所有验证者都证明了信标链的头部。 该slot中的每个委员会都尝试交叉链接特定的分片。 而洗牌算法会增加或减少每个Slot的委员会数量，以使每个委员会至少有 128 个验证者。

举个例子

假设有16384个验证者。 512个验证者被随机制定给了Slot1，剩下的512的验证者会指定给Slot2，以此类推。 第一个Slot的512个验证者会被分成4个委员会，随机制定给分片。假如分片33，55，22，11 被分片指定，所有的512个验证者会给Slot1 LMD GHOST 投票。128个验证者（4分之一的委员会成员）试图交联分片33，以此类推，每128个验证者都分别交联一个分片：55，22，11.

对于slot2 也是如此。

这个过程会一直持续下去，直至每个验证者都有一个slot，当轮到这个slot的时候，这个验证者可以广播，验证和交链。当这个epoch结束的时候，所有的验证者都有机会去验证和交联。到目前为止，验证者是基于slot而不是epoch进行投票的。就像对当地的政府进行投票，而不是在国家范围内进行投票。所有验证者没有基于同一个事物进行投票。下面在checkpoint和finality会描述epoch范围内的投票。

### 信标链的Checkpoint

checkpoint是每个epoch中第一个slot的区块。如果这个slot没有区块，那么checkpoint就会前面最近的一个区块。每个epoch总会有一个checkpoint，一个区块可以是多个epoch的checkpoint。

![在一个epoch包含有64个slot的状况下的checkpoint](https://storage.googleapis.com/papyrus_images/6622d1e398e24ec410959ee65f5c32339f0727db7559653ab43074703040a390.png)

在一个epoch包含有64个slot的状况下的checkpoint

上图中，slot65和slot128是空的，根据定义epoch2的checkpoint就是slot128，但是slot128没有，结果epoch2的checkpoint就是前一个block，位于slot64。epoch3的checkopoint也是同样，slot192是空的，所以由前一个block位于slot180的区块担任epoch3的checkpoint。

epoch边界区块（Epoch boundary blocks）是一些文献中的术语，是checkpoint的同义词。

当进行一个LMD GHOST的投票的时候，验证者也同样给位于当前的epoch的checkpoint进行投票。这个过程叫target。这个投票叫**Casper FFG vote**，该投票还包括以一个checkpoint，我们叫source。在上图中，位于epoch1的验证者对创世块的checkpoint进行投票（即source的checkpoint），还对target的checkpoint进行投票。 在Epoch2还是相同的验证者对相同的checkpoint进行投票。只有验证者被分配到了一个slot上才能对这个slot发起slot的LMD GHOST投票。但是，所有验证者都可以对每一个epoch的checkpoint发起FFG Vote。

**绝对多数**

所有活跃验证者的总余额的 2/3 投票被视为绝对多数。

即

_假设有三个活跃的验证者：两个有 8 ETH 的余额，一个唯一的验证者有 32 ETH 的余额。 绝对多数票必须包含唯一验证者的投票：虽然其他两个验证者可能对唯一验证者投票不同，但他们没有足够的余额来形成绝对多数。_

### 确定性 Finality

当一个epoch结束的时候这个epoch的checkpoint获得绝对多数的投票，那么这个checkpoint才是合理的。

当checkpoint B是合理的，那么在下一个epoch中的checkpoint也是合理的，那么B才能被最终确认为合理的。通常一个checkpoint在2个epoch 12.8分钟内完成。

平均下来，一个用户的交易，如果处于epoch中间，距离下一个checkpoint还有半个epoch那么这个交易最终确认是2.5个epoch，16分钟。

理想情况下，一个epoch的第22个slot包含超过三分二的证明，因此，交易最终确定的平均时间为14分钟(16+32+22 个slot）。

区块的确认有效来源于区块的验证，验证之后是证明正当，最后才确认有效。

![](https://storage.googleapis.com/papyrus_images/71e200996f76a8112be04acfa132b721f70bf3e4ae3df6a68a583a92ce6ca8d9.png)

—————————————————————————————————————————

_Reference_

[https://ethos.dev/beacon-chain/#validator-lifecycle](https://ethos.dev/beacon-chain/#validator-lifecycle)

[https://ethereum.org/en/upgrades/beacon-chain/](https://ethereum.org/en/upgrades/beacon-chain/)

---

*Originally published on [albertma](https://paragraph.com/@albertma-2/eth)*
