了解时隙之争

Understanding slot battles | Cardano Explorer (cexplorer.io)

卡尔达诺的PoS是基于中本共识的。因此,只可能实现所谓的块的概率终结性。因此,池有时会产生孤立的块。我们将讨论发生这种情况的情况以及网络如何处理它。

在卡尔达诺网络中,区块是如何产生的

一个卡尔达诺历期持续5天,并以一秒的长度划分为所谓的“槽”。一个epoch有432,000个槽。卡尔达诺协议的随机性被配置为大约每20秒产生一个区块。因此,每个epoch大约可以创建21,600个区块。

每个注册的矿池都是一个潜在的候选矿池,可以在特定的槽中生成一个区块。有权制造区块的节点称为槽领导节点。槽头的选择必须是随机的。该网络运行的彩票不依赖于任何中央控制。单个节点可以自主地发现他们是否在给定的插槽中赢得了彩票,即他们是否可以产生一个新的区块。

使用一种称为可验证随机函数(VRF)的加密原语来绘制槽leader。VRF是由Micali、Rabin和Vadhan在1999年提出的,用于各种加密方案、协议和系统中。

VRF的基本概念很简单。密钥的所有者可以计算输出值以及任何输入值的相关证明。其他人使用证明和相关的公钥(验证密钥)可以检查输出值是否确实计算正确。

在卡尔达诺网络中,只有创建必要证书并将其存储在区块链中的节点才能制造区块。通过注册证书,所有必要的信息(包括验证密钥)都存储在区块链中。因此,所有节点都拥有验证其他节点生成的区块(和证明)的所有相关信息。

当一个节点从网络接收到一个块时,它可以通过VRF证明来验证它是有效的,并且它是由该插槽中真正的领导者节点创建的。

VRF算法需要多个输入才能评估给定节点是否已成为特定槽位中的槽leader。除其他外,这些包括当前槽位ID和前一个epoch的所有VRF输出的⅔,从中创建单个哈希(值)。这个散列也称为Nonce。Nonce使得提前计算VRF结果变得不可能。

每个节点需要计算自己的阈值。这是一项简单的任务,因为它是由赌注的大小决定的。赌注由运营商(质押)和所有赌注者的ADA硬币组成。赌注越大,在给定的时间段内,矿池可能产生的区块就越多。

每秒钟,每个池都会使用VRF算法来获得一个VRF输出。将VRF输出与阈值进行比较。如果VRF输出小于阈值,则该矿池成为槽位领导者,并获得生成新区块的权利。
image

在我们的示例中,NODE 7成为槽的领导者。VRF输出为28,454,834,阈值为30,000,000。因此,节点会生成一个新的区块,并在区块头中插入VRF证明(VRF输出)。

提议区块中包含的VRF证明用于验证。网络中的任何其他节点都使用VRF算法来验证该块是否有效。除了VRF证明外,该块还必须由KES密钥(密钥演化签名加密)签名。这是下一个安全级别,因此,如果攻击者能够以某种方式破坏VRF的操作,他们仍然没有操作员的KES密钥来对块进行签名。

谁会在老虎机大战中获胜?

当2个矿池在同一槽位挖出一个区块时,就会发生槽位大战。一个槽里有两个槽头。因此,可能存在两个相互竞争的区块。每个给定的槽位只能插入一个区块,因此必须丢弃其中一个。据说后者会成为孤儿。

在我们的示例中,由于VRF输出为28,454,834,小于30,000,000的阈值,NODE 7成为槽位领导者。在同一槽位中,node3也成为槽位领导者,VRF输出为16,459,996,小于阈值27,500,000。

两个节点都创建了一个新的区块,将VRF输出(VRF证明)插入其中,并将其分发给卡尔达诺网络中的其他节点。孤立的区块不计入池奖励。这意味着只有一个矿池可以从同一槽位产生的区块中获得奖励。

如果区块分发速度快(低延迟),网络中的许多其他节点可能会同时接收到这两个区块。因此,节点7以VRF输出的区块为28,454,834,节点3以VRF输出的区块为16,459,996。

如果一个节点在一个槽位接收到两个有效块,它将选择VRF输出较低的那个。节点丢弃具有更高VRF证明的块,实质上使其成为孤儿。赌注较低的矿池在老虎机大战中具有优势,因为产生较低VRF输出的可能性更大。

你可能已经知道,在我们的例子中,NODE 3挖出的红色区块战胜了NODE 7挖出的绿色区块。

如果发生老虎机大战,赢家由随机性决定。池运营商没有机会影响网络中其他节点上发生的区块选择,只要他们诚实行事。

从区块链的角度来看,情况是这样的。在N+40插槽发生了一场槽战。一个节点接收在同一槽中生成的两个块。它选择红色块作为区块链中的最后一个块,并丢弃绿色块。另一个区块是在槽位N+60中铸造的,槽位领导者已经正确地跟随了红色区块。随着每增加一个区块,很明显,红色区块背后的区块链将永远留在区块链中,而绿色区块将成为孤儿。

正如我们在开始时提到的,大约21,600个区块可以在一个epoch中被铸造出来。在过去几个代币中,最好的结果是在代币411中挖出了21,417个区块。通常,在一个时代,大约有20,900到21.11个区块被铸造出来。一个节点可以成为一个槽领导,但由于某种原因,它可能无法铸造一个块(例如,因为它在成为槽领导时不在线)。

老虎机战斗发生的比较频繁,每个纪元大约有420次,也就是每小时4次。它约占区块总数的2%。因此,在将您的交易视为最终区块之前,等待几个区块是一个好主意。如果每小时大约有4个插槽战,我敢说等待6个区块(2分钟)足以确保区块是最终的。

结论

由于另一个原因,块可能成为孤儿。如果它没有足够快地到达成为槽领导的节点,槽领导将被迫跟随前一个块(最后一个可用的块)。我们下次再讲。