在之前的帖子中,介绍了python-bitshares 这个用于操作bitshares区块链的强大的python库。并介绍了python-bitshares的安装以及运行了一个简单的示例,并简单分析了python-bitshares与bitshares RPC的关系。
(图源 :pixabay)
这节我们来继续学习python-bitshares 。
导入私钥
在Uptick的介绍文章中,为了更好的使用uptick,我们将bitshares账户的私钥添加到了uptick钱包中。其实,钱包功能是在python-bitshares这个层次实现和访问的。uptick只是对相关功能进行了封装。
为了方便我们后续的学习,我们也要将私钥添加到python-bitshares的本地钱包中。如何获取账户私钥,可以参考这篇文章中的对应步骤:
使用uptick 导入私钥
如果我们安装了uptick,那么可以直接使用uptick导入私钥的,非常方便。如何导入,在这篇文章已经做了详尽的介绍,就不再赘述了。
但是我直接安装的python-bitshares,是不包含uptick的,所以无法使用uptick导入私钥。
使用代码导入私钥
导入私钥之前我们需要先创建个钱包
from bitshares import BitShares
bitshares = BitShares(node="wss://openledger.hk/ws")
bitshares.wallet.create("passwd")
上述代码创建一个本地钱包,并设置密码为passwd
(密码仅供示例,出于安全考虑,实际使用时,建议设置复杂一点的密码)
再对钱包进行创造之前,我们首先需要解锁钱包:
bitshares.wallet.unlock("passwd")
解锁钱包之后,我们就可以导入私钥了
bitshares.wallet.addPrivateKey("5XXXXXXXX")
执行成功后,私钥就被导入到钱包中去了。
使用UNLOCK
环境变量解锁
在以上例子中,我们使用了
bitshares.wallet.unlock("passwd")
来解锁钱包。
在代码中硬编码密码可不是一个好习惯,假设我们有多份代码,然后需要修改密码,这一定是一个很头疼的事。
那么还有什么方法指定密码呢?
那就是设置环境变量,比如在我的系统中,
export UNLOCK="passwd"
为了每次都生效,可以加入到对应用户的.bashrc
文件中
这样我们就可以无需在程序中硬编码密码以及每次调用unlock()
了。
钱包其它功能
一般情况,都是python-bitshares 和钱包打交道,我们当它透明的就好。但是偶尔可能也需要我们直接对钱包进行操作,比如说看看钱包中有哪些用户,或者从钱包中读出某个对应用户的私钥。
一些可能会被使用到的函数如下:
- changePassphrase,修改密码
- getAccounts, 列出钱包中所有用户
- getPublicKeys,列出钱包中所有公钥
- getPrivateKeyForPublicKey,列出公钥的对应私钥。
更多函数及功能,请参考:
https://github.com/xeroc/python-bitshares/blob/master/bitshares/wallet.py
钱包存储位置
有时候我们可能需要将钱包迁移到其它的账户下,这时候一个一个私钥重新添加是很苦恼的事情,如果能直接迁移钱包文件就好了。
不同的系统下,钱包存储位置是不同的
在Linux系统下,钱包文件路径为:~/.local/share/bitshares/bitshares.sqlite
从命名可以看出是一个sqlite数据库,库中还包含一些默认参数之类的设置,这节就不详聊了。
总结
python-bitshares 提供了一个加密的本地钱包,这样我们使用起来就更加便利了。本文介绍了python-bitshares的钱包相关操作,包括以下内容:
- 创建钱包
- 解锁钱包
- 导入私钥
- 使用UNLOCK环境变量
- 钱包的其它函数
- 钱包的存储位置