ZooBC 维基
ZooBC 基础

区块与时间

ZooBC 在每个网络上都大约每 15 秒向链上添加一个区块。协议以区块来计量时间:当规则说“一天”时,指的是 5,760 个区块。了解这个换算,本维基上的大多数数字就很容易读懂。

每 15 秒一个区块

15 秒的间隔是每条链创世中的一个参数(min_block_interval),在 devnet、testnet 和 mainnet 上都相同。每个区块之后,都会进行一次抽签,按顺序指定可以产出下一个区块的节点(抽签)。第一个被抽中的节点拥有第一轮,其目标时间是前一区块之后 15 秒。如果它迟到或离线,被抽中下一轮的节点可以在 15 秒后产出该区块,依此类推,因此某个出块者缺位只会推迟一个区块,而不会让链停下(轮次、时间与窗口)。

在父区块之后不到 13 秒到达的区块会以“出块过快”为由被拒绝,因此没有出块者能让链加速。

空区块依然有用

无论是否有人发送交易,区块都会持续产生。没有交易的区块仍然在做事:

  • 它携带回执,即节点之间相互转发了数据的签名证明,这些证明为 参与分数 提供依据;
  • 从 0.5.8 版本起,它和满载交易的区块完全一样,携带为其时段安排的新币,即 coinbase。

新 ZBC 的释放跟随时钟,而不是区块数:一个区块的 coinbase 是 15 年发行计划在前一区块时间戳与本区块时间戳之间释放的数量(供应量与发行)。一段较慢的区块不会让一天中铸造的币变少,一阵快速出块也不会让铸造的币变多。

每 15 秒一个区块,即使它不携带任何交易:每天 5,760 个区块,每周 40,320 个。脊链每天产生 1 个区块。
每 15 秒一个区块,即使它不携带任何交易:每天 5,760 个区块,每周 40,320 个。脊链每天产生 1 个区块。

以区块计的时长

由于间隔是固定的,协议把时长写成区块数。下面是常用的换算,以及本维基各处出现的一些时长(mainnet 的数值):

区块数时间出现之处
12030 分钟节点密钥更换生效之前的延迟(节点的密钥)
2401 小时一个存储证明纪元(去中心化存储池)
7203 小时回滚上限(最终性与回滚)
2,88012 小时节点少于 2,880 个时分数时钟的单位(错过轮次、暂停与除名)
5,7601 天排队节点的出勤窗口(队列)
11,5202 天自动更新的节点安装发布版本之前的默认等待时间(发布版本与更新)
40,3201 周节点质押退出时的冷却期(退出注册表)
172,80030 天一个快照周期,也是账户租金和价格投票的周期(账户租金与清理、价格投票)

有几个限制则以秒计,因为它们比较的是时间戳。例如,一笔交易默认可以在其自身时间戳之后最多一小时内被打包进区块(有效期与时间戳)。

脊链:每天一个区块

除主链之外,每个节点还保存脊链,这是一条缓慢的、由检查点构成的伴随链,不携带任何交易(脊链)。它在 testnet 和 mainnet 上每天产生一个区块(每 86,400 秒),在 devnet 上每小时一个。每个脊链区块都由已注册节点联署,并指定一个位于 760 个区块(3 小时 10 分钟)深处的主链区块,从而为主链设定一条任何重组都不得越过的底线(最终性与回滚)。

Devnet 的时间参数

Devnet,即开发网络,保留 15 秒的区块间隔,但缩短了上述许多时长,例如回滚上限(60 个区块)和快照周期(240 个区块),使它们的效果在几分钟或几小时内就能显现。Testnet 和 mainnet 使用相同的数值。完整的对比见 devnet、testnet 与 mainnet。

另见