写在前面:本文来以太坊博客,介绍了eth2的激励机制以及对验证者的惩罚机制。
本文的重点是通过eth2的设计理念来了解它的激励机制。更具体地说,我们研究了影响eth2的激励机制,以及它们是如何以奖励、惩罚和slashing(质押金罚没)的形式实现的。
我们还将介绍如何鼓励验证者(validator)在线以及背后原因,为什么不会因为离线而被slashing等等。接下来我们将开始深入探讨。
如果不是离线,什么情况下才会出现slashing?
slashing有两个目的:(1)使攻击eth2的成本高得吓人;(2)通过检查验证者是否真的执行了自己的任务来防止他们变得懒散。Slashing一个验证者指的是销毁其(部分)质押的资金,前提是当这个验证者出现破坏性行为,且这个行为是可以被证明的。在eth2阶段0中,验证者可能被slashing的两种主要作恶方式是重复投票(double voting)和环绕投票(surround voting):
重复投票是指验证者在同一时间内为两个不同的区块投票,这意味着他们表示对两个不同版本事实的支持。为什么要禁止这样的行为呢?最简单的例子是验证者在区块$A$发送交易$a$,在区块$B$发送交易$b$,两笔交易花费了同一个ETH。这是PoS版的典型双花攻击。
通过对环绕投票的slashing同样阻止了一条链出现两个版本,其惩罚了对不同版本事实投票并同时宣称两个版本都为真的验证者。更具体地说,当验证者对事实的一个版本进行验证,然后又对另一个版本进行验证,但以一种不明确的方式表明他们不再相信第一个版本时,这样的证明(对区块投票)就是环绕投票。
重复和环绕投票是在0阶段中验证者被slashing的唯一可能,但是在后续的阶段会添加额外的规则,以确保验证者确实存储并提供了他们签名的分片数据(这可以防止验证者变懒或隐藏信息)。
在正常操作中,正确遵循协议的验证者不会发出被slashing的投票。如果不是故意的恶意行为,出现slashing消息只可能是遇到了错误或意外。为了尽可能减少这些错误带来的影响,被销毁的stake与同时被slashing的其他验证者的数量成比例。如果少数验证者犯了一些低级错误,那么他们不太可能尝试攻击eth2,因为成功的攻击需要大量验证者。因此,发生在少量验证者身上的slashing被认为是诚实的错误,受到的惩罚也很轻(最少1 ETH)。另一方面,如果许多验证者在类似的时间内犯了一个错误,那么他们被销毁的stake数额将很大(可以是全部的余额),因为这被视作是对网络的攻击。
被slashing的验证者将禁止进一步参与协议,并被强制退出。在诚实错误的情况下,这可以防止违规的验证者由于再次被slashing而对自己造成进一步的伤害;而在真正有人作恶的情况中,这可以让协议删除恶意验证者。
验证者离线了怎么办?
在本该参与协议的时候离线的验证者会得到惩罚,但在正常情况下,如果他们正确地参与了协议,这些验证者只会失去他们本应获得的奖励。这意味着在线时间超过50%的验证者,他们的stake仍然会随着时间的推移而增加。
这个机制的结果是,需要离线维护的验证者客户端通常最好是离线一小段时间,而不是退出并重新加入协议(两者都有相关的延迟)。
这意味着验证器不需要在备份客户端或冗余的网络连接上花费过多的时间,因为离线的影响没有那么严重。事实上,允许两个实体签署消息的系统都是有害的,因为主客户端和备份客户端可能会同时在线,并发出slashing的投票(即上文介绍的重复投票机制)。
这种离线惩罚机制适用于正在完结(finalised)的区块(三分之二的验证者(通过stake数量衡量)是在线的,他们的投票是算数的)。这是正常运行时eth2的预计状态。如果在线节点少于三分之二,那么在eth2就会发生灾难性的错误。在这种情况下,Eth的Casper参与的共识协议家族将无法达成共识。
如果三分之一的验证者离线,eth2会怎么做?
这就是不活跃漏洞(inactivity leak)的来源。不活跃漏洞会慢慢减少离线节点的余额,因此在线验证者与验证者总数(通过stake数量衡量)的比例可以再次超过2/3,因此eth2可以继续作为协议进行决策。
不活跃漏洞是eth2在类似第三次世界大战的事件中幸存的方法之一。如果这样的事件影响了超过三分之一的验证者,那么离线验证者将发现它们的余额减少到不再需要它们的参与,以便eth2能继续以一条链的形式运作。
反相关和去中心化
slashing机制和不活跃漏洞都鼓励验证者做出导致其节点以不同于其他节点的方式失败的决策。也就是说,为了确保尽可能少的slashing和防止不活跃漏洞,验证者可能尝试以不同于其他人的方式使它们的客户端失败。
这给所有验证者带来了压力,要求它们去中心化验证者的各个方面,例如,依赖于Infura这样同一信息源的验证者或使用AWS托管其客户端的验证者,如果出现问题,情况会更糟。
这么多惩罚机制,为什么还有人做验证者?
验证者可能会很懒,收受贿赂,除非有其他激励,否则他们会试图攻击系统。到目前为止讨论的惩罚措施阻止了不良行为,但奖励是需要的,以鼓励验证者执行有利于eth2的行为。
以下是三种主要的奖励方式:
告密奖励
一个验证者对另一个验证者发出警报,提供被slashing的证据,这是对他们清理eth2系统所做努力的奖励。
申请人奖励
验证者被随机分配到产出区块的任务;被选中的验证者称为申请人(Proposer)。申请人的努力可获以下奖励:
包含一段slashing验证者的告密证明包含来自其他验证者的新证据
这些奖励鼓励验证者在选择产出区块时向区块链提供有用的信息。
证明人奖励
证据(Attestations)是验证者同意eth2中一个决定的信号。这些类型的信息构成了共识的基础,并以5种不同的方式得到回报:
让你的证据上链同意其他验证者对链历史的认可同意其他人对链开头的认可让你的证据快速上线指向分配到的分片中正确的区块
扩容验证者收益
在PoS系统中支付验证者有两种常见的方式:固定的奖励和固定的通胀。在固定奖励模型中,验证者的工作奖励是固定的,通胀率取决于有多少验证者注册。这就有了如何正确设置奖励率的问题。如果奖励率设置得太低,那么参与的验证者就会太少,而过高的奖励率则会鼓励在必要的安全性之外进行广泛的验证,并且会浪费资金。
这种互补的模型有一个固定的通胀率,奖励被分配给活跃的验证者。这种模式的好处是允许市场调控支付给验证者的合适金额,他们会根据当前的收益来决定是否参与。这种模式也有缺点,验证者收益可能不稳定,使得个人验证者很难做出盈利决策。这种模型还使协议容易受到阻止攻击(discouragement attack),在这种攻击中,验证者会试图阻止彼此的参与以增加自己的利润(即使可能导致自己在短时间内损失资金)。
eth2的目标是通过选择一个奖励模型,在这个模型中验证者的奖励与质押的ETH总数的平方根成比例。这种互补模型试图抑制通胀率和验证者回报率的变化,同时仍然允许市场在安全的情况下向每个验证者支付适当的奖励。
抱最好的希望,做最坏的打算
本文提到了包括反相关机制、鼓励去中心化和不活跃漏洞帮助eth2顺利运作的内容,但是激励机制运作的基本前提是假设”验证者会懒惰、收受贿赂、试图攻击系统,除非有激励机制告诉他们不要这样做”。 如果有人用本文提到的方法攻击eth2,他们最好准备好损失大量的ETH。