运行节点
ZooBC 节点就是在计算机上运行的 ZooBC 软件。它保存一份链的副本,按照与其他所有节点相同的规则检查每个区块和每笔交易,并提供公开的 HTTP API。任何人都可以运行节点,而一个只跟随链的节点已经能让其所有者无需信任任何人就检查一切。出块是另外一步:节点只有在节点注册表中持有席位后才会出块。
节点运行什么
节点是一个进程,以 zoobc-node --start node.conf 启动,使用一个 SQLite 数据库。它监听三个端口:
| 端口 | 用途 | |
|---|---|---|
| 8001 | 点对点网络 | |
| 8080 | HTTP API,它同时提供[[web-wallet | 网页钱包]] |
| 8545 | [[metamask | MetaMask]] 使用的以太坊式 RPC 适配器,默认只在节点自己的机器上(回环) |
节点从不自己构建创世区块。区块 0 必须已经在它的数据库中,而该区块的哈希就是链的身份(见 创世区块)。如果节点发现自己卡在一条无法离开的分支上(“卡住”),它会丢弃自己的链,并从锚定在脊链中的快照重建自身,因为 auto_resync 设置默认开启。发布版本还可以附带一个版本锚点,即一个已知的脊链区块,节点自己的脊链必须与之相符。新版本通过一个在节点旁边运行、由所有者控制的更新程序到达(见 发布版本与更新)。
从开启到出块
- 运营者创建两把密钥:一把用于机器的节点密钥,以及一把放在钱包中的所有者密钥(见 节点的密钥)。
- 所有者发送一笔注册交易,锁定一笔质押,并附带一份证明,表明两把密钥相互归属(见 注册节点)。
- 节点在按质押乘以等待时间排序的公开队列中等待(见 队列)。
- 准入计时器按协议设定的缓慢节奏,每次放入一个节点(见 准入节奏)。
- 获得准入后,节点会被抽中出块(见 抽签),向指派的对等节点转发区块和交易(见 回执与网络拓扑),并在短暂的成熟期之后分享奖励(见 成熟与收益)。
每条链都从 11 个由 ZooBC Foundation 持有的创世席位开始。其他所有人都通过队列加入,没有人挑选谁能进入。没有任何席位是人工授予的,也没有任何席位能像在工作量证明中那样凭算力赢得。
留在注册表中
席位靠做事来保住。已注册节点无论出于什么原因跳过了被抽中的轮次,都会进入缺席状态,直到它产出下一个自己的区块。缺席期间它什么也赚不到,其参与分数每个分数单位下降 5 分(满分 100 分),在节点数少于 2,880 个的网络上,一个分数单位为 12 小时。它签署的回执和发送的 ping 都不能结束这一状态;只有它自己的下一个区块才能。
连续第四次错过轮次时,节点还会被暂停:它退出出块者抽签,但保留席位。重新上线后,它的软件会发送一个 ping,这是一笔只有被暂停的节点才能发送的免手续费小额交易,它让节点以观察期身份重返抽签。如果分数降到零,节点就会被除名。详情见 错过轮次、暂停与除名;席位终止的所有方式见 退出注册表,所有数值见 mainnet 上的节点参数。
另见
本主题下的文章
- mainnet 上的节点参数
mainnet 上节点相关数值的参考表,涵盖节点注册、队列、准入、在线状态、收益、退出、更新和节点进程,每项一行。 - 准入节奏
为什么 ZooBC 以缓慢的节奏、一次一个地把新加入者准入其注册表,决定两次准入之间延迟的公式,以及这一公式在 mainnet 上给出的时间表。 - 发布版本与更新
新的节点版本如何在链上公布,每个节点旁的更新程序如何安全地安装它们,以及一个新共识规则包如何启用。 - 成熟与收益
已注册节点能赚到什么,coinbase 抽奖如何按参与分数分配每个区块的奖励,以及为什么新节点必须先成熟才能获得任何收益。 - 注册节点
所有者如何注册节点:NodeRegistration 交易、将节点密钥与所有者绑定的所有权证明,以及队列接受的最低质押。 - 节点注册表及其席位
链上允许出块的节点列表:每个席位记录什么,为什么决定出块的是席位而不是币,以及任何人如何读取它。 - 节点的密钥
为节点的工作签名的节点密钥,以及控制其席位和质押的所有者密钥:两者各自存放在哪里、各自签署什么,以及它们如何绑定在一起。 - 退出注册表
席位终止的几种方式(所有者移除、分数归零时被除名、凭节点密钥认领),以及所有者何时能拿回全部质押、何时会损失其中的十分之一。 - 队列
已注册的新加入者如何等待席位:按质押乘以已等待时间排序、每日出勤检查,以及离开队列的代价。