主页 > imtoken钱包ios下载链接 > 以太坊的POS共识机制(二)理解Serenity:Casper

以太坊的POS共识机制(二)理解Serenity:Casper

imtoken钱包ios下载链接 2023-02-08 07:25:50

Vitalik Buterin 的原始帖子,2015 年 12 月 28 日

特别感谢 Vlad Zamfir,他提出了逐块共识的想法,并让我相信它的价值以及 Casper 的其他一些核心想法; 以及 Vlad Zamfir 和 Greg Meredith,感谢他们在该协议方面正在进行的工作。

在本系列的上一篇文章中,我们讨论了 Serenity 的两大旗舰特性之一:深度抽象,这将给平台带来极大的灵活性,让以太坊从“比特币加图灵完备”到“通用去中心化计算”向前迈进了一大步. 现在,让我们将注意力转向另一个主要功能,这也是 Serenity 里程碑的首要原因:Casper 权益证明算法。

投注共识

Casper 在开放经济学共识领域引入了一个全新的理念作为其基础:博彩共识。 押注共识的核心思想很简单:为验证者提供与协议押注哪个区块将被最终确定的机会。 这里对某个区块X下注就是一笔交易,它会在区块X被处理的所有世界中给验证者带来Y币的奖励(奖励是凭空“打印”出来的,所以是“与协议”投注),并且在所有区块 X 都未被处理的世界中,验证者被收取 Z 币的罚金(罚金被销毁)。

(译注:A world 这里应该理解为区块链未来可能的状态。)

验证者只有在他们认为区块 X 在人们关心的世界中被处理的概率足够高以至于这是一笔值得的交易时才愿意下注。 然而,经济递归的有趣部分来了:人们关心的世界,即用户想知道自己的账户余额或合约状态时用户客户端的状态,本身就是基于人们对派生出哪个区块下注最多。 因此,每个验证者都有动机根据他们对其他人的赌注进行赌注,从而推动流程走向收敛。

一个有用的类比是工作量证明共识——它本身看起来如此独特,以至于它实际上可能是抵押共识的一个特殊子模型。 原因如下:当你基于区块挖矿时,你是在花费每秒E的电费来换取每秒p的出块概率,在包含你的区块的所有分叉中得到R个币,得到其他分叉中的 R 币。 叉子里没有一分钱。

以太坊挖矿算法_以太坊联盟和以太坊的关系_以太坊的共识算法

因此,每一秒,你都可以在你挖出的链上获得p*RE的预期收益,而在其他链上承受E的损失; 因此,你的挖矿选择可以理解为押注你所在的链有 E:p*RE 获胜的相对概率(赔率)。 例如,假设p等于百万分之一以太坊的共识算法,R为25个币约等于10000美元,E为0.007美元,那么你在中奖链上每秒的预期收益为0.000001 * 10000 - 0.007 = 0.003,你失败链上的损失是 0.007 电费,所以你打赌你开采的链有 7:3 的相对概率(或 70% 的概率)获胜。 请注意,工作量证明满足上述经济递归要求:用户的客户端通过处理工作量最大的链来计算其帐户余额。

以太坊的共识算法_以太坊联盟和以太坊的关系_以太坊挖矿算法

Staking consensus 可以看作是一个框架,它结合了以特定方式看待的 proof-of-work,也适用于为其他类型的共识协议提供促进融合的经济游戏。 例如,在传统的拜占庭容错共识协议中,在最终“提交”某个结果之前,通常会有“预投票”和“预提交”的概念; 在投注共识模型下,我们可以把每个阶段都变成赌注,让后期的参与者更有信心相信前一阶段的参与者“是真心的”。

如果有必要克服 51% 攻击等极端情况,质押共识也可用于激励带外人类共识的正确行为。 假设有人在一条 PoS 链上购买了一半以上的币并发起攻击,社区只需要协商一个补丁让客户端忽略攻击者的分叉,攻击者和他的朋友就会自动失去所有的币。 硬币。 一个非常雄心勃勃的目标是让在线节点自动进行这种分叉决策——如果能够成功实现,这是传统容错研究中被低估但很重要的结论——在强同步的假设下,即使几乎所有节点都在尝试之后攻击系统,其余节点仍然可以达成共识——也可以纳入对赌共识的框架。

在投注共识的背景下,不同的共识协议仅在一件事上有所不同:谁可以下注,赔率是多少,多少? 工作量证明只提供一种赌注:赌获胜链有 E:p*RE 的相对概率包含你自己的区块。 在广义投注共识中,我们基本上可以根据一种称为评分规则的机制提供无限多种投注:1:1 的非常小的赌注,1.000001:1 的小赌注,1.000002:1 的小赌注,等等。

以太坊联盟和以太坊的关系_以太坊的共识算法_以太坊挖矿算法

参与者仍然可以在每个概率级别选择这些微小边际赌注的确切大小,但总的来说,这种技术使我们能够相当精确地读出验证者认为一个区块将被确认的概率。 如果验证者认为一个区块有 90% 的概率被确认,那么他们将接受所有相对概率低于 9:1 的赌注,拒绝所有相对概率高于 9:1 的赌注,协议将是准确的基于此,这会导致 90% 的“意见”认为该块将被确认。 事实上,启示原则告诉我们,我们可以要求验证者直接将他们对某个区块被确认概率的“意见”给出签名消息,让协议代表验证者计算赌注。

以太坊联盟和以太坊的关系_以太坊的共识算法_以太坊挖矿算法

由于微积分的魔力,我们可以使用简单的函数来计算每个概率级别的总奖励和总惩罚,其结果在数学上等同于 sum。 一个简单的例子是 s(p) = p(1-p) 和 f(p) = (p/(1-p))^2/2,其中 s 计算如果您投注的事件发生,您可以获得的奖励, f 计算你的惩罚,如果它没有发生。

博彩共识的广义形式有一个重要的优势。 在工作量证明中,给定区块背后的“经济权重”仅随时间线性增加:如果一个区块有 6 个确认,则矿工只需花费区块奖励的 6 倍左右来撤销它(在均衡状态下),并且如果一个区块有 600 个确认,那么撤销它的成本是区块奖励的 600 倍。 在广义投注共识中,验证者对区块的经济权重可以呈指数级增长:如果大多数其他验证者愿意以 10:1 的比例下注,你可能想以 20:1 的比例下注; 几乎都增加到 20:1,你可能会跳到 40:1 或更高。 因此,一个区块很可能会在几分钟内达到“准最终确定”状态,这取决于验证者的勇敢程度(以及协议提供的激励大小),其中验证者的所有存款都变成了投注支持这个街区。

在 50,000 英尺高空观察:区块链是一个关于自身的预测市场。

以太坊联盟和以太坊的关系_以太坊的共识算法_以太坊挖矿算法

区块、链条、共识和拉锯战

Casper 的另一个独特之处在于它的共识是逐块(by-block)而不是像工作量证明那样逐链(by-chain):共识过程是在一定高度上对区块的状态进行决策的独立于所有其他高度。 这种机制确实导致了一定程度的低效率——特别是,一个赌注必须表达验证者对高度上的每个区块的意见,而不仅仅是链的头块——但在这种模式下,对于赌注共识来说,实现了赌注策略会很简单,而且它有对高速区块链友好的优点:理论上,这个模型的区块生成时间甚至可以比网络传播时间更快,因为区块可以相互独立产生,虽然有一个明显的附带条件,即区块的最终确定仍需要一些时间。

在链上达成的共识中,我们可以把共识过程看成是每个分叉点正无穷大和负无穷大之间的拉锯战。 每个分叉的“状态值”的含义是右边最长链的区块数减去左边最长链的区块数:

以太坊联盟和以太坊的关系_以太坊挖矿算法_以太坊的共识算法

为了找到“正确的链”,我们只需要从创世块开始,在每个分叉处,如果状态值为负则向左移动,否则向右移动。 这里的经济动机很明显:一旦状态值变为正值,就会有强大的经济压力将其推向正无穷大,尽管速度很慢。 如果状态值变为负值,就会有强大的经济压力将其推向负无穷大。

顺便说一句,在这个框架下,GHOST评分规则的核心思想变成了一个自然的归一化:与其只用最长链的长度来计算状态值,不如去计算一个上所有区块的个数货叉的单面:

以太坊联盟和以太坊的关系_以太坊的共识算法_以太坊挖矿算法

在区块达成的共识中,也有这种拔河比赛,但此时“状态值”只是一个数字,可以通过协议的某些操作任意增减。 在每个高度,如果状态值为正,则客户端处理该块,如果为负则不处理。 请注意,虽然工作量证明目前是每条链的共识,但它不一定是:我们可以很容易地想象一个协议,其中包含有效工作量证明的块不引用父块,但相反,给它自己的历史所有块投+1 或-1 票。 +1 票只有在他们投票的区块被处理时才会得到奖励,-1 票只有在他们投票的区块没有被处理时才会得到奖励:

以太坊挖矿算法_以太坊的共识算法_以太坊联盟和以太坊的关系

以太坊挖矿算法_以太坊联盟和以太坊的关系_以太坊的共识算法

然而,这样的设计在工作量证明中效果不是很好,原因很简单:如果你需要为每一个历史高度进行投票,那么需要投票的数量会随着时间的平方增长,这将很快使系统崩溃。 在投注共识中,由于拔河比赛可以指数级速度收敛到最终确定性,因此投票的开销更容易承担。

这种机制的一个违反直觉的结果是,在所有后续块都已完成后,一个块可以保持未确认状态。 这看起来是一个很大的效率问题,因为如果一个有 10 个区块的区块的状态不断重复变化以太坊的共识算法,每一次变化都会导致这 10 个区块的状态转移重新计算,但实际上,完全相同的事情发生在链上-to-chain in consensus,而 per-block consensus 实际上可以为用户提供更多信息:如果他们的交易在区块 20101 被确认并完成,并且他们知道无论第 20100 个区块的内容是什么,这笔交易都有一个definite result,那么他们关心的结果已经定型了,即使结果之前的部分历史还没有定型。 逐链共识算法永远不会具有此属性。

那么 Casper 究竟是如何工作的呢?

在所有基于安全储备的权益证明协议中,都有一组担保验证者,这些信息也记录在系统状态中。 如果您想在某个协议下注或进行关键操作,您必须先加入该群,以确保您的恶意行为受到惩罚。 加入和退出安全验证器是一种特殊类型的交易,协议的关键操作(例如投注)也是一种交易。 权益可以作为独立的对象在网络上传输,也可以打包成区块。

基于Serenity的抽象精神,所有的逻辑都是通过一个Casper合约来实现的,它提供了投注、加入、退出以及获取共识信息等一系列功能,所以我们只需调用Casper合约就可以提交投注或进行其他操作. Casper 合约的内部状态如下所示:

以太坊联盟和以太坊的关系_以太坊的共识算法_以太坊挖矿算法

本合约会记录当前的验证人集合,并为每个验证人记录6个主要数据:

“验证码”的概念是 Serenity 的另一个抽象特征。 其他权益证明协议要求验证者使用特定的签名验证算法,而 Serenity 的 Casper 实现允许验证者自定义一段代码,可以接受哈希和签名作为参数,并返回 0 或 1。赌注被接受,代码可以使用签名来验证赌注的哈希值是否正确。 默认验证码是椭圆曲线签名验证算法,大家可以尝试其他算法:多重签名、门限签名(有发展成去中心化资金池的潜力!)、Lamport签名(译注:可以抗量子计算机)、 ETC。 。

每个赌注必须包含一个比前一个赌注大 1 的序号,并且每个赌注必须包含前一个赌注的哈希值。 因此,您可以将验证者的一系列投注视为一种“私有链”; 这样理解,验证者的意见其实就是链的状态。 验证者意见是描述以下问题的表格:

以太坊联盟和以太坊的关系_以太坊的共识算法_以太坊挖矿算法

赌注是一个看起来像这样的对象:

以太坊的共识算法_以太坊挖矿算法_以太坊联盟和以太坊的关系

这里的关键信息是:

在 Casper 合约中处理投注的功能分为三个部分。 首先,它验证赌注的序列号、最后赌注的哈希值和赌注的签名。 然后它用赌注中的新信息更新验证者的意见表。 一个赌注通常只有少量的概率、区块哈希和状态树根节点更新,所以大部分意见表不会改变。 最后,它将评分规则应用于意见表:如果你的意见是相信一个区块有 99% 的机会被最终确定,并且,如果该区块在该特定合约运行的特定世界中被最终确定,你将得到99分,否则你将失去4900分。

需要注意的是,由于 Casper 合约的这个功能是作为状态转换功能的一部分执行的,因此执行过程充分了解每个先前的块以及状态树的根节点是什么,至少在它自己的世界中是这样。 . 尽管提议区块 20125 并对其进行投票的验证者并不知道区块 20123 是否会从外界最终确定,但他们会知道验证者何时到达该区块——或者,他们可能会在决定跟随哪个世界之前处理两个世界。 为了防止验证者在不同的世界提供不同的赌注,我们还有一个简单而严格的条款:如果你有两个相同序列号的赌注,或者你提交了一个无法被 Casper 合约处理的赌注,你将失去所有保证金。

从验证者池中退出需要两个步骤。 首先,您需要提交最大高度为-1的投注; 它将自动结束投注链并开始四个月的倒计时(在测试网上为 20 个区块/100 秒),之后投注者可以调用另一个方法 withdraw 来提取他的资金。 任何人都可以触发提款,资金将被发送回之前发送加入交易的地址。

区块提案

每个区块包含 (i) 一个代表区块高度的数字,(ii) 提议者的地址,(iii) 交易树根节点的哈希值和 (iv) 提议者的签名。 一个有效区块的提议者地址必须是协议安排在该高度出块的验证者地址,签名必须能够通过验证者的验证码验证。 高度为 N 的区块的提交时间由公式 T = G + N*5 确定,其中 G 是原始区块的时间戳。 因此,一般来说,每5秒就会出现一个新区块。

NXT 风格的随机数生成器用于确定谁应该在每个高度生产区块,并且不可避免地丢失区块生产者也作为熵的来源。 这种方法背后的原因是,虽然这个熵可以被操纵,但操纵的成本非常高:你必须放弃创建区块的交易费用的好处。 如果有必要,我们也可以将 NXT 风格的随机数生成器替换为类似 RANDAO 的协议,并将此成本提高几个级别。

以太坊联盟和以太坊的关系_以太坊的共识算法_以太坊挖矿算法

验证者策略

那么如何在Casper协议下充当验证者呢? 验证者有两种主要类型的活动:生产区块和抵押。 区块生产是一个独立于其他一切发生的过程:验证者收集交易,当轮到他们生产一个区块时,他们生产一个区块,对其进行签名并将其发送到网络。 投注过程有点复杂。 当前的 Casper 默认验证器策略旨在模仿传统的拜占庭容错共识:观察其他验证器如何下注,取值为 33%,并进一步向 0 或 1 移动。

为了实施这个策略,每个验证者收集其他验证者的股份,并尽可能保持这些数据是最新的,以跟踪每个验证者当前的意见。 如果某个高度没有或者很少有其他验证者发表过意见,那么我们用下面的算法来处理:

这个过程也增加了一些随机性以防止“卡住”的情况,但基本原则保持不变。

如果对于某个高度,其他验证者已经发表了很多意见,那么我们使用以下策略:

以太坊的共识算法_以太坊挖矿算法_以太坊联盟和以太坊的关系

在这个策略中,验证者可以通过改变 e 的形状来自由选择自己的风险厌恶程度。 选择一个函数,其中 e(x) = 0.99999 for x > 0.8 会起作用(并且可能会产生与 Tendermint 相同的行为),但如果拥有大部分质押资金的验证者是恶意的,则风险会更大 是的,他们只需要一个很低的成本来设计使用e函数输掉所有押金的验证者(攻击策略是先预测概率为0.9,引诱其他验证者期望0.99999,然后突然改成预测0.1,迫使系统期望收敛于 0)。 另一方面,收敛速度非常慢的函数将导致系统在不受攻击的情况下效率较低,因为最终确定会更慢并且验证者将花费更长的时间来确定每个高度。

现在,作为客户,您如何确定当前状态? 过程基本是这样的:先下载所有的区块和赌注,然后用上面的算法形成自己的意见,但不要发表意见。 它只是按顺序在每个高度进行观察,如果概率高于 0.5 则处理一个块,否则跳过它。 处理所有块后的结果状态可以显示为区块链的“当前状态”。 客户端也可以对“敲定”给出主观意见:当高度k之前的每个区块,意见要么高于99.999%,要么低于0.001%,则客户端可以认为前k个块被敲定。

进一步的研究

Casper 和广义博彩共识仍需要大量研究。 具体包括以下几个方面:

本系列的下一篇文章将介绍 Serenity 的可扩展性工作,预计将与 Serenity 的第二个概念原型(POC2)同时发布。