早晨起来看到@htliao在研究帖子收入减少的问题,很有意思的想法。
但是帖子的奖励是否和作者的活跃度有关呢,比如说频繁给别人点赞?
至少从代码上没看到直接的关联(当然代码我只知道一点皮毛)
其实帖子的奖励到底是怎么核算出来的,是我一直比较好奇的问题。但是之前一堆公式一堆曲线,实在是让人望而生畏,我觉得以我的智商,恐怕是研究不明白了。所以一直没敢碰这个雷区。但是不是说HF19之后改成线性回报曲线了吗?是不是应该简单一点啦。于是怀着忐忑的心情,来看看能不能找到点规律。
rshares 即奖励
我认为计算帖子收益的核心就是这两句代码,呃,为何是两句呢?
u256 claim = to256( evaluate_reward_curve( ctx.rshares.value, ctx.reward_curve, ctx.content_constant ) );
claim = ( claim * ctx.reward_weight ) / STEEMIT_100_PERCENT;
u256 payout_u256 = ( rf * claim ) / total_claims;
然后,evaluate_reward_curve中
case linear:
result = rshares;
break;
由此可见线性回报多好啊,至少对我们这些菜鸟而言,读代码不烧脑。
通过上述分析,我们得知,一个帖子的rshares即帖子的奖励,然后根据系统当前的一些情况,计算出来并已SBD的形式表现。
决定帖子rshares 的因素
那么rshares 哪里来的呢,其实就是别人(或自己)投票得来的
比如我的一个帖子部分投票列表
把整个列表中所有的rshares加起来就是帖子的net_rshares
所以对于帖子来说,影响奖励的内在因素是你得了多少票,尤其是大权重的票。
其它因素(整个体系)
整个体系一些因素的变化也会影响帖子的奖励。
我大致总结如下,一个是奖池金额,奖池金额越大,帖子的奖励越多
另外一个就是所有帖子的总rshares (确切地说是总claim)
总rshares共分奖池金额,那么你的帖子rshares所占比例越小,你分到的金额越少。
u256 payout_u256 = ( rf * claim ) / total_claims;
公式就是这个
为何是total_claims而不是total_rshares, 这是因为有些帖子设置收益限额或者拒绝收益等等,这部分帖子不占用奖池金额。
通过上述分析和代码,我们可以看到,系统内部都是已STEEM进行核算的,所以算出来帖子的价格是多少个STEEM。而我们看到的帖子金额都是显示为XXXX SBD,所以还需要一步转换就是将STEEM 表示为SBD。
系统中用到的价格是:
这个价格据说是7日均价,具体核算过程我没研究,总之如果市场上steem价格一路走低,那么这个价格就会变低。
帖子奖励 SBD 表示
摒弃一些乱七八糟的因素,帖子奖励的SBD表示可以近似的表示为:
奖池金额 * (net_rshares / total_rshares ) * STEEM 7日均价
所以影响帖子奖励的因素:
- net_rshares: 帖子得到的投票产生的rshares
- total_rshares 系统总投票产生的rshares
- 奖池总金额
- SBD/STEEM 七日均价
奖池总金额咋产生和计算的呢,先不研究了。
验证
以这篇文章为例:
SteemData Notify 代码学习二: Confirmation Worker / Code Study of SteemData Notify: Part two
验证了一下上述分析
计算出的结果与帖子显示的金额完全相符
(别问我你看到的为啥不符,帖子金额在不断变化)
结论
帖子金额和以下因素有关:
- net_rshares: 帖子得到的投票产生的rshares
- total_rshares 系统总投票产生的rshares
- 奖池总金额
- SBD/STEEM 七日均价
去除系统等其它我们不可控制的因素,让更多的人给你投票,才是让其金额增长或者保持不下降的根本方法,和作者的活跃度无关的。
当然,作者越活跃,越可能结识更多的朋友,礼尚往来,互相支持,互相投票,到也不失为一个好办法。