Skip to content

DPoS投票及节点投入产出分析

SamYu edited this page Oct 6, 2019 · 2 revisions

概述

采用 DPoS 委托权益证明共识协议,FT (包含锁仓 FT) 为权益人的权益证明。所有权益人可以委托自己的权益(投票选举出块生产者),保障 FT公链的正常出块及运行。按功能角色划分为生产者,投票者。

  • DPoS 按照七天为一周期(每周日 00:00开始,GMT+8,以下同),根据上一周期所有投票信息,按照生产者获得票数的排名,更新出块生产者列表(21 出块生产者+7 备份出块生产者),由它们在本周期轮流出块,保障链的正常出块。
  • 当某个出块生产者在每 10 轮内出块率不足 50%,则由备份出块生产者替换出块。当无备份出块生产者可以替换,则该出块生产者直接淘汰,无生产者出块。
  • 每个周期的投票信息是独立的,重新投票&计票,鼓励权益人在每个周期积极参与投票,保障链的正常运行。
  • 可用票数来自于每周期的账户快照余额,投票并不真正进行代币转移。
  • 生产者抵押资金,需要进行代币转移,用于作恶惩罚。

一. 生产者部分

生产者,由于可能成为出块生产者,参与到链的出块,对链的正常运行有更大的影响。所以对于生产者有更高的要求。

  • 成为生产者,必须且需要抵押 50 万 FT(非锁仓),从账户中转移到特定账户,如果发现该生产者在作为出块生产者期间作恶,则直接进行惩罚(罚没抵押金)。
  • 生产者的抵押金默认作为该生产者获得的票数存在于每个周期,直至注销。
  • 获得被投票权,仅仅靠抵押金的票数几乎不可能成为出块生产者,所以需要其他权益人的投票。只有周期开始的快照中,生产者账户中 FT 的总持有量(初始可用票数)大于 100 万才能获取被投票权,自己或者其他权益人投票给该生产者才能成功,获得票数。

现在举几个例子来加深理解(抵押,被投票权,初始可用票数,可用票数):

(1)在周期开始后,新建账户 A,并从其他账户获得资金 150 万FT,想要注册出块节点,在周期开始进行快照时有 0 万 FT(初始可用票数),它注册候选节点,抵押了 50 万 FT(抵押时使用 50 万票数,可用票数变为 0),注册成功后它想投票,是可以投 0 万 FT(可用票数)的。因为快照金额(初始可用投票数)小于 100 万FT,是不可以接受自己或者他人的投票。在下一个周期开始时,其快照金额为 100 万FT,可以给自己的候选节点投票,同时也能接受他人的投票。

(2)想要注册出块节点的账户 A,在周期开始进行快照时有 30 万 FT(初始可用票数),并从其他账户获得资金 150 万FT,它注册候选节点,抵押了 50 万 FT(抵押时使用 50 万票数,可用票数变为 0),注册成功后它想投票,是可以投 0 万 FT(票数)的。因为快照金额(初始可用投票数)小于 100 万FT,是不可以接受自己或者他人的投票。在下一周期开始时,其快照金额为 130 万FT,可以给自己的候选节点投票,同时也能接受他人的投票。

(3)想要注册出块节点的账户 A,在周期开始进行快照时有 200 万 FT(初始可用票数),它注册候选节点,抵押了 50 万 FT(抵押时使用 50 万票数,可用票数变为 150 万FT),注册成功后它想投票,是可以投 150 万 FT 的。因为快照金额(初始可用投票数)大于 100 万FT,是可以接受自己或者他人的投票。在下一周期开始时,其快照金额为 150 万FT,可以给自己的候选节点投票,同时也能接受他人的投票。

二. 投票者部分

投票者,作为权益人,有必要参与到链的正常运行中。通过手中的权益,投票选择出合格的出块人,保证链出块的正常。

  • 投票者可投票数,来自于周期开始快照中,该账户下 FT 总持有量(小数截整)。
  • 投票者可以投多个人,也可以给一个人投多次。直至该周期的可投票数为零。
  • 票数一经投出,可用票数减少且不可重复使用。
  • 每个周期的投票是独立的,需要投票者每周都积极参与投票,维护链的正常运行。
  • 投票者可以投任何具有被投票权的生产者(初始可用票数大于 100 万FT)。

三. DPoS 奖励部分

生产者,投票者都是权益人,为保证链的正常运行做出相应的贡献,所以理应会获得相应的奖励。

  • 出块生产者正常出块是可以获得相应出块奖励的。
  • 投票者投中了该生产者也可以获得相应投票奖励

生产者投入

  1. 硬件投入: 官方推荐配置:
超级节点要求固定IP,根据目前数据规模,推荐采用4核,16G内存,1TB SSD硬盘,10Mbps带宽以上配置。
同时至少拥有一台同配置备用节点,并向公众提供浏览器,RPC等服务。

按照这样的硬件配置要求(网络皆按使用流量付费):

  • 亚马逊云的租金大概是:2900$/年/台
  • 阿里云的租金大概是:12900 ¥/年/台
  1. 运营投入: 1 个兼职做运维的技术人员:3000~5000 ¥/月。

生产者与投票者产出

FT 可持续挖矿将拿出不低于 10%的额度用于奖励记账节点,当前挖矿周期(即可持续挖矿的第二个周期)的产出是每天 150W FT,所有记账节点(包括备份的记账节点)所能分到 FT 数量至少为 15W。其中 15W 又分两部分,出块奖励和投票奖励,出块账户分得 80%,投票用户按比例共分 20%。无论出块账户还是投票用户,其获得的 FT 激励的锁仓规则遵从可持续挖矿的锁仓规则,即在第二周期锁仓 80%,剩下 20%可流通。

生产者出块奖励:

按规则,21 个出块节点和 7 个备份节点都能获得激励,在周期结束时会通过投票数和出块率等条件进行排名,排名的结果会影响激励的 FT 的数额。从第 1 名到第 28 名的权重系数如下:

100,95,94,93,92,91,90,85,80,75,70,65,60,55,54,53,52,51,50,49,48,45,42,39,36,33,30,27

总权重之和: 100+95+90+。。。+33+30+27 = 1754

即在可持续挖矿的第二周期:

  • 排第一的节点账户每周可取得的 FT 激励数量是:100/1754 x 105W x 80% = 47890FT/周
  • 排最后一位的节点账户每周可获取的 FT 激励数量是:27/1754 x 105W x 80% = 12930FT/周
投票者投票分红:

假设用户对某个候选者的投了 n 票,而候选者的总得票数是 m(此处包括了候选者抵押和给自己投票的票数),则在可持续挖矿的第二周期:

  • 给排第一的节点投票可获得的 FT 数量为:100/1754 x 105W x 20% x n/m = 11970 x n/m (FT/周)
  • 给排最后一位的节点投票可获得的 FT 数量为:27/1754 x 105W x 20% x n/m = 3232 x n/m (FT/周)

从公式中可以看出,最终用户能得到多少投票奖励,还取决于自己对某节点的投票比例,所以并非投排名第一的节点的收益是最高的。

下面给出后续一年,即四个周期总的节点收益表,供参考(其中二、三、四周期挖矿产出递减 50%,第五周期递减 25%,同时锁仓比例按周期递减20%):

可持续挖矿周期 第二周期 第三周期* 第四周期* 第五周期*
时间 2019.7.16 起 2019.10.14 起 2020.1.12 起 2020.4.13 起
挖矿总产出 1050 525 262.5 196.875
记账节点总收入 105 52.5 26.25 19.69
所有节点账户的总收入(占 80%) 84 42 21 15.75
所有投票用户总收入(占 20%) 21 10.5 5.25 3.94
第一节点账户收入 4.789 2.395 1.197 0.898
第一节点锁仓数 3.83 1.435 0.479 0.1796
第一节点可流通数 0.96 0.96 0.718 0.7184
  • 以上单位皆为: 万 FT/周
  • 打*的周期表示此周期的激励不低于总产出的 10%,此处仅按 10%进行计算