前些天写了一个帖子《纸上得来终觉浅:粗略计算一下HIVE上股份的年化收益率》,写完之后颇有感慨,若当年自己就能想明白这些事,岂不是早就成为亿万富翁了?
(图源 :pixabay)
可惜这世界上没有后悔药,换个角度想,如果自己真的成了亿万富翁,那还能像现在这样钻研程序、写帖子嘛?估计每天都过着纸醉金迷、醉生梦死的生活,岂不是成了社会渣滓,所以塞翁失马焉知非福?
话说有朋友之前那篇文章后,又问我作者、见证人、DHF的收益都是咋分配的?擦,文章不是说了嘛,每年的通胀,作者/策展人分配到65%、DHF 10%、股权所有者 15%,剩下的就是见证人的10%啦。
啥,还不明白,那我就得来好好说说啦,今天就来讲讲见证人收益这块。其实6年多以前我曾经发文讲过,但彼时HIVE还没分叉,也不存在DHF这块,所以这么多年下来变化也挺大的。
再有就是,时隔六年多,好多事情,好多细节,我不说忘得一干二净也忘得差不多了,所以权且当作复习一下,毕竟温故而知新,可以为师矣。
好言归正传,我们来一起再次学习一下见证人收益&分配情况。
在上篇文章中,我们介绍了通胀率、总供应量两大概念,并有此计算出每年的通胀。
先来回顾一下,计算通胀率的几大因素:
- 初始通胀率
- 终止通胀率
- 通胀率缩窄周期
- 当前区块(head_block_num)
(HIVE源码中通胀率的计算)
总供应量,上篇文章中我们得出结论:
总供应量可以直接通过get_dynamic_global_properties获得,那就是其中的virtual_supply。
好了,根据以上信息,依据上篇文章中提到的计算方法,我们可以获取当前HIVE区块链的年通胀。
好,现在我们可以计算出年通胀,那么乘上比例,算出见证人收益,完工。擦,我想这样的话,可能会挨一通暴打。
为了避免挨打,我们来继续讨论一下新的HIVE是怎么产生的呢? 比如说什么时机产生的呢?
我们继续来看代码:
auto new_hive = ( props.virtual_supply.amount * current_inflation_rate ) / ( int64_t( HIVE_100_PERCENT ) * int64_t( HIVE_BLOCKS_PER_YEAR ) );
这条代码中处于database::process_funds()中,被database::_apply_block调用,也就是说每应用一个区块,都会被处理一次。
继续分析上述代码,我们发现每个区块产生的HIVE,是使用总供应量以及当前年通胀率计算出来的通胀,再除以每年产生的区块数,计算出当前区块应该产生的HIVE数量。
这样才是合情合理的,毕竟各种奖励都是每个区块更新的,而不是一年更新一次,哈哈哈。
再来看分配情况:
由代码中不难看出,几大部分的分配情况和我们上篇文章中得出的结论是一样的,就是按照配置的分配比例进行分配。
这其中有两点需要注意一下:一,不同HF时期,比例是有所区别的;二:见证人收益是作者、DHF、股东分配后剩余的部分。
好,我们已经计算出每个区块中属于见证人奖励的部分啦,但是这部分奖励分给谁呢?作为见证人之一,我当然希望都分给我,但是显而易见这是不现实的。
同样从代码中我们可以找到具体的分配方法:
这其中用到了两部分内容,分别是wso,以及cwit,分别为witness schedule object以及current witness object。
我们来获取一下witness schedule object,长这个样子:
结合上述代码(其中HIVE_MAX_WITNESSES为21)以及上边的witness schedule object,我们得出如下结论:
- TOP20见证人,每块拿到见证人收益的21/25
- 分时(timeshare)见证人,每块拿到见证人收益的21x5/25
也就是说,见证人奖励总量其实没有变化,但是在TOP20和随机见证人奖励分配之间做个很好的权衡。
至此,我们捋通顺了见证人收益的全过程,我们用Python代码模拟一下上述过程,计算一下当前HIVE区块链上的见证人奖励情况:
通胀率:
每块新产生的HIVE:
分配情况以及每块的见证人奖励:
也就是说,TOP 20见证人出块,能获得0.2574个HIVE,备选/分时(timeshare)见证人出块,可以获得1.2870个HIVE奖励(奖励均以HP以及vesting shares发放)。
(图源 :pixabay)
好了,大致就是这样啦,今天就和大家一起学习到这里,你学废了嘛?