ZooBC 维基
运行节点

节点注册表及其席位

节点注册表是链上允许产出 ZooBC 区块的节点列表。每个条目是一个席位。在参与证明中,决定谁出块的是席位,而不是币或硬件:运营者产出下一个区块的机会等于其所占席位的份额。对注册表的每一次变更都是一笔由每个节点验证的交易,任何人都可以读取它。

从注册到席位:用质押注册,在公开队列中等待,逐个获得准入,然后轮流出块
从注册到席位:用质押注册,在公开队列中等待,逐个获得准入,然后轮流出块

席位记录什么

对于每个节点,注册表保存:

  • 节点 id,一个由节点密钥派生的数:将其前 8 个字节按小端序读作整数,并清除最高位;
  • 节点密钥,一把为节点的工作签名的 32 字节 Ed25519 公钥(见 节点的密钥);
  • 所有者账户,注册并控制该节点的普通账户;
  • 注册高度,节点注册时所在的区块;
  • 锁定的质押,所有者作为保证金锁定的 ZBC;
  • 状态:已注册(活跃)、排队中或已删除。

节点的参与分数与之并列保存。注册表按区块高度保存版本,因此任何过去高度上的成员构成都可以重建,而每个区块都依据前一区块时的注册表来判定。

为什么是席位

在工作量证明下,出块份额可以像购买硬件一样快速买到;在权益证明下,则像购买币一样快。在 ZooBC 中,它是席位的份额,而席位按协议设定的节奏逐个准入(见 准入节奏)。因此,出块的多数份额无法被快速买下。参与证明与 PoW、PoS 的比较 将三种设计并列比较。

出块者抽签在未被暂停的已注册席位上均匀进行(见 抽签)。无论其所有者锁定了多少,每个席位被抽中的可能性都相同。在 30 个席位中持有 3 个的运营者,大约每十个区块产出一个,无论它的每个席位锁定的是 100 ZBC 还是 10,000 ZBC。

一个转盘,无论质押多少,每个席位都占相等的一个扇区;质押则用于给队列排序
一个转盘,无论质押多少,每个席位都占相等的一个扇区;质押则用于给队列排序

质押的作用

如果质押买不到区块,那它有什么用?

  • 它为等待加入的节点队列排序,依据是质押乘以等待时间(见 队列)。
  • 它让每个席位都有成本:新加入者必须至少锁定入队最低额(见 注册节点)。
  • 它是一笔保证金。如果节点被除名,或在缺席或被暂停时离开,就会损失其中的十分之一;这十分之一进入长效池,长效池支付给正在工作的节点(见 退出注册表)。

质押本身不产生任何收益。奖励同样不考虑质押:coinbase 抽奖按参与分数加权,而只有真正的工作才能提高参与分数(见 成熟与收益)。

创世席位与新加入者

每条链都从 11 个由 ZooBC Foundation 持有的创世席位开始。它们在高度 0 写入注册表,没有锁定的质押,默认分数为 20%,每个节点自己的账户上有 10 ZBC 的运营余额。其他所有人都通过队列加入:没有人挑选申请者,也没有审批步骤。也不存在固定的日程:两次准入之间的间隔取决于计入席位的数量。注册不会过期。

席位的状态如何变化

从到原因
(无)已注册创世,在高度 0
(无)或已删除排队中注册
排队中已注册准入
已注册已删除除名、所有者移除或认领
排队中已删除移除、认领或因缺勤被移出队列

暂停不是一种状态。被暂停的节点仍是“已注册”,但在它恢复之前被排除在出块者抽签之外(见 错过轮次、暂停与除名)。

读取注册表

注册表是公开的,读取它不需要任何密钥:

  • GET /api/v1/nodes?status=all 列出每个席位及其所有者和注册高度;创世席位的注册高度保持为 0。
  • GET /api/v1/nodes?status=queued 列出队列,包括每个节点的质押和注册高度。
  • GET /api/v1/blockchain/rules 列出生效中的规则。

它不是钱包列表:普通账户无需注册即可持有或发送 ZBC。

另见