(奥维的风光,梵高)
前言:以太坊phase 0的核心是信标链,它负责协调以太坊网络。作为验证者,Ta是如何参与ETH2.0网络的?本文从验证者的视角非常简洁地阐述了验证者的参与过程,很适合想成为ETH2.0网络验证者的读者阅读。本文作者是Alex T,由“蓝狐笔记”的“SIEN”翻译。
(分叉选择,源于Oliver Roos)
本文试图用简单的语言来解释信标链的工作方式。在ETH2.0中,信标链是整个网络的骨干,以非常复杂的方式协调所有一切,因此,下面的阐述有意地进行了大量的简化。为了简单起见,我将主要考虑网络和验证者正常工作的情况,并忽视大多数毫无疑问会发生的恶意行为。诸如罚款、消减以及孤块、重组等事情在这里暂不描述,后续再表。
信标链是一个区块链,从本质上讲,是连接在一起的区块的链,但有一些惊喜。
我们的旅程从一个不为人知的英雄开始,Ta就是验证者。验证者将其32 个ETH的“小金库”锁入在当前ETH1.0网络上的质押合约中,以便通过运行验证者节点来积极参与ETH2.0网络。
在验证者出发之前,需要一些先决条件。理想情况下,验证者有权访问ETH1.0节点和信标链客户端节点,两者均已同步。
一旦我们的英雄(蓝狐笔记:此处指验证者)将其ETH存入质押合约,他的ETH2.0之旅便开始了。存储过程的一部分是,他为其信标链的ETH获得了公钥、冷热私钥。通过浏览器,公钥可用来查看验证者状态和活动。热私钥用于投票和提议,而冷私钥应该离线存储,因为它是金钥匙,它允许将来让你访问你的ETH。
需要注意的是,这里有一件非常重要的事情,一旦你发送了质押金,你必须保证验证者客户端处于运行状态,直到你停止成为验证者。在Phase 0阶段,如果你退出,你将无法重新加入成为验证者,同时也无法转移资金。否则,你会失去ETH。(蓝狐笔记:这个提示很重要,一定要保证验证者客户端的正常运行,以避免产生损失)
验证者的第二步是等待大约7.5个小时(当前是1024个ETH1.0区块和1024个ETH2.0 slot),以确保存储的交易无法被逆转。验证者利用这段时间来设置一个可用的验证者客户端,添加热私钥并将其连接到先前设置的信标链客户端。
一旦等待结束,存储资金被信标链识别,验证者被添加到激活队列中。在这个队列中,可以猜想,我们会继续等待,这取决于队列中有多少其他的验证者。现在已有327,680个激活的验证者,每个epoch(周期)只有4个验证者可以活跃。
要想理解epoch,需要先了解什么是slot(插槽)。slot是12秒的时间间隔,可以生产一个区块。最终这是一个区块链,因此,我们必须在某个时间点产生区块。空slot可以存在,且它们被称为跳过slot。
为了确保事情能够井然有序,slot在一起组成分组,在一个epoch一次32个slot。这分散了一些信标链客户端需要做的一些操作,这反过来应该减少运行所述客户端的计算机的计算负担。
在队列中排队后,验证者终于被激活。在每个epoch开始前,验证者都会得到一份花名册。在这个花名册中,他会看到每个epoch,跟他的一些同行一起,他需要投票决定将哪些区块包含到一个slot中。在某些epoch,他看到他也有责任为slot提议区块,而其他人可以投票。
在每个epoch之前,信标链(使用特殊形式的随机数生成)的每个slot选择一个验证者来提议区块。
它也采用整个可用的验证者池,将他们分成每个epoch的slot数,然后进一步将其分成上述的组,也就是委员会。委员会可以将其选票汇总在一起。最后,对于每个epoch,每个验证者需要按照指示进行一次投票,并且如果被选中,则将需要提议一个区块。
回到我们的主角,验证者,我们发现他的生活相当单调。正如我提到的那样,他花了很多epoch询问信标链客户端在每个epoch前他需要做什么,之后再尝试去执行。然后每个epoch他需要去投票(也称为去证明或去确认),以使得其他人提议的区块被包括进来。考虑到所有的可用信息,它会真诚地执行操作。并且,通常来说,仅查看一个带有正确信息的提议区块是件简单任务。
时不时地会发生一些让人激动的事情,我们的验证者被选择去提议区块。一旦相应的slot出现,它就会从网络上查看可以看到的内容,上一个区块是什么(也称为网络头)以及可以看到在网络上等待被包含进区块中的验证。随后,它将所有这些信息打包进入一个新区块,然后将其发送到网络。
它收集到的信息越多发送越快,它可以收到的潜在奖励就越多,如果该区块被包含在规范链中的话。在提交该区块后,假定一切都正确,通过收到的证明数量,它会看到该区块在随后的区块中被其他同行验证。
在一个epoch结束之后,信标链还将ETH发放给正确履行职责的验证者。其中一些发给投票的人,更大部分发给提议区块的人。但是,如果没能正确完成任务,人们也会遭到罚款。更糟糕的是,如果验证者因为恶意行为,或因为技术困难,导致发生诸如在同一slot提议两个区块之类的事情,他们会被消减,这意味着会损失更多的资金且从链中被踢出。
区块链是一个个区块逐个构建起来的,通过使用最后一个可用区块作为父块,每个区块查看之前slot中的区块,将自己锚定到链上。不过,由于现实世界中的事情都不是童话,因此,诸如网络延迟之类的事情会导致产生很多问题,因为并不是所有的验证者都有相同的情况。延迟意味着一些验证者可以看到某些提议的区块,而其他人可能看不到。
为了解决这个问题,必须在验证者客户端中引入一个称为“分叉选择”的强大实体。其目的有点类似于法官。在每个slot,它会检查自己拥有的所有可用信息,并且如果考虑链的历史存在多种选择,它会尝试选择其中一个,选择回溯到构建时刻获得投票数最多的那个。这个机制可以确保它只有一个规范链,但它有个称为重组的副作用,可能在短期内对链进行重组。当重组发生时,奖励和惩罚也会发生改变,以反映新链的历史和履行的职责。
如果总验证者池中至少有三分之二的投票赞成同一区块代表一个epoch的开头,那么,该epoch被认为是链中的有效部分。
合理性提供一个合理的确定性,即是说,链不会通过重组而改变。为了确定链不会发生改变,当有一个连续的其他epoch已经被证明且建立在其上时,该epoch会被视为具有最终性。换言之,具有最终性的epoch是被已经证明的epoch,而其子epoch也是被证明的。
总的来说,这就是信标链验证者的旅程:
同步信标链客户端
发送32 ETH质押金到存储合约
启动验证者客户端
等待,直到质押存款被确认,且被添加进入验证者激活队列
运行并确保验证者客户端持续运行:
-对区块进行投票/证明,以使其包含到链上
-被要求时提议新区块
获得收益$$$
本文简要提及或忽略了以下主题,这些主题都需要用专门文章来阐述:
*随机数的生成—RANDAO
*分叉选择规则—Casper FFG
*最终性
*奖励和惩罚计算方法
*消减
*验证者生命周期,包括自愿和强制退出
*任何与Phase 1+相关的内容
*任何技术性的内容,例如BLS签名、SSZ编码或数据结构
------