Reputation: 163
I am building an application that would create a wallet for a user. One option is the web3.personal API in web3.py, which has a newAccount('passphrase')
method. The method only returns the address of created account.
What I'm looking for is a function similar to the eth.accounts API in web3.js, which has a create([entropy])
method. It returns an account object with 'address', 'privatekey' and other details.
Upvotes: 16
Views: 16033
Reputation: 2349
At shell: pip install eth_account
The eth-account
library will help you create a private key with an attached address:
>>> 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'
Adding some of your own randomness above helps address potential limitations of os.urandom
, which depends on your version of Python, and your operating system. Obviously use a different string of randomness than the 'KEYSMASH...'
one from above.
For more information about using the private key, see this doc with common examples, like signing a transaction.
As a side-note, you may find more support at ethereum.stackexchange.com
Upvotes: 19
Reputation: 1844
you can create private/public key pair with pure computations, bypassing the web3.py accounts api.
install requirements: pip install coincurve
from hashlib import sha3_256
from secrets import token_bytes
from coincurve import PublicKey
private_key = sha3_256(token_bytes(32)).digest()
public_key = PublicKey.from_valid_secret(private_key).format(compressed=False)[1:]
addr = sha3_256(public_key).digest()[-20:]
print('private_key:', private_key.hex())
print('eth addr: 0x' + addr.hex())
reference: https://www.arthurkoziel.com/generating-ethereum-addresses-in-python/
Upvotes: 0