最近学习了写的python-bitshares系列相关文章,试着自己写了些代码,发现学习过程中有些问题,记录下来。
python-bitshares是大神维护的库 ,uptick就是用的这个库。
https://github.com/bitshares/python-bitshares
或
https://github.com/xeroc/python-bitshares
安装:
pip install bitshares
升级:
pip install --user --upgrade
然后我们就可以开发自己的bitshares应用程序了。
from bitshares import BitShares
from pprint import pprint
node = "wss://ws.gdex.top"
bts = BitShares(node)
pprint(bts.info())
ok,看起来貌似一切正常,但是,当我们newWallet,addPrivateKey,并且set_default_account(account)操作时,诡异的事情发生了:
发现我们设置的node没起作用,竟然连接到
经过代码跟踪,发现这是storage.py这个单元中的class Configuration(DataDir)这个类中设定的默认认值:
找到问题就容易解决了,添加如下代码,搞定:
Configuration.config_defaults["node"] = node
那么bug成因是什么呢?看代码:
因为set_default_account函数创建了一个Account实例,但是没有传bitshares_instance参数,而Account类的父类BlockchainObject在bitshares_instance=None时又调用了instance.py单元的shared_bitshares_instance函数:
再看shared_bitshares_instance函数干了什么:
创建了一个新的BitShares实例,并传入了空的配置,然后再回到bitshares.py单元:
一切都已明了,在BitShares对象创建时,如果node传空参,就去storage.py中读取默认值config_defaults["node"]。
搞完,收工。