科普 | Eth2 验证者的生命流程

以太坊 2.0 使用权益证明机制来保护网络,也就是由许多叫做 “验证者” 的计算机线程来投票决定哪一个区块能够上链(即所谓的 “attesting”,作见证),当然也会自己提出备选区块。不过,验证者不是仅仅只有 “开” 和 “关” 两种状态:从成为验证者到退出验证者的整个生命周期中,其状态会经过多次转换。本文会深入研究验证者的生命周期,展示各阶段和转换过程的实质、如何触发转换,以及每种转换的历时 1

先说明一下时间单位

以太坊 2.0 中的时间通常是用 “epoch(时段)” 这种单位来度量的,1 个时段是 384 秒,也就是六分半钟。为便于理解,基于这一度量的时间我都转化成了以分钟、小时、天为单位,并在附录的脚注中提供详细信息。

 

验证者生命周期概述

 

在深入细节以前,我们先来看看验证者生命周期的概况、了解一下用于表述不同状态的术语。

科普 | Eth2 验证者的生命流程

 

– 图 1:验证者生命周期一览 –
各标签所示的阶段如下:

  • 已存入保证金(Deposited):保证金要约已被以太坊 1.0 区块链打包
  • 等待激活(Pending):保证金要约被以太坊 2.0 网络接受
  • 活跃(Active):验证者要见证区块及提议区块
  • 即将退出(Exiting):验证者即将停止见证及提议区块
  • 被罚没(Slashing):因为作弊被抓,验证者停止见证和提议区块
  • 完全退出(Exited):验证者完全退出,不再参与任一流程

也可由此定义出一种基本状态:“正在见证(attesting)”,激活、主动退出及完全退出都在该状态中,处于该状态的验证者被指望去见证及提议区块。这个状态是最重要的,在此状态下,验证者需要连接以太坊 2.0 网络、同步数据,以履行责任,避免被惩罚。

科普 | Eth2 验证者的生命流程

 

– 图 2:“正在见证” 状态 –
定义完了这些阶段之后,我们就来详细考察它们之间的转换过程。

 

保证金存入阶段

 

保证金要约被接受是验证者生涯的开始;这个接受过程是在以太坊 1.0 链上发生的,因为验证者资金原本就放在以太坊 1.0 链上。但 1.0 链接受之时,2.0 链还不能感知到这笔存款。

验证者的保证金存入阶段大概要历时 7.5 个小时 2,以保证链重组影响到 Eth1 交易的顺序乃至保证金要约无效化的概率足够小。这个阶段完成后,验证者就进入等待激活阶段 3

科普 | Eth2 验证者的生命流程

 

-图 3:从保证金存入阶段转到等待激活阶段 –
 
 

等待激活阶段

 

保证金在 Eth1 链上存入足够久之后,它就会被 Eth2 链接受。这标志着验证者正式开始接受 Eth2 的组织。假设一位验证者存入了至少 32 ETH 4,那么 TA 就可以开始作见证了。

等待激活的验证者会组成一个队列:在一个时间点,Eth2 链上能激活和能退出的验证者数量都是一个比较小的数量(所以要排队)5,以保证验证者集合的稳定性。如果队列是空的,那么等待激活的验证者会在大约 25 分钟以后激活 6;如果队列很长,那可能要几天甚至几周才能激活。不过,排完队之后,验证者就可以直接激活、参与见证。

科普 | Eth2 验证者的生命流程

 

– 图 4:从等待激活到活跃阶段 –
 

活跃阶段

 

一般来说,一名验证者的绝大部分时间都处于这个阶段。活跃验证者大约每 6 分钟要发出一条见证消息,偶尔要自己提议区块 7。验证者会一直保持在活跃状态,除非出现下列三种情况:

  • 该验证者因没有及时发出见证消息而遭受惩罚,最终其余额低于 16 ETH
  • 该验证者主动要求退出,方法是发送相应的一笔交易(在刚激活的 9 天内不能发出此种交易)
  • 该验证者被证明作恶

在前面两种情况中,验证者都会被加入退出队列(一段时间内能离开活跃状态的验证者数量也是有限的,就跟能进入的验证者数量受限一样,大概是每几分钟可以离开 1 个)。

科普 | Eth2 验证者的生命流程

 

– 图 5:从激活状态到即将离开 –
在第三种情况下,验证会被加入作恶者队列,接受惩罚。

科普 | Eth2 验证者的生命流程

 

– 图 6:从激活状态到被罚没状态 –
值得注意的是,如果有需要,验证者总是能够发送额外的保证金要约(包含相同的验证者信息)来 “充值” 余额(但是有效余额的上限是 32)。这样就能避免验证者余额低于 16 然后被放到退出队列里去。

 

