9

我正在构建一个为用户创建钱包的应用程序。一种选择是 web3.py 中的web3.personal API,它有一个newAccount('passphrase')方法。该方法只返回创建账户的地址。

我要找的是一个类似于web3.js中的eth.accounts API的函数,它有一个create([entropy])方法。它返回一个包含“地址”、“私钥”和其他详细信息的帐户对象。

我对以太坊的想法和这种开发实践非常陌生,所以很高兴能从你那里得到一些帮助。先感谢您。

4

2 回答 2

13

编辑:我删除了已弃用的pyethereum解决方案,取而代之的是更好的解决方案eth-account

设置

在外壳:pip install eth_account

生成帐户

eth-account库将帮助您创建带有附加地址的私钥:

>>> from eth_account import Account

>>> acct = Account.create('KEYSMASH FJAFJKLDSKF7JKFDJ 1530')
>>> acct.privateKey
b"\xb2\}\xb3\x1f\xee\xd9\x12''\xbf\t9\xdcv\x9a\x96VK-\xe4\xc4rm\x03[6\xec\xf1\xe5\xb3d"
>>> acct.address
'0x5ce9454909639D2D17A3F753ce7d93fa0b9aB12E'

在上面添加一些您自己的随机性有助于解决 的潜在限制os.urandom,这取决于您的 Python 版本和您的操作系统。显然使用'KEYSMASH...'与上面的随机字符串不同的随机字符串。

有关使用私钥的更多信息,请参阅此文档以及常见示例,例如签署交易


作为旁注,您可以在 ethereum.stackexchange.com找到更多支持

于 2017-09-01T17:43:51.823 回答
0

您可以通过纯计算创建私钥/公钥对,绕过 web3.py 帐户 api。

安装要求:pip install coincurve pysha3

from secrets import token_bytes
from coincurve import PublicKey
from sha3 import keccak_256

private_key = keccak_256(token_bytes(32)).digest()
public_key = PublicKey.from_valid_secret(private_key).format(compressed=False)[1:]
addr = keccak_256(public_key).digest()[-20:]
print('private_key:', private_key.hex())
print('eth addr: 0x' + addr.hex())

参考:https ://www.arthurkoziel.com/generating-ethereum-addresses-in-python/

于 2021-07-31T02:35:00.750 回答