Staking
Stafi使用NPoS(提名权益证明)作为选择验证者集的机制。NPoS是DPoS的改良版,解决了验证人有过度中心化倾向的问题。NPoS机制中,将Staker分为提名人和验证人两种角色,与DPoS不同的是,出块奖励会均分给当前的所有验证人,而非按照被委托的Staking Token的比例来分配。这样一来,提名人会自动在多个验证人之间平衡委托,避免了马太效应。在创世之初,Stafi将提供数量有限的验证者名额,例如一开始60个,然后扩展到125个,随着时间推移将进一步拓展。
该系统鼓励FIS持有人作为提名人参加。提名者最多可以提名16个验证者作为受信任的验证者候选人。验证者承担共识出块,保证链的最终确定性的功能。
Stake时,您可以是提名人或者验证人。
任何人都可以申请成为验证人候选人。候选人列表对所有提名人都公开,每个提名人提交一份其支持的候选人名单。在下一个时期(持续几个小时),将选出16个的具有最多FIS支持的验证者并使其生效。对于FIS持有人成为提名人没有特殊要求,尽管我们希望每个提名人都仔细跟踪验证人的表现和声誉。
提名期结束后,16个验证人被选出,并开始执行他们的任务。
为了解释如何向验证者和提名者支付奖励,我们需要引入验证者池的概念,我们定义一个验证者池由一个验证者和支持它的提名者组成。(注:如果一个提名者
n
与用自己的stakes
支持了多个当选的验证人,比如k
个,那么系统会将其Stake拆分为s_1
,s_2
,..., s_k
,视为分别支持了v_1
,v_2
,..., v_k
,其中提名者n
支持验证人v_i
的stake份额为s_i
。在这种情况下,提名者
n
能获得的奖励,相当于由k个提名人,各自分别用s_i
的Stake份额提名了v_i
验证者池的奖励规则是,两个验证者池在相等的工作量下获得相同数量的FIS,不与他们各自获得支持的FIS量成比例。在验证者池中,奖励分为两部分(比例可配置),一部分支付给验证者,其余部分按比例(即按stake份额)支付给提名者。特别要注意的是,提名者奖励中有可能包含给到验证人的一部分,因为验证人默认是自己的提名人,自己的“票”投给自己。
要估算提名人或验证人每月可获得的FIS数量,您可以查看奖励机制 一节
如果您需要计算金本位收益,而非币本位收益,还须估算通货膨胀率,您可以查看通货膨胀一节
我们重点介绍NPoS的两个特点。第一个是,由于验证者池的报酬是相同的,因此拥有较少委托的池将为每个FIS提名人支付比拥有更多委托的池更高的费用。因此,我们为提名者提供了经济激励,使其逐渐将他们的委托转移到较少委托的验证者。这样做的原因是,我们希望所有验证者池的权益尽可能地平均分配,以避免权力集中在少数验证者中。这种机制推演下来,所有验证者池会逐渐具有相近的委托量,信誉较好验证者有可能委托量更高,但是总体上各验证池会保持均衡。
我们通过示例来阐明以上内容。为简单起见,我们有以下假设:
- 这些验证者没有自己的利益。
- 他们不收取任何佣金
- 奖励金额为100个FIS代币
- 最少要验证的FIS是350
| A-验证者池 | | |
提名人(4) | 委托量(600) | 占比 | 奖赏 |
Jane | 100 | 0.167 | 16.7 |
Sam | 50 | 0.083 | 8.3 |
Anderson | 250 | 0.417 | 41.7 |
Boby | 200 | 0.333 | 33.3 |
| B-验证者池 | | |
提名人(4) | 委托量(400) | 占比 | 奖赏 |
Alice | 100 | 0.25 | 25 |
Peter | 100 | 0.25 | 25 |
John | 150 | 0.375 | 37.5 |
Kitty | 50 | 0.125 | 12.5 |
两个验证者池A和B都有4个提名者,总委托量分别为600和400。
根据上述奖励分配,同样的FIS本金,池B中的提名人比池A中的提名人获得更多的奖励,因为池A的总体权益更高。Sam已在A池中投入了50个FIS股份,但他只得到8.3的回报,而Kitty则以相同的投入获得12.5的回报。
我们还指出,当系统对验证器的不良行为(例如,验证器离线,冒名顶替等)施以Slash惩罚时时,Slash的数量是固定百分比(而不是FIS的固定数量),这意味着拥有更多委托量的验证者池将被Slash掉更多的FIS。同样,这样做是为了为提名者提供经济动机来改变他们的偏好,由支持最受欢迎的验证者,转而支持他们认为值得信赖的但比较不受欢迎的验证者。
要注意的第二点是,每个验证人候选人都可以自由列出所需的佣金比例以支付运营成本。由于验证者池的薪水相同,因此佣金较低的池向提名人支付的费用要比费用较高的池多。因此,每个验证人可以选择增加其佣金比例以赚取更多的FIS,还是减少其佣金比例以吸引更多提名人并增加其当选机会。我们将让市场在这方面进行自我调节。从长远来看,我们期望所有验证人都需要具有成本 效益以保持竞争力,并且信誉较高的验证人将能够收取稍高的佣金。
由于验证者的席位将受到限制,因此大多数希望参与Stake,维护网络安全并赚取收益的人,都是提名人。验证者承担了大部分复杂的工作:他们在BABE中产生新的区块候选者,在GRANDPA中投票并达成共识,并可能承担更多职责。
另一方面,提名人一旦质押了FIS,就无需做任何事情。提名者的经历类似于“设置并忘记它”,而验证者将通过执行关键操作为网络提供主动服务。
Slash是针对验证人在共识中产生不良行为的惩罚,此类型为可能造成共识不稳定,系统崩溃等问题。对于此类问题,NPoS共识通过“罚没”抵押金的方式对产生“非法”行为的验证人进行惩罚。和奖励计算一样,惩罚的计算每个Era计算一次。惩罚的类型和方式如下。
如果验证人在一个Era中不出块也不发送心跳信号,那么该验证人会被判断为离线/未响应。当离线/未响应节点数较多时,为了保证系统运营,系统会开始罚没不良行为验证人的验证池中的一部分质押的FIS,也就是说,这里包括提名人的FIS。.
我们设置以下公式
其中,n是总的验证人数量,k为离线验证人数量,注意当k - (n / 10 + 1) < 0的时候,惩罚金额0。假设一共有100个验证人,n=100
假设n=100,
当k=1~11,Slash的比例为0;
当k=12,Slash的比例为 0.03 * 0.07 = 0.0021
当k=21,Slash的比例为 0.3 * 0.07 = 0.021
当k=31,Slash的比例为 0.6 * 0.07 = 0.042
当k=41,Slash的比例为 0.9 * 0.07 = 0.063
当k=51,Slash的比例为 1*0.07=0.07
总体来说,Slash的比例最小为0,最大为7%,当所有节点中少于10%离线时,单个节点离线或者没有响应是不会被slash的,当1/3节点同时离线的时候,Slash比例接近5%。
在出块阶段(Babe共识)和投票阶段(Grandpa共识),为了保证共识安全,在单个轮次不同链上投票,或者是在同一个高度生成两个新区块,都会被认定为作恶。惩罚公式如下
其中,n为验证人数量,k为一个Era内混乱或者无效投票的验证人数量。
假设n=100
当k=1,Slash的比例为0.03 * 0.03 = 0.0009
当k=10,Slash的比例为 0.09
当k=21,Slash的比例为 0.3969
当k=31,Slash的比例为 0.81
当k=41,Slash的比例为 1