讨厌的SBD零头不见啦——HF21/22中已经修复了SBD 发行率的BUG

讨厌的SBD零头不见啦——HF21/22中已经修复了SBD 发行率的BUG

在硬叉20(HF20)时,关于SBD_PRINT_RATE有一个小BUG,导致无论SBD的占比有多高,SBD_PRINT_RATE也不会到达0%,当SBD占比无限趋于10%时,SBD_PRINT_RATE值为1%。


(图源 :pexels.com)

虽然这个小BUG无伤大雅,但是当发放文章奖励时,看着那个0.00x SBD的零头被每天发放,对强迫症而言还是比较闹心的。

好消息是,HF21/HF22之后,尽管SBD的占比还是无限趋近10%,但是SBD_PRINT_RATE已经变成了0,所以我们的文章奖励中看不到那些SBD零头啦。

代码

那么这个小BUG是如何被修复的呢?我特意去查了一下代码:

计算SBD_PRINT_RATE的关键,在于计算SBD的占比,HF21/22中,计算SBD的代码如下:

percent_sbd = uint16_t( ( ( fc::uint128_t( ( dgp.current_sbd_supply * get_feed_history().current_median_history ).amount.value ) * STEEM_100_PERCENT + dgp.virtual_supply.amount.value/2 ) / dgp.virtual_supply.amount.value ).to_uint64() );

逻辑差异

代码看起来有点乱,我抽取主要逻辑简化描述一下,HF21/22中,逻辑如下:

percent_sbd = int((sbd_steem*STEEM_100_PERCENT + virtual_supply/2)/ virtual_supply)

而在之前硬分叉版本中(HF20等),逻辑如下:

percent_sbd = int((sbd_steem*STEEM_100_PERCENT)/ virtual_supply)

其中STEEM_100_PERCENT的值为10000

#define STEEM_100_PERCENT 10000

也就是说,SBD的占比计算:

  • HF21之前是折算成STEEM的SBD占总供应量的比例乘以10000
  • 现在则是在上述数值基础上加上0.5

按照之前的计算方式,尽管实际比例无限趋近于10%(1000),但是由于喂价机制以及取整的缘故,这个值都不可能等于10%(1000),所以导致了SBD_PRINT_RATE最低值只能是1%,而不可能是0%。

而现在,当实际比例趋近于10%(9.995%)时,因为加上了0.005%(0.5/10000),所以计算出来percent_sbd为10%,就保证了SBD_PRINT_RATE为零。

模拟验证

让我们模拟HF20以及HF21/22的机制分别实际计算一下SBD的占比。

HF20

HF21/22

可见按照新机制计算的结果会去掉SBD_PRINT_RATE中的毛刺,对用户更加友好。更多详情,请参考文末链接吧。

相关链接


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: ‘讨厌的SBD零头不见啦——HF21/22中已经修复了SBD 发行率的BUG’

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×