即将退出阶段

 

虽然主动退出的验证者表达了停止验证的意愿(不论是自愿还是被迫的),但是,他们是不能立即退出的。相反,虽然处于即将退出状态,他们还是要照常承担职责,跟活跃状态时候一样要见证和提议区块。这样保证了网络的稳定性,避免了验证者立即退出会造成的冲击。

就像验证者想激活的时候有个等待激活状态和队列,想要退出的验证者也有一个队列,一段时间里仅允许少量验证者退出。同样地,主动退出阶段要花费的时间取决于排在前面的验证者有多少。

科普 | Eth2 验证者的生命流程

 

– 图 7:从正在退出到完全退出 –
 

被罚没状态

 

验证者违反协议后被抓,就要立即被罚没 1 ETH(从其余额中扣除),然后进入被罚没状态,这跟即将退出状态类似,但是还要遭受惩罚。这一点我们在下文的 “完全退出” 部分讨论。

科普 | Eth2 验证者的生命流程

 

– 图 8:从被罚没到完全退出 –
处于即将离开状态乃至已经完全退出的验证者,都有可能被罚没(验证者完全退出到可以取出资金以前有一段间隔,在此期间是可以被罚没的)。这样能防止作恶的验证者利用正常的退出机制、在作恶被发现以前逃之夭夭。结果就是状态模型变得更加复杂:

科普 | Eth2 验证者的生命流程

 

– 图 9:补充罚没条件之后 –
 

完全退出

 

转到完全退出状态之时,验证者就正式结束了自己的工作,不再需要见证和提议区块,也不再需要紧跟 Eth2 区块链的实时动态了。

转成完成退出状态之后,大概还有一天的延迟 8,之后才能取出验证者余额。不过,如果一个验证者是从被罚没状态中完全退出的,那还要接受两项额外的惩罚。

第一项,从完全退出到能够取款的间隔会长得多,要 36 天 9。第二项,在这 36 天期间,系统还会根据该验证者作恶被抓的时间点前后 18 天内被罚没的验证者数量对该验证者施加进一步的惩罚。那么该验证者的有效余额损失比例 10 将如下图所示:

科普 | Eth2 验证者的生命流程

 

– 图 10:被罚没的有效余额与同期被罚没的验证者比例的关系 –
36 天的周期走完,被罚没验证者剩下的余额就能拿走了。

从这个生命流程图中可以看出,没有额外的机制让一个完全退出的验证者重新激活。因此,一旦某个验证者退出,其资金就会一直休眠,等待验证者前来取走。不过,Eth2 Phase 0 时候,资金是不能转账的 —— 因此所有完全退出的验证者的资金都仍保存在质押系统中,直至开启转账功能。没有转账功能,是因为用户帐户模式还未引入。

 

补充后的验证者生命流程

 

把上面所有详细信息补充到流程图中,可以得到一个完整的图:

科普 | Eth2 验证者的生命流程

 

– 图 11:补充后的验证者生命流程图 –
请细看其中补充的条件、各阶段的历时、转换过程,这些细节对成功运行 Eth2 验证设施非常关键。从初始化保证金到取出保证金,这个生命流程图点出了各阶段可能发生的情况,也为验证者在全时段中的表现提供了清晰的解释。

(完)


注 1:要注意的的是,以太坊 2.0 的规范没有一个显式的状态机,因此,各阶段的名称都是作者为便于描述而给出的。

注 2:1024 个以太坊 1.0 区块的时间加上 32 个以太坊 2.0 的时段。

注 3:这里假设验证者存够了 32 ETH。如果没有存够,则该验证者会一直停留在保证金存入阶段,直到该验证者另外发起保证金要约,使其余额超过 32 ETH。

注 4:如果不到 32 ETH,那还可以另外再存入,提高该验证者的余额。

注 5:每个时段有 (激活验证者数量 + 主动退出验证者数量 + 被罚没验证者数量)/63356 个名额,下限是 4 个。

注 6:即 4 个时段的长度。

注 7:每一个验证者都需要在一个时段中的某个时隙(slot)发出见证消息,而每一个时隙都会有一名验证者被随机选中作为区块提议者。

注 8:256 个时段。

注 9:8192 个时段。

注 10:注意,罚没力度最高是 100% 的有效余额,但有效余额的上限是 32 ETH,无论该验证者的实际余额是多少。

(完)


原文链接: https://www.attestant.io/posts/understanding-the-validator-lifecycle/

作者: Jim McDonald

翻译: 阿剑

本文由作者授权 EthFans 翻译及再出版。

本文链接:https://www.8btc.com/media/600137
转载请注明文章出处