主页 > imtoken新版本 > V神:以太坊PoS算法的动态验证节点问题

V神:以太坊PoS算法的动态验证节点问题

imtoken新版本 2023-06-09 07:14:26

货币

精制

货币选择,深度分析

从区块链初学者到精通区块链,看币赢课就够了

专注于

以太坊算法_以太坊签名算法_以太坊共识算法是什么

以太坊签名算法_以太坊共识算法是什么_以太坊算法

在传统的共识算法中,无论是同步的、部分异步的还是完全异步的网络模型,或者是通过简单容错、拜占庭容错或责任容错来设计的,一般来说,一个协议中的模型包含固定的参与者,至少有一些其中严格按照协议执行。

但在权益证明中,验证者可以存在也可以消失,甚至验证者的绝对数量也可以随着时间的推移而增加或减少。 这次设置的80%的验证节点可能会比另外一次设置的20%的验证节点少,所以什么是固定模型是很模糊的,所以在动态模型中,也许不应该出现这种情况。 那我们该怎么办呢?

以太坊签名算法_以太坊共识算法是什么_以太坊算法

文字 |

首先要解决的问题是同步权益证明,即传统的权益链,没有最终性。 使用此类算法的包括Peercoin、NXT类算法、DPOS、Manuve白皮书中提到的第一个算法,以及目前正在运行的其他项目。

这里的问题很简单,因为无法达到或维持“经济计算结果”; 相反,目标很简单,就是建立一个正反馈机制,可以在分叉的情况下激励验证节点确定主区块,并随着时间的推移加强区块在这条主链上的权威性。

以太坊共识算法是什么_以太坊算法_以太坊签名算法

对于一组固定的验证者,分叉法则很简单:最长的链获胜。 但是如果验证者集是动态的呢? 那么,我们需要避免的攻击如下。

以太坊算法_以太坊签名算法_以太坊共识算法是什么

假设一条链质押 1000 万个 ETH,但其中 450,000 个(4.5%)由攻击者控制。 现在,假设攻击者从某个区块开始维护自己的私有链。 他们不允许新的验证者进入他们的链,尽管他们确实包含一个可以撤销转移的选项。

随着时间的推移,最终链上唯一的股份是攻击者,也许有一些例外。 虽然这条链的 ETH 权益质押品少了很多,但看起来质量要高很多,因为出块人 90% 的时候都会出现,但主链上的出块人显然是用户,下线的次数会更多。 因此,简单的最长链模型也进入了此类攻击。

为了解决这个问题,我们使用与工作量证明相同的方法:我们不只是找到最长的链,而是找到难度权重最高的最长链,在本例中等于质押的 ETH 数量赌注。

以太坊签名算法_以太坊共识算法是什么_以太坊算法

验证者设置现在可以随意进出,甚至可以随着每个区块完全改变。 无论这些节点设置发生什么变化,经济环境仍然运作相同,为最有可能获胜的结果创造激励,拥有更多 ETH 的链胜过拥有更少 ETH 的链。

上述案例之所以比较简单,是因为权益证明结构对每条信息独立评估并对错误进行惩罚,所以即使每毫秒交换参与者的身份,经济模型也不会改变,因为无论他们的历史 不管怎样,每个人都有相同的动机。

另一方面,以太坊最近的 Casper 设计惩罚了这种歧义以太坊算法,即验证者发送两条相互冲突的消息。

在这个模型中,验证器设置发生变化的情况很难处理,因为安全认证是你假设验证器设置是不变的,但实际情况是在变化的。

以太坊共识算法是什么_以太坊签名算法_以太坊算法

一种可能性是简单地使节点设置的更改一次小于 1%,这样只要每 33 个纪元确定 1 个新块,就可以保持一定程度的安全性。

这实际上是可能的。 但是这个解决方案并不是很令人满意,我们可以在更全面地分析问题之后得出更好的结论。

也许有人本能地想到了另一个想法“为了可持续性,我们可以等待验证人A确认验证人B,然后让验证人B从那里开始。” 要了解其工作原理,请考虑以下算法:

每个块必须包含下一个块的验证节点的哈希值。

以太坊签名算法_以太坊算法_以太坊共识算法是什么

对于一个有效的块,它必须指向一个有效的父块并证明(例如,足够的具有相同序列号的 COMMIT)父块已经完成。 也就是说,每个块都必须完成。

这里要注意区块之间的共识,也就是说会有“生成区块1,完成区块1,生成区块2,完成区块2……”的顺序,不像我们其他的算法,新区块甚至在前一个区块共识完成之前就会生成。

在这种情况下,为了发生分叉,区块需要分散在某个区块高度,所以我们可以用我们的安全证明方法来证明,这个区块高度的1/3的验证节点是可以被切割的。

以太坊签名算法_以太坊算法_以太坊共识算法是什么

然而,如果我们尝试将其应用到“交织共识”模型中,生成新区块和敲定旧区块可以同时完成,这在最新版本的 Casper 中也是如此,但存在挑战。

因为并不是100%确定每个周期都会达成共识,我们不能简单的让第N轮的区块成为第N+1轮的验证节点; 如果第 N 轮没有最终完成,那么第 N 轮将有 2 个竞争候选人,你会遇到 2 个冲突的链通过两个断开连接的验证器完成。

以太坊签名算法_以太坊算法_以太坊共识算法是什么

那么,如果我们通过使用 N*50 轮确定性地 (N+1)*50 轮验证器来解决这个问题,并希望每 50 轮你总是至少完成一次,结果会怎样呢? 但是,这也有问题:

以太坊算法_以太坊签名算法_以太坊共识算法是什么

以太坊签名算法_以太坊共识算法是什么_以太坊算法

那么如果我们要交织共识,我们还需要做什么呢? 首先,需要注意的是,状态传递函数实际上是关于给定区块是否已经完成的部分信息:如果一个区块没有完成,那么这个证据将永远不会被上传。 我们可以实现这个“是或可能”的预言。

让我们利用这个特性。 如果预言机说是,我们就不会更改验证器设置; 如果它说是,那么我们改变。

以太坊共识算法是什么_以太坊签名算法_以太坊算法

不幸的是,事情并没有那么简单。

以太坊签名算法_以太坊算法_以太坊共识算法是什么

这里的问题是我们不能立即就是否有共识达成一致,所以有人可以用两组不同的验证节点来生成母块和子块。

所以从这里我们可以得到我们的解决方案。 我们将保留上述结构,但我们将添加一个条款以太坊算法,即每个块必须由先前和新的验证节点完成。

也就是说,在任何情况下,我们以前需要来自 2/3 的活跃验证者的某种类型的信息,现在,我们需要来自大约 2/3 的旧验证者集和新验证者集的 2/3 得到了这个信息。

以太坊共识算法是什么_以太坊算法_以太坊签名算法

以太坊算法_以太坊共识算法是什么_以太坊签名算法

现在,让我们看看如果对给定块是否已完成存在争议会发生什么。

以太坊算法_以太坊共识算法是什么_以太坊签名算法

证明这是有效的很容易。 给定任何父块,子块只能有两个可能的验证器:来自父块本身的验证器,以及由父块加入以服务于该块的验证器。

如果有2个子块,且都完成,则父块中1/3的验证节点将被切割。 如果任何一个子块没有最终确定,那么任何子块中的验证节点都不会改变,因此证明逻辑将转移到任何完成验证的派生链。

我们如何将其与其他共识机制结合起来,包括前面提到的各种共识和分叉选择机制? 上述机制适用于任何在链上进行检查的模型,无论这些检查是否直接相互跟随,或者它们之间是否有块。

所以问题是给定一个检查点,如果该检查点完成检查,那么它可以创建反映已完成或未完成的子检查点。

以太坊算法_以太坊签名算法_以太坊共识算法是什么

对于分叉选择原则,我们不统计单个验证人,而是选择前一个验证人的最少提交和更新后的验证人的提交。 这就是我们需要的所有资源。

原文:@VitalikButerin/safety-under-dynamic-validator-sets-ef0c3bbdf9f6