This post is from a low-reputation account and contains an unverified outbound link. Be cautious before clicking external links.

python-bitshares指定node节点的坑

siow(25)
Published in
#bitshares
Words
332
Reading
2 min
Listen
Play
9y

最近学习了oflyhigh@oflyhigh写的python-bitshares系列相关文章,试着自己写了些代码,发现学习过程中有些问题,记录下来。
python-bitshares是xeroc@xeroc大神维护的库 ,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没起作用,竟然连接到

wss://node.bitshares.eu

经过代码跟踪,发现这是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"]。
搞完,收工。

python-bitshares指定node节点的坑 | Ecency