每天进步一点点:HP委托 / delegate_vesting_shares
好久没有更新我的每天进步一点点系列了,因为最近太忙了,忙到连写代码和调程序的时间都几乎没有。所以每天进步一点点说起来很简单,但是实际要做到还真的挺难呢。
今天抽出些时间完成了HP委托这个功能,我们知道,HP就相当于你在HIVE上的股权,点赞能点出多少金额、踩人有多大力度、甚至你在HIVE上能用多少资源(RC),这些都和你持有多少HP息息相关。
(图源 :pixabay)
而HP委托,就是A账户把自己的部分和HP相关的权益委托给B账户,相应地A账户和HP相关的权益减少,B账户则做对应的增加。好了,不多介绍了,其实这玩意大家都应该很熟悉了。
按VESTS委托
为了实现HP委托 操作,我定义了如下operation模板:
op_delegate_vesting_shares= ['delegate_vesting_shares', {
'delegator': '',
'delegatee': '',
'vesting_shares': ''
}]
其中delegator
委托人,就是将HP相关权益委托出去的账户,也就是A账户;delegatee
被委托人,就是接收HP相关权益的人,也就是B账户。
所以操作时填充上边结构就行,比如在函数中做对应的赋值:
op[1]['delegator'] = delegator
op[1]['delegatee'] = delegatee
op[1]['vesting_shares'] = HIVE_ASSET(vesting_shares)
之后,将op放入transaction,再签名广播就可以了
trx.append_op(op)
trx.sign_digest(wif)
trx.broadcast()
将上述代码包装成函数,我们就可以使用诸如如下调用来完成HP委托了:
client.delegate("oflyhigh", "oflyhigh.test", "5000 VESTS", wif)
被广播的transaction大致长这样:
调用成功后,在https://hiveblocks.com/可以查询到对应的transaction:
按HP 委托
虽然按VESTS委托操作起来比较简单,但是总感觉不够直观,因为平时我们打交道的都是HP,而不是vesting_shares
,尽管HP只是vesting_shares
的表现方式,但是我们还是希望以HP的形式直接来操作HP委托。
其实实现起来也很简单,只要把HP转换成vesting_shares
即可,这个需要从dynamic_global_properties的参数中计算出vesting_shares和HP的换算关系,然后转换即可。
实现相应功能后,使用如下调用即可:
client.delegate("oflyhigh", "oflyhigh.test", "5 HP", wif)
调用成功后,在https://hiveblocks.com/可以查询到对应的条目,可见数值计算的还是很准的:
取消HP 委托
取消HP 委托也很简单啦,只要委托的数值为0,就可以啦。
client.delegate("oflyhigh", "oflyhigh.test", "0 VESTS", wif)
广播出去的transaction大致长这样:
调用成功后,在https://hiveblocks.com/可以查询到对应的条目:
所以,知道了原理,实现按VESTS委托、按HP 委托、取消HP 委托还是很简单的。
注:文中代码仅为演示,仅供参考