案例分析之:HIVE 代码中变量(参数)命名导致的血案

大家都知道,在HIVE上发帖,根据系统当前的HBD_PRINT_RATE,我们可能会拿到HP+HBD或者HP+HIVE+HBD或者HP+HIVE的组合,这个我在我之前不少文章中分析过,所以就不在赘述了。

image.png
(图源 :pixabay)

奖励的发放

但是你知道吗?还有个参数会决定这些组合中,VP vs HIVE+HBD的比例,比如我们可以通过控制这个参数,实现100%的Power UP,而一般情况,我们都是使用默认的50% HBD / 50% HP的设置:

image.png

那么你知道这个选择到底意味着什么呢,说为什么选择中没有提到HIVE?以及这个比例到底是由什么来控制的?

要说明第一个问题,其实很简单,答案就是所谓的50% HBD / 50% HP,其实更确切地来讲,应该是50%的流动性Token以及50%的锁仓Token

所谓的流动性Token,是指HIVE、HBD之一或者两者的组合,具体发的是什么,HBD_PRINT_RATE决定;所谓的锁仓Token就是Vests亦即HP。

这样一描述,大家都就清楚了,所以我们调整这个比例,就是调整奖励发放时,流动性Token以及锁仓Token的比例。比如Power Up 100%就是选择全部锁仓,不要一丁点流动性。

朋友可能会问,我们是否可以选择j奖励全部以流动性Token发放,而不要锁仓Token呢?答案是不可以(通过第三方服务不算),我们必须至少选择50%的锁仓Token,剩下的50%我们可以自己调整比例

神奇的参数

好,下面我们来看第二个问题,这个比例是由谁来控制的呢?

使用https://hiveblocks.com/ 查看文章的properties 信息,不难发现,这个比例是由percent_hbd来控制的,比如我最近的一篇文章的属性信息中就可以看到如下参数:

1652364321(1).png

那么问题来了,在HIVE的代码中,10000代表的是HIVE_100_PERCENT,也就是说100%,那么percent_hbd = 100%是意味着奖励全部以流动性发放吗?

当然不是,我说过了我们必须至少选择50%的锁仓Token,剩下的50%我们可以自己调整比例所以上述100%,其实意味着,剩下的50%流动性Token 100%以流动性Token形式发放

举例来说,假定一篇文章获得100$的奖励,假设没有设定Beneficiaries,假定当前HBD_PRINT_RATE为100%HBD。那么点赞者(Curators)和作者会各自获得一半的奖励50$,而作者的50$中的一半是以HP形式发放的,剩下的25$会根据percent_hbd的设置,如果我们设置的是10000,那么我们就会拿到25$的HBD。

是不是有点拗?原来percent_hbd是作者奖励中百分之五十的Percent,而不是作者奖励的Percent;是流动性Token的Pencent,而不是HBD的Percent,这多少让人有些容易误解。

中招的DAPP

如果我们将这个参数/变量修改为liquid_percent,然后限制它最大值为5000(亦即50%),代码中再做相应的调整,是不是就不容易引起误会了呢?

比如我们将liquid_percent设置成5000,就代表50% HBD / 50% HP;如果设置成0,就代表Power Up 100%,如果设置成2500,就代表75%的奖励Power UP,剩余的25%以流动性代币发放。这多直观啊!

而事实是,真的有DAPP因为不了解这个参数,将percent_hbd理解成我假想的liquid_percent的工作方式。当用户选择50% HBD / 50% HPpercent_hbd设置成5000,这就会导致作者收益75% Power UP, 25%以流动性代币发放

按说以多少比例发放都是奖励,并且加一起都是100%,不过实际上要看币价上涨还是下跌,如果像最近的下跌行情,几天前HP发放时可能值1$,现在值不到0.5$了,岂不是亏啦?

当然,如果币价上涨,那将是另外一个故事了。当时不管涨跌,事情都应该按他设置的样子来才对。那么到底应该像我设想的那样去改hived代码?还是该设置有误的DAPP去调整呢?好像后者更现实一些。

image.png
(图源 :pixabay)

已经和相关的DAPP负责人说了这个事,希望他那边能推动尽快修复吧。


有关奖励发放以及percent_hbd具体如何起作用,请参考:database::cashout_comment_helper以及database::create_hbd,这里就不再赘述了。

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now