When to upvote? Within 30min! 何时点赞?三十分钟以内!

一直想知道Steemit是怎样给点赞者分钱的,最好的办法还是看代码。当然像我这样一知半解看代码常常会理解错。不过不要紧反正不是写论文,错了就当吹牛。对代码没兴趣的同学可以跳过直接看图看结论。

            if( _db.head_block_time() > fc::time_point_sec(STEEMIT_HARDFORK_0_6_REVERSE_AUCTION_TIME) )  /// start enforcing this prior to the hardfork
            {
               /// discount weight by time
               uint128_t w(max_vote_weight);
               uint64_t delta_t = std::min( uint64_t((cv.last_update - comment.created).to_seconds()), uint64_t(STEEMIT_REVERSE_AUCTION_WINDOW_SECONDS) );

               w *= delta_t;
               w /= STEEMIT_REVERSE_AUCTION_WINDOW_SECONDS;
               cv.weight = w.to_uint64();

上面这段代码就是传说中的三十分钟惩罚。就是说帖子发出前三十分钟点赞者只能得到一部分报酬。10分钟时点,1/3给点赞者,2/3给作者;15分钟是点,一人一半;20分钟时点,2/3给点赞者;半小时以后全归点赞者。

               if( _db.has_hardfork( STEEMIT_HARDFORK_0_17__774 ) )
               {
                  const auto& reward_fund = _db.get_reward_fund( comment );
                  auto curve = !_db.has_hardfork( STEEMIT_HARDFORK_0_19__1052 ) && comment.created > STEEMIT_HF_19_SQRT_PRE_CALC
                                 ? curve_id::square_root : reward_fund.curation_reward_curve;
                  uint64_t old_weight = util::evaluate_reward_curve( old_vote_rshares.value, curve, reward_fund.content_constant ).to_uint64();
                  uint64_t new_weight = util::evaluate_reward_curve( comment.vote_rshares.value, curve, reward_fund.content_constant ).to_uint64();
                  cv.weight = new_weight - old_weight;

上面这段代码决定了点赞者们如何分赃。其中用了平方根曲线来奖励第一个点赞的。我的理解是,假设每个人SP都是100而且全力点赞。第一个点赞者权重是100的平方根,也就是10;第二个点赞者是200的平方根减去10,就是4.14;第三个点赞者是300的平方根减去200的平方根,就是3.18。也就是说点的越晚蛋糕越小。

但是不要忘了前半个小时有早鸟惩罚,两个因素加在一起就复杂了。到底该什么时候点呢?假设点赞者SP都一样。再假设每一分钟一个人点。算一下按照时间顺序没个点赞者的收益是这样:

Screen Shot 2017-07-13 at 8.24.04 PM.png
这张图说明前半小时每个人的收益都一样。早鸟惩罚平衡了平方根。半小时的时候有个台阶下降,然后逐渐下降。这张图的结论是:
前三十分钟不要慌不要抢,什么时候点都一样;到了第29分钟要赶紧点,过了30分钟线就亏了;过了30分钟以后早点有优势但是区别不大也不用慌。

当然实际情况会比较复杂。但是我感觉点赞还是应该在前半小时点,不管什么时候差不多。不要等到半小时以后。当然我可能理解错代码,也可能算错,另外实际的点赞分布也可能会使结果很不一样。这篇文章就是抛砖引玉,希望大家指正。


Steemit rewards the first voter with a square root curve. On the other hand, there is a penalty for the voting within the first 30 minutes to combat the bots. The question is when to upvote to maximum the reward? My answer is: within the first 30 minutes.

Assume one voter per minute and all the voters have the same SP and use the full power. The figure is my calculation for the rewards of all the voters. It shows for the first 30 minutes, all the voters get the same rewards. There is a step at 30 minutes, then the reward decreases gradually.

Based on the simplified assumptions, the conclusion is:

  • In the first 30 minutes, no difference;
  • After 30 minutes, it decrease gradually, no big difference;
  • At the 29th minutes, up votes as soon as possible!

Disclaimer: I may misunderstand the code. My calculation may be wrong. My assumption may not be realistic. Therefore, I cannot guarantee my conclusion is correct. Use at your own risks :)


Posts of @nationlpark 的帖子 & About Myself 自我介绍

© Copyright 所有照片与文字皆为原创 All photos taken by author. All rights reserved.

H2
H3
H4
3 columns
2 columns
1 column
25 Comments