收益发放时机

正常切换

当开启producer和CRC共同确认出块后一轮会有36个仲裁人(包含12个CRC超级节点和24个普通超级节点),每一轮的收益会在该轮结束受的第一个区块发放。 例如第N轮从高度M开始,那么发放的高度为M+36。

非正常切换

非正常切换特指当前仲裁人中有1/3及以上(即36个仲裁人中的12个仲裁人及以上)在一轮提案中(当值仲裁人会发送提案,5秒内未收集足够赞成票则会超时变为下一个仲裁人当值并发送提案,以此类推当36个仲裁人每一个都当值并发送过提案则称为一轮提案)未参与共识导致区块无法成功最终确认时,会触发非正常切换,非正常切换会立即替换不超过1/3的普通超级节点。当发生非正常切换后,会在发生非正常切换所在的区块立即清算。 例如第N轮从高度M开始,那么按正常切换的高度为M+36,假设在高度L(其中 M<=L < M+36)时发生非正常切换,则发放收益的高度为L。

退化切换

退化指在正常切换或非正常切换过程中,有效的producer(有效指状态为active)数量不足24个时为了保证仍能够顺利共识,回到只有12个CRC超级节点参与区块确认的状态。如果共识过程中发生了退化(即一轮中只有12个CRC超级节点参与共识),收益发放则会在12个CRC超级节点组成的一轮结束后发放。收益将仅发放至CRC节点,所有普通DPOS节点都将没有DPOS收益。

例如第N轮从高度M开始,则发放的高度为M+12。

收益的计算

收益的累计额

对DPoS的收益会在一轮内累计,直到该轮结束。假设一轮DPoS总共确认了n个区块,每一个区块的收益为Rx,则该轮总收益为

$$\sum^{n}_{x}Rx\cdot0.35$$

对于每一个区块,假设区块内有n个交易每一个交易的收益为Tx,总发行量(33000000ELA)为I,则区块收益Rx为:

$$\frac{I\cdot0.04}{365\cdot24\cdot30}+\sum^{n}_{x}{Tx}$$

可看出上述公式中将年度增发额平均到了每一个区块中,区块的平均出块速度为2分钟。

各超级节点的分配策略

仲裁人的收益分为出块收益和投票收益两部分:

  • 出块收益占整个DPoS收益的25%。对于每一个成功确认的区块,出块收益由该轮所有仲裁人平分,这意味着候选仲裁人不会有该类收益。

  • 投票收益占整个DPoS收益的75%。分配方式为:在确定该轮仲裁人的区块数据状态时(假设当前高度为H,则正常切换确定该区块状态在高度为H-36*2-1的区块打包之后;非正常切换切换该区块状态在高度为H-1的区块打包之后)统计每个超级节点的投票数占总投票总数的百分比,将总的投票累计收益按上述比例分配。

假设一轮的DPoS总收益(具体见“收益的累计额”小节)为D,确定该轮仲裁人时总投票数为S,每一个producer对应的投票数为Vx,以下分别阐述未发生退化时各超级节点的收益分配规则。

当前仲裁人(不包括12个CRC超级节点)

当前仲裁人的收益包括出块收益和投票收益,具体为:

$$\frac{D\cdot0.25}{36}+(D\cdot0.75\cdot\frac{Vx}{S})$$

候选仲裁人

候选冲裁人的收益只包括投票收益,具体为:

$$D\cdot0.75\cdot\frac{Vx}{S}$$

CRC超级节点

目前阶段,12个CRC超级节点的收益会统一发放到一个地址,且由于CRC超级节点没有投票所以其收益只包括出块收益,具体为:

$$\frac{D\cdot0.25}{36}\cdot12$$

当发生退化后,由于只有CRC超级节点参与共识,所以上述当前仲裁人和候选仲裁人不会有收益,CRC超级节点的总收益为D。

取整规则

鉴于SELA(1ELA = 100000000)不可分而在收益分配的过程中存在小数运算,因此需要在部分运算过程中进行取整。以下列出目前均衡各个角色的取整规则:

  1. 累计DPoS收益额时,每一个区块的DPoS收益向上取整(计算公式参见“累计的收益额”小节,注意向上取整后矿工可能会存在取整损失)
  2. 25%的区块收益在DPoS收益总额中向上取整,但均分区块收益时向下取整(这里向下取整是为了避免DPoS收益不够分)
  3. 投票收益为DPoS收益总额减去区块收益的余数,为每一个producer发放投票收益时向下取整(这里向下取整是为了避免DPoS收益不够分)
  4. 该轮收益因不能整除而剩余的部分(理论最大值为108SELA)作为发放收益区块中矿工的奖励

该文档为之前之前回答社区关于DPoS收益分配规则时整理,在几位同事校对和修改建议下最终完成,在此对他们表示衷心的感谢。我在接下来更新博客中会对一些大家常见的问题进行整理,旨在对Elastos白皮书社区文档的补充,有什么建议和意见也希望大家能够反馈给我。