ZooBC 维基
运行节点

准入节奏

ZooBC 每次只向其节点注册表准入一个新节点,所依据的计时器刻意走得很慢。运营者在出块中所占的份额就是其所占席位的份额,因此赢得席位的节奏,也就是任何人获得对链的控制力的节奏。这一节奏由协议固定,任何人都可以监督。

为什么要慢

在工作量证明下,出块份额可以像购买硬件一样快速买到;在权益证明下,则像购买币一样快。在 ZooBC 中,这一份额必须经由准入获得,每个准入周期一个节点,速度由协议设定。因此,突然夺取控制权(例如为了撤销一笔支付)在原理上就不可能,而不仅仅是代价高昂(见 参与证明能防御什么)。

这种慢与链的速度无关。新节点可以从近期快照启动,而不必从全部历史开始;没有人面试运营者;无论有多少节点,链都每 15 秒产出一个区块。

公式

两次准入之间的延迟为:

delay = clamp(base ÷ counted seats, minimum, maximum)

在 mainnet 上,基数为 600 天,最小值为 7 天,最大值为 90 天。Testnet 使用相同的数值。第一个新加入者最早可在创世后 7 天获得准入。计时器读取区块时间戳,每个周期最多准入一个节点,而且绝不在让该节点进入队列的那个区块中准入它。准入哪个节点由队列决定。

到下一次准入的延迟在一个新加入者获得准入时确定,计数的是该新加入者之前的席位。

哪些席位计入

  • 创世席位最多计为 11 个(这是一个创世参数,在每条链上都是 11)。
  • 新加入者全额计入。
  • 被暂停的席位在两组中都不计入。

这一上限防止庞大的创世集合让注册表快速开放。如果没有上限,一条以 100 个创世席位启动的链会算出 600 ÷ 100 = 6 天,再提升到 7 天的最小值,从一开始就每周准入一个新加入者。有了上限,计数从 11 开始,时间表与一条拥有 11 个席位的链相同。不计入被暂停的席位,意味着只有正在工作的席位决定节奏。

100 个创世席位挤过一个最多只计 11 个的漏斗,新加入者全额计入,被暂停的席位不计入,两条时间线上都得出 600 ÷ 11 ≈ 54.5 天
100 个创世席位挤过一个最多只计 11 个的漏斗,新加入者全额计入,被暂停的席位不计入,两条时间线上都得出 600 ÷ 11 ≈ 54.5 天

时间表

如果队列从不为空且没有人离开,新加入者的到来时间如下:

新加入者大约到来时间
第 1 个第 7 天
第 2 个第 61.5 天
第 7 个第 278 天
第 11 个第 408 天

也就是说,第一年有 9 个新加入者,到第 2 年末有 25 个,到第 3 年有 54 个,到第 5 年约有 155 个。从 86 个计入席位起,600 ÷ 86 不足 7 天,于是最小值开始生效:大约从第 77 个新加入者起,即创世后约 3.5 年,准入变为每周一次。一个赢得每一次准入的申请者,要到大约第 437 天才会持有它的第 12 个席位,足以在数量上超过 11 个创世席位。

创世后五年间的新加入者:第 1 年后 9 个,第 2 年后 25 个,第 3 年后 54 个,第 5 年后约 155 个,约 3.5 年起每周一个
创世后五年间的新加入者:第 1 年后 9 个,第 2 年后 25 个,第 3 年后 54 个,第 5 年后约 155 个,约 3.5 年起每周一个

在由基数项决定延迟的阶段,注册表在每单位时间内按固定比例增长,因为每次准入增加一个席位,而延迟等于基数除以席位数。因此,无论注册表规模多大,使其翻倍大约都需要基数 × ln 2 的时间,在 mainnet 上约为 416 天。

特殊情况

  • 小型注册表。 当活跃节点少于 min_registry_size(mainnet 上为 7)个时,最大延迟被限制为 7 天。
  • 长时间停滞之后,计时器准入一个节点,然后恢复正常节奏。
  • Devnet(开发链)使用相同的公式,基数为 180 秒,最小值为 60 秒,最大值为 300 秒,因此其准入间隔只有几分钟。

所有输入都在链上,因此任何人都可以重新计算下一次准入何时到期。

另见