在昨天的帖子中,我介绍了如何导出导入私钥等操作:
然而,作为一个程序猿,总觉得登陆来登陆去,点啊点啊的太麻烦,那么有没有方便快捷的方法获取私钥呢?前一阶段在学习python-bitshares,好吧,我承认我挖的坑还没有填完,以后慢慢填吧,让我先来尝试一下能否用账户密码以及python-bitshares直接获得私钥。
(图源 :pixabay)
使用PasswordKey
类获取私钥
经过一番学习,发现python-bitshares中有个PasswordKey
类
用这个类,可以获取账户密码的对应私钥,简单的示例代码如下:
from bitsharesbase.account import PasswordKey
account = "test2018"
passwd = "P5JiDXtCaDdCTgCrkXAG2fEzVUjrBxSJbx9MsXXXXXX"
role = "active"
pwkey = PasswordKey(account, passwd, role=role)
private_key = pwkey.get_private()
print("Account:", account)
print("Passwd:", passwd)
print("PrivateKey:", private_key)
运行结果如下:
我们成功的获取了这个账户对应的Active Private Key.
为了校验一下我们获取的私钥是否正确,我登陆网页钱包查看了一下私钥:
对比上述私钥,可知我们获得的结果是正确的。
如何获得公钥
我们已经可以使用PasswordKey
类获取私钥,但是为了校验我们获得的私钥是否正确,还特意登陆了网页钱包查看了一下私钥。这岂不是多此一举!既然还需要登陆网页钱包,那么直接获得私钥就好了,何必还用程序生成。
那么有啥办法来查看我们生成的私钥是否是账户对应的私钥呢?
很简单,对比一下公钥就可以了。
为了对比公钥,我们需要获得账户的公钥,以及用程序生成公钥。
账户的公钥可以通过区块链浏览器查看
以上为我这个账户的公钥,我们暂且以Active KEY为例。
将上述代码的下半部分更新成如下内容:
pwkey = PasswordKey(account, passwd, role=role)
private_key = pwkey.get_private()
public_key = pwkey.get_public()
print("Account:", account)
print("Passwd:", passwd)
print("PrivateKey:", private_key)
print("PublicKey:", public_key)
结果,这是什么鬼?
貌似公钥的值是正确的,但是前缀是GPH
而不是BTS
看了一下代码,原来PasswordKey的get_private()和get_public()都是调用了父类石墨烯库中的PasswordKey中的方法。而在父类中,默认的前缀是GPH
而不是BTS
要解决这个问题,一种方式是修改python-bitshares以及python-graphenelib库中对应的函数,这个比较麻烦。
所以我采用了另外一种方法:
即由Private Key 从新生成公钥
public_key = PrivateKey(str(private_key)).pubkey
因为我们调用的是python-bitshares中的PrivateKey类,所以默认的前缀为BTS
,无需我们在参数中设置
前缀完全正常,和区块链浏览器中对比完全一致。
完整的示例代码
from bitsharesbase.account import PasswordKey
from bitsharesbase.account import PrivateKey
account = "test2018"
passwd = "P5JiDXtCaDdCTgCrkXAG2fEzVUjrBxSJbx9MsXXXXXX"
role = "active"
pwkey = PasswordKey(account, passwd, role=role)
private_key = pwkey.get_private()
#public_key = pwkey.get_public()
public_key = PrivateKey(str(private_key)).pubkey
print("Account:", account)
print("Passwd:", passwd)
print("PrivateKey:", private_key)
print("PublicKey:", public_key)
以上为完整的示例代码,仅供参考。
结论
(图源 :pixabay)
使用账户密码以及python-bitshares中的PasswordKey类,可以轻易获取对应账户的私钥,无需登陆网页钱包等繁琐的步骤。
可以使用生成的私钥使用PrivateKey类来生成公钥与区块链浏览器上显示的公钥信息对比验证是否正确。
以上代码仅供参考。