我的网站cutehive.com,一个最主要的功能就是见证人列表,相比于其它HIVE上的见证人列表,我这个多了很多特色,比如说见证人收益的估算功能。

(图源 :pixabay)
我没事就刷刷这个见证人列表,看看自己的见证人收益能不能够得上VPS的成本,哈哈。
前晚硬分叉(HF28)时,我一直在刷新着网站cutehive.com的见证人列表,这次倒不是为了看收益,而是为了看分叉后各个见证人有没有正常出块。
好在TOP20全部出块正常,大部分备选节点也都在升级后的链上正常出块——包括我自己。只有小部分见证人没能及时升级hived,那就意味着它们的节点没法在升级后的主网上出块。
我曾在HF28前两三天联系了一些备选节点的主人,告诉了它们关于硬分叉的消息,以及如果没能在HF28前升级到新版hived,将会无法在升级后的主网出块的事实。但是HF28后,我看我联系的这些见证人,还是在运行着旧版本,那就没办法了,毕竟个人有各自的选择。
升级后我还注意到一个问题,那就是我引以为傲的见证人收益估算,和见证人实际收益,完全不相符。
分叉前,我每出一次块,可以得到1.864 HP的奖励

分叉后,我每出一次块,可以得到1.381 HP的奖励

由于HF28中共识变化之一就是将Treasury中的HBD从通胀计算中移除,而无论作者(点赞)奖励,还是见证人奖励都是从系统通胀中来的,所以见证人出块奖励变低是正常也是期望中的变化。
但是我刷新了一下我的见证人列表,怎么收益和分叉前,没什么区别呢?
分叉前截图

分叉后截图

而分叉后,计算出来的我和其它见证人的出块奖励,明显和区块链浏览器中看到的出块实际奖励大相径庭!
我也是用程序计算出来的,不是缓存值也不是读那个数据库读出来的数据,那不应该和实际数据有太大的差异呀?哪里出了问题呢?
这时正好看到见证人频道的一些成员在讨论HF28后的各种变化,包括将Treasury中的HBD从通胀计算中移除。
而核心开发者 @howo 回答别人问题时的两句话,点醒了我:


这下一下子就明白了,因为我就是使用的从区块链上读出来的virtual_supply,现在问题是virtual_supply的数值还包含DHF中的HBD,而计算奖励时,却把DHF中的HBD刨除在外,这样分叉后依旧用virtual_supply来计算见证人出块奖励当然会出错啦。
知道了问题所在,改起来就简单啦。
这次我采取的方式是不直接使用读出来的virtual_supply,而是通过读出current_supply、current_hbd_supply、median_price,以及treasury_hbd,通过如下公式计算发放奖励时的总供应量:
supply = current_supply + (current_hbd_supply - treasury_hbd) / median_price
没错,HF28之后,用这个数值替代之前的virtual_supply,再进行计算就OK啦。
更新一下修改后的TOP20见证人的预估收益,嗯,这就和实际奖励几乎一致了。

其实不止是见证人列表计算出块奖励出了问题,分叉后,网站cutehive.com好几处功能出BUG了(比如有些节点分叉后彻底DOWN掉无法使用等),好在我都及时发现及时修复了。
感慨一下,其实这些事情应该在分叉前提前去做,比如搞清楚分叉都有哪些共识变化,会对程序产生那样的影响,而不是向救火队员那样,着火了才来处理。
不过转念一下,Cloudflare那么大体量的公司也没做到事先就排查、预判式解决各种问题,何况我这个小站乎?更何况我可是在分叉当晚就把问题都搞定了呢,比Cloudflare的工程师高效多得多呢。😀
Thanks for the update on your witness. I had an extra vote I wasn't using, so I threw it your way the other day. I always forget about your tools site and it is quite helpful. In fact, if I had known about it sooner, I probably wouldn't have wasted my time making my own python program to figure out who had muted me. However, it was a good learning experience for me!
Thank you very much for supporting my witness.
Although I haven’t heavily promoted this website, I personally feel it’s a very helpful tool. In particular, it helps us review witness votes and ensure we’re voting for qualified witnesses (for example, those running version 1.28.3 and producing blocks normally).
I plan to set aside some time later to add more features to the site, making it easier for both myself and others to use Hive more effectively.
Looking forward to seeing where you take it!
Happy to be of help 🫡
Thank you so much for your help (even though you were answering someone else’s question in the MM 🤭).Otherwise, I would have had to spend a lot of time figuring out what went wrong.
👍🏻👍🏻👍🏻
😁