新年新气象,开始编写2024新的一年第一行代码!我靠,我发现好久不写PHP,竟然手生到不知从何着手啦!毕竟PHP是世界上最好的语言,怎么能就此放弃,一定要捡起来!
(图源 :pixabay)
重谈治理票失效
话说,最近发现中文区好多小伙伴的治理票都失效啦,看来大家对治理票的失效机制还不是很了解,或者说还不是很适应。
所谓的治理票,简单来讲就是在HIVE区块链中所有用户通过投票(见证人投票、设置投票代理、提案投票)来共同治理HIVE区块链,使其向更加安全、稳定、繁荣的方向发展。
所谓的治理票失效机制,是HF25引进的一个新的共识变化,简单来讲就是:
一年以上没有参加治理投票的用户,他的见证人投票& 设置投票代理 &提案投票都会重置。
举个例子:
你在2022年12月30日将我(@oflyhigh)设置成你的见证人代理,这样你就不用纠结选择哪个见证人以及支持哪个有益HIVE发展的提案,我来帮你搞定。
但是一年以后,上述代理设置将会自动失效。为了一直保持上述代理设置,你应该在你的治理票失效之前,重新将我设置为你的见证人代理。😀
又或者,你并没有将我设置为见证人投票代理,而是自己手动投了一些见证人,以及手动去支持了一些提案,但是如果一年内你并未进行过任何和治理票有关的操作,你之前设置(见证人票、提案投票等)将会全部被清空。
如何查找治理票失效时间
那么如何检查自己的治理票是否失效呢?我们可以通过API调用来实现:
curl -s --data '{"jsonrpc":"2.0", "method":"condenser_api.get_accounts", "params":[["hiveio"]], "id":1}' https://api.hive.blog
从返回信息中找到,没错,这个就是治理票的过期时间。
又或者可以通过访问:https://hiveblocks.com/@hiveio,找到如下内容:
虽然两者都可以找到治理票失效时间,但是缺点显而易见——比较麻烦且不够明显。
检查治理票是否失效的新方法
为了解决上述不便,我在https://www.cutehive.com/witnesses.php 工具上,增加了治理票失效的检查功能。
使用方法也超级简单,在输入框输入你的HIVE ID,再点击Check(查询)即可:
以我的ID为例,会返回类似如下的结果(治理票未过期):
如果你的治理票已失效,将会显示类似如下的信息:
如果你的治理票将在两个月内过期,那么将会显示类似第一个图的信息(Your governance vote will expire in xx days!),但是文字的颜色将会是黄色的警告⚠字样。
技术背景简介
实现上述功能主要还是使用condenser_api.get_accounts
API调用,并从中取出治理票失效时间戳($account['governance_vote_expiration_ts']
)。
然后将其转换为DateTime类型并于当前时间(UTC)进行比较date_diff
。
给我造成一些困扰内容如下:
- DateInterval 结构中
d
(Number of days)并不包含所有天数,应该使用days
来获取总的差额天数。 days
并没有正负之分,应该用invert
来判断正负。- 我们也可以直接比较两个DateTime类型实例,来做相应的逻辑处理。
编写代码期间我竟然还犯了语句结尾不写;
等低级到不能再低级的错误呢。
由此可见拳不离手,曲不离口真是至理名言呀,我这才多久没碰PHP,就把一些基本的东西忘得一干二净了。
如何解决治理票失效
这部分内容直接复制以前一篇文章中的段落:
解决治理票失效也很简单,那就是: 至少每年参与一次治理投票(见证人投票、设置见证人代理或者提案投票)。
这里顺便求一下见证人票,欢迎大家支持见证人(witness):@abit 以及 @oflyhigh
如果你不清楚该投哪个见证人或者支持哪个提案,可以考虑把我:设置成你的见证人代理哦!非常感谢!