很早之前,在机器上放了个申领账户(claim_account)的脚本,使用的是beem这个python库,申领账户可以理解成使用闲余RC资源免费领门票,等有需要的时候就可以用门票注册账户。
(图源 :pixabay)
STEEM分叉成HIVE和STEEM后,我这个申领账户的脚本就罢工了,最近一直瞎忙,也懒得去看哪里的问题。
AssetDoesNotExistsException
昨晚抽出时间检查一下,原来是beem提示AssetDoesNotExistsException异常,详情如下:
beem.exceptions.AssetDoesNotExistsException: HIVE chain_assets:[{'asset': '@@000000013', 'symbol': 'SBD', 'precision': 3, 'id': 0}, {'asset': '@@000000021', 'symbol': 'STEEM', 'precision': 3, 'id': 1}, {'asset': '@@000000037', 'symbol': 'VESTS', 'precision': 6, 'id': 2}]
这种情况,有两个办法,一种是去更新beem库。@holger80 (beem创建者)已经更新了beem库,让其支持STEEM和HIVE两条链;另一种方式就是去在原来的代码上进行修改,使其可以工作。
对我而言,我只是使用其中一个claim_account功能,我觉得修改代码让这个功能可以工作,相对来讲,应该会简单一些,那就试试喽。
首先,针对AssetDoesNotExistsException,这个其实和steem-python中的如下问题类似:
AssertionError: The chain you are connecting to is not supported
我了解一下,针对这个问题,beem有两种方案,一种是在beemgraphenebase/chains.py的known_chains中加入HIVE chain信息,另一种是使用custom_chains ,而后者无需改动库代码。
所以我在我脚本中加入如下信息:
custom_chains = {
'HIVE': dict(
chain_assets=[
dict(asset='@@000000013', id=0, precision=3, symbol='HBD'),
dict(asset='@@000000021', id=1, precision=3, symbol='HIVE'),
dict(asset='@@000000037', id=2, precision=6, symbol='VESTS')
],
chain_id="0" * int(256 / 4), min_version='0.23.0', prefix='STM'
)
}
然后将如下代码:
steem = Steem()
修改为:
steem = Steem(custom_chains =custom_chains )
再次执行代码,上述错误不见啦。
MissingRequiredActiveAuthority
原以为这么一改就OK了,虽知道按下了葫芦起了瓢,执行一下脚本,又出现了新的错误。
beemapi.exceptions.RPCError: missing required active authority:Missing Active Authority oflyhigh
是不是有点面熟,这和我在steem-python遇到的错误完全一样嘛:
missing required active authority:Missing Active Authority oflyhigh
那修改的思路也有了,这次我采取点粗暴的方式,在beembase/operations.py中,将class Claim_account(GrapheneObject)的内容做如下修改:
再去测试,一切OK,又可以愉快地领账号啦:
账号账号,快到碗里来:
总结
没用重新安装库,库代码中只改动了一行,脚本中加一点配置,beem就可以工作啦。@holger80 的这个库真是了不起。
当然了,不懒的话,还是推荐大家更新库,毕竟beem里边改动的更多,会更加完善一些。