今天注意到steem的github上有人问文章得票数不对的问题,简单地来讲,某种情况下一篇文章有100个人投票,但是API查询查询到的得票数会少于100,极端情况下甚至会是-100票。
(图源 :pixabay)
这个问题我以前在微信群里解答过,我隐约记得当时参与讨论的成员要去把这个问题发乌托邦,也不知道她发了没有。
造成这个问题的原因我猜测是因为HF20中移除了Vote Dust Threshold
的限制,HF20之前,STEEM系统中有个尘埃投票阈值,也就是说如果你投票的效果低于这个阈值,那么是不允许你投票的,会出现一个投票失败的提示。
而HF20之后,为了改善用户体验,移除了这个限制,也就是说,SP少或者使用超低比例投票,都没问题(除了RC限制),尽管这样的投票对文章收益的影响为零。
但是新的问题来了,HF20之前的系统中,把Upvote记为正票,把Downvote记为负票,举例说一个文章得到10票upvote,得到10票downvote,那么这篇文章的净得票为零。
大致代码如下所示:
在上述代码中,把rshares为零的票计入到Downvote逻辑中,这在HF20之前并没有啥大问题,因为rshares为零的票并不存在。
而在HF20后,代码中增加了如下逻辑:
这样一来投票影响力落在STEEM_VOTE_DUST_THRESHOLD
和-STEEM_VOTE_DUST_THRESHOLD
区间内的投票,rshares都为零。
这样继续使用上述代码:
就会把rshares为零的票统计为负票,就会出现文章开头描述的问题。
至于如何修复?如果是HF20尚未开启时,只需把代码改为如下形式即可:
if( rshares > 0 )
c.net_votes++;
else if ( rshares < 0 )
c.net_votes--;
不过HF20已经跑起来并且跑了这么久,如果这么改有没有什么问题我就不得而知了,比如是否需要HF,是否需要replay等等。
毕竟我是菜鸟,另外,文章得票数错了就错了,其实也没啥影响,哈哈。
https://steemit.com/~witnesses type in
oflyhigh
and click VOTE
Vote @oflyhigh via Steemconnect
Thank you!