BFChain区块锻造者是根据受托人的得票数以及在线率等参数按照底层的共识规则推选出来的(详见区块锻造者竞选)。
受托人的得票数是通过全网持有主链权益的地址账户对已开启接收投票的受托人进行投票而获得的。
链上所有持有主链权益的地址账户,均可以在已支持的各类Dapp(如BFChain APP)或者BCF节点程序中对受托人进行投票。受托人获得越多的得票,其成为锻造者的概率将越大。
本章将分五个部分介绍BFChain的投票规则:
选票是链上的地址账户用于投给受托人的票据。地址账户只有获得选票,才能给受托人投票。
链上地址账户要想获得选票,需要保证:
地址账户在每一轮能够获得的选票数量(用于下一轮投票)的共识公式为:
地址账户每一轮可获得的选票数 = balance balanceWeight + numberOfTransaction numberOfTransactionWeight * Rate
其中:
BFChain将于每一轮轮末块时计算每个账户下一轮拥有的选票数。
自动投票,是指BFChain底层提供推荐算法,节点自主配置算法参数值。当节点开启自动投票后,底层会根据算法和配置参数值自动对满足条件的受托人进行投票。
在 BFChainPC.Config.AutoVoteModel 中详细列出了底层推荐算法涉及的配置参数,几个配置参数释义如下:
参数名 | 释义 | 值 |
---|---|---|
enable | 是否为节点开启自动投票 | true:开启 false:关闭 |
useConfigFee | 是否使用默认配置的自动投票上链费 | true:自动投票上链费使用参数‘fee’里设置的值 false:不使用参数‘fee’里设置的值 |
fee | 自动投票上链费 | |
priorRecommendedNumber | 是否优先保证候选人个数 | true:则按照推荐算法优先选出参数‘maxNumberofRecommended’里设置的候选人个数 false:不使用 |
maxNumberofRecommended | 本节点选出的候选人数量上限 | |
numberofRounds | 选取的区块范围,以下推荐算法中的几个参数值的统计从哪个区块范围开始计算(从最近的100轮) | |
productivityPercent | 在线率占比 | |
forgedBlocksPercent | 锻造的区块数量占比 | |
applyTxPercent | 打包交易数量占比 | |
votePercent | 上一轮得票率 | |
newDelegatePercent | 新受托人占比 | |
minBeSelectProductivity | 最小可被推荐账户在线率 |
举例:
参数 | 释义 | 设置值 |
---|---|---|
enable | 是否为节点开启自动投票 | true |
priorRecommendedNumber | 是否优先保证推荐人个数 | 是 |
maxNumberofRecommended | 本节点选出的候选人数量上限 | 57 |
productivityPercent | 在线率占比 | 30% |
forgedBlocksPercent | 锻造的区块数量占比 | 30% |
applyTxPercent | 打包交易数量占比 | 20% |
votePercent | 上一轮得票率 | 10% |
newDelegatePercent | 新受托人占比 | 10% |
上表的设置,表示本节点通过自动投票最大需要选出57个候选受托人,这57个候选受托人的组成为:
在选定的区块范围内在线率最高的17(57*0.3)个开启接收投票的受托人;
在选定的区块范围内锻造的区块数量最多的17(57*0.3)个开启接收投票的受托人
在选定的区块范围内打包交易数量最多的11(57*0.2)个开启接收投票的受托人
上一轮得票率最高的6(57*0.1)个开启接收投票的受托人
在选定的区块范围内新注册受托人中的6个开启接收投票的受托人,选的规则为:得票数 > 主权益数 > 公钥
BFChain生物链林提供如下接口,用于节点自动投票:
手动投票,是指节点可对链上已开启接收投票的任一受托人进行投票,且所投的票数由节点自己把控,只要不超过本节点当前拥有的选票数的最大值即可。
BFChain生物链林提供如下事件接口,用于节点手动投票:
当锻造者锻造好一个区块后,底层将直接计算上一轮中所有给该锻造者投票的地址账户应获得的投票激励,激励权益将直接发放到各投票地址账户。
锻造该区块所获得的投票总激励totalRewardOfVote : {rewardPerBlock + sum(eachtransactionfeeOftheBlock)} * votePercent
eachtransactionfeeFortheBlock
为打包进此区块的每笔事件的上链费; sum(eachtransactionfeeOftheBlock)
即为对打包进此区块的每笔事件的上链费求和。上一轮中每个给这个锻造者投票的地址账户应获得的投票激励 = totalRewardOfVote * (该地址账户上一轮投给该锻造者的票数 / 该锻造者在上一轮获得的总票数)
有关BFChain生态的共识激励机制,请参考 共识激励机制一章,本小节不做详细说明。
以下数据将于每一轮轮末块时计算: