53 lines
3.5 KiB
Markdown
53 lines
3.5 KiB
Markdown
![]() |
---
|
|||
|
title: 领导者到验证节点的过渡
|
|||
|
---
|
|||
|
|
|||
|
验证节点通常把时间花在验证区块上。 但是,如果一个质押者将自己的质押委托给一个验证节点,那么它偶尔会被选为_插槽领导者_。 作为一个插槽领导者,验证节点负责在指定的_插槽_内产生区块。 一个插槽有一定数量的预先配置的_出块_持续时间。 这些ticks的持续时间是通过本文后面描述的_PoH记录器_来估计的。
|
|||
|
|
|||
|
## BankFork
|
|||
|
|
|||
|
BankFork跟踪银行状态在特定插槽上的变化。 一旦最后一次勾选被登记,状态就会被冻结。 任何写入的尝试都会被拒绝。
|
|||
|
|
|||
|
## 验证节点
|
|||
|
|
|||
|
验证节点对银行状态的许多不同的并发分叉进行操作,直到生成一个高度在其领导插槽内的PoH哈希。
|
|||
|
|
|||
|
## 插槽领导者
|
|||
|
|
|||
|
一个插槽领导者只在一个分叉上搭积木,也就是它最后投票的那个分叉。
|
|||
|
|
|||
|
## PoH记录器
|
|||
|
|
|||
|
插槽领导者和验证员使用PoH记录仪来估计插槽高和记录交易。
|
|||
|
|
|||
|
### 验证时的PoH记录器
|
|||
|
|
|||
|
PoH记录器在验证时充当一个简单的VDF。 它告诉验证节点何时需要切换到插槽领导者角色。 每次验证节点对一个分叉进行投票时,它应该使用分叉最新的[blockhash](../terminology.md#blockhash)来重新播种VDF。 重新播种解决了两个问题。 首先,它将自己的VDF与leader的VDF同步,让它更准确地确定自己的leader插槽开始的时间。 第二,如果上一个领导者倒下了,所有的挂钟时间都会被计入下一个领导者的PoH流中。 例如,如果领导者开始时少了一个区块,那么它产生的区块应该有两个区块的PoH持续时间。 较领导者的持续时间可以确保下一个领导不会试图从上一个领导的插槽中抢走所有的事务。
|
|||
|
|
|||
|
### 领导时的PoH记录器
|
|||
|
|
|||
|
插槽领导者使用PoH记录器记录交易,及时锁定其位置。 PoH散列必须来自于前一个领导者的最后一个区块。 如果不是,其区块将无法通过PoH验证并被集群拒绝。
|
|||
|
|
|||
|
PoH记录器的作用还在于当其插槽结束时,通知插槽领导者。 如果记录交易会在其指定的插槽之外产生PoH高度,领导者需要注意不要修改其库。 因此,领导者在生成条目的PoH哈希值之前,不应承诺修改账户。 当PoH高度落在其插槽之外时,其管道中的任何交易可能会被放弃或转发到下一个领导者。 转发是优选的,因为它将最大限度地减少网络拥堵,允许集群宣传更高的TPS容量。
|
|||
|
|
|||
|
## 验证节点循环
|
|||
|
|
|||
|
PoH记录器管理模式之间的过渡。 一旦账本被重放,验证节点可以运行,直到记录器指示它应该成为插槽领导者。 作为插槽领导者,该节点就可以执行和记录交易。
|
|||
|
|
|||
|
循环与PoH同步,并做插槽领导者功能的同步启动和停止。 停止后,验证节点的TVU应该发现自己的状态和不同的领导者给它发送相同的块一样。 以下是该循环的伪代码。
|
|||
|
|
|||
|
1. 查询LeaderScheduler的下一个分配的插槽。
|
|||
|
2. 在所有的分叉上运行TVU。 1. TVU将把投票发给它认为是 "最好的 "分叉。 2. 每次投票后,重启PoH记录器,直到下一个指定的分叉。
|
|||
|
|
|||
|
插槽。
|
|||
|
|
|||
|
3. 做插槽领导者的时候,启动TPU。 将其指向最后一个分叉的
|
|||
|
|
|||
|
TVU投了赞成票。
|
|||
|
|
|||
|
4. 制作作品,直至档期结束。 1. 在档期内,TVU不得对其他分叉进行投票。 2. 插槽期结束后,TPU冻结其BankFork。 冻结后,
|
|||
|
|
|||
|
该TVU可以恢复投票。
|
|||
|
|
|||
|
5. 回到第一点。
|