简介
YOUChain 支持验证者(validator)以及委托(delegation)。
所谓验证者,可以认为是所谓的节点,需要做 Token 抵押和运行节点程序进行链上共识,以获得区块奖励。
有一类验证者可以设置接收委托、设置一定的佣金比率。Token 委托人可以将 Token 委托给某个验证者,后者代为进行链上共识,委托人分得相应的奖励。
为了支持大规模的验证者及其委托,我们设计了 YOU-Staking 机制。
下面将介绍 YOU-Staking 的相关概念。
概念列表
验证者与委托人
验证者跟接受委托相关的有以下属性:
acceptDelegation number 是否接受委托 0 不接受,1 接受
commissionRate number 佣金率,万分数
riskObligation number 风险承担比例,万分数
Staking 操作生效周期
我们定义了如下链上参数:
StakingTrieFrequency: 128
定义StakingTrieFrequency个区块作为一个周期,在周期内提交的 staking 操作交易,将会经历暂存与生效阶段。立即暂存(可获得交易哈希),交易将会在该周期的最后一个区块生效。
注意,staking api,如果是涉及到操作的数据的,将是返回结构编码,需要将这个数据,作为交易信息的一部分,广播到链上,才会真正完成。
奖励的流向以及时机
总体来讲,区块奖励的流向如下:
区块奖励-》验证者集合池-》验证者奖励池-》验证者coinbase及委托人账号到账
每个区块打包时,对于参议(议长)节点,当产生区块时,它将会立即获得该区块的 30%奖励(影响验证者的rewardsDistributable字段),其余的 30%分配给议长(参议)节点集合,40%分配给众议节点集合(影响集合的rewardsDistributable字段)。
区块奖励
每个区块,都会产生奖励,分配到验证者集合
验证者集合中的奖励分配
在周期结束时(n * 128 -1 区块号上),将会分配给集合内当前在线的验证者(记录在验证者的 rewardsDistributable 字段)。
验证者内部奖励分配到账
奖励从 rewardsDistributable 发放到 coinbase
- 主动:有验证者有关的 staking 操作
- 被动:第 n * 128 + 1 周期结束
周期结束时(n * 128 -1),处理顺序:
- 分配集合奖励
- 处理验证者的内部分配
- 处理暂存验证者操作
奖励分配比例
三类验证者最终奖励分配比例
RewardsDistRatio: map[ValidatorRole]uint64{
RoleChancellor: 3,
RoleSenator: 3,
RoleHouse: 4,
},
议长:参议:众议
3:3:4
奖励有关信息获取:
you_validatorsStat(height)
对于集合,获取指定高度上的数据
rewardsDistributable string 角色奖励池,当前尚未分配到validator的奖励
在同一个周期内,随着区块的增长,rewardsDistributable将会增长
you_validatorByMainAddress(height, mainAddress)
对于验证者,获取指定高度上指定的mainAddress 的信息
rewardsLastSettled number 最后一次奖励分配到coinbase的区块高度
rewardsDistributable string 当前可分配奖励
rewardsTotal string 节点加入后累计获得收益,会单调增长
验证者奖励分配条件:
主动触发:验证者操作类交易发送,将会触发奖励分配,如:
you_createValidator
you_changeStatusValidator
you_depositValidator
you_withdrawValidator
you_settleValidator
you_updateValidator
you_getDelegationAddData
you_getDelegationSubData
you_getDelegationSettleData
被动触发:
MaxRewardsPeriod: 128, 这个参数定义的周期数量,将会强制触发一次
区块奖励构成
gasfee + subsidy
补贴系数:
SubsidyThreshold: 9 * YOU, // 从YouV3开始调整为 15YOU
SubsidyCoeff: 5,
奖励和补贴公式(SubsidyThreshold 调整为 15YOU之后,下面的 4.5 就变成 7.5, 9 变为 15):
$subsidy= \begin{cases} 4.5 - gasfee * 0.5 & \text{gasfee<=9} \\ 0& \text{gasfee>9} \end{cases}
$
$incentives= \begin{cases} 4.5 + gasfee * 0.5 & \text{gasfee<=9} \\ gasfee& \text{gasfee>9} \end{cases}
$
区块头记录: header.gasRewards 交易费总计,单位 wei
header.subsidy 该区块的补贴总计
补贴来源池
0x0000000000000000000000000000001111111111
创世区块中预存了 5.6 亿 Token 作为补贴池。需要区块补贴的时候,从中支取,取完即止。
验证者准入签名
三类验证者都有准入(需要模块管理员签名)
需要准入的 API,通常会包含 nonce 字段:
you_createValidator
you_changeStatusValidator
you_depositValidator
you_withdrawValidator
you_updateValidator
验证者最低自抵押 > 0 在调用you_createValidator时,value 必须大于 0
角色的最低抵押:
MinStakes: map[ValidatorRole]uint64{
RoleChancellor: 8880000,
RoleSenator: 1580000,
RoleHouse: 49283,
},
达到这个最低抵押要求,才可以上线 低于这个抵押要求,将会下线
角色最高抵押
MaxStakes: map[ValidatorRole]uint64{
RoleChancellor: 10000000,
RoleSenator: 1800000,
RoleHouse: 1500000,
},
角色最大总抵押,不能超过这个值
最小委托
MinDelegationTokens: new(big.Int).Mul(big.NewInt(1000), StakeUint) // 1000 YOU
抵押取回延后到账区块数
WithdrawDelay: 259200, // ≍15 days
双签惩罚
PenaltyFractionForDoubleSign: 2, 扣减 2%