Saujanya Acharya
Saujanya Acharya

Reputation: 163

How do I create an ethereum wallet in Python?

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

Answers (2)

carver
carver

Reputation: 2349

Setup

At shell: pip install eth_account

Generating 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

Valentin Kantor
Valentin Kantor

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

Related Questions