Я хочу знать процесс генерации ключей для эфириума с помощью web3.py. Как сгенерировать ключи, если я установлю свою эфирную ноду.
from web3 import Web3, HTTPProvider, IPCProvider
web3 = Web3(HTTPProvider('http://localhost:8545'))
Я настроил узел. Теперь, как можно получить ключи (приватный, публичный и эфирный адрес)? Пожалуйста, объясни.
Вы можете использовать web3.personal.newAccount(password)
метод:
Создает новую учетную запись в цепочке ключей узла, зашифрованную данным
passphrase
. Возвращает адрес созданной учетной записи.
py>> web3.personal.newAccount('the-passphrase') ['0xd3cda913deb6f67967b99d67acdfa1712c293601']
Обратите внимание, что в целях безопасности узлы не раскрывают закрытый ключ через json-rpc
API, который использует web3. Я также не знаю, как получить доступ к вашему открытому ключу.
Если вам нужны локальные ключи вместо размещенных ключей, ознакомьтесь с: Как я могу создать кошелек в python?
Редактировать : кажется, вам действительно нужны обе вещи: локальный ключ и размещенный ключ одновременно. Для этого вы можете создать ключ в узле, а затем извлечь его. Это включает в себя поиск файла и его расшифровку.
Где хранится ваш ключевой файл, зависит от вашего выбора узла, ОС и конфигурации. Я предполагаю, что geth
папка хранилища ключей по умолчанию:~/.ethereum/keystore/
Вы можете расшифровать ключевой файл, используя метод eth-account decrypt()
:
from eth_account import Account
with open('~/.ethereum/keystore/<your_keyfile_name>') as keyfile:
keyfile_json = keyfile.read()
private_key = Account.decrypt(keyfile_json, '<you-account-password>')
# get some extra info about the private_key, like the address:
acct = Account.privateKeyToAccount(private_key)
ether_address = acct.address
Вы также спрашивали об открытом ключе, который не часто используется в Ethereum, поэтому для него нет отличного API. Вы можете использовать этот закрытый API, но обратите внимание, что имена этих переменных могут измениться в любое время:
acct._key_obj.public_key
w3.eth.sendRawTransaction()
?Предполагая, что вы активировали личный rpc вашего geth , чтобы сделать это программно без жесткого кодирования пути к каталогу файла хранилища ключей в python , сделайте следующее:
from web3 import Web3
import eth_keys
from eth_account import account
w3 = Web3(Web3.HTTPProvider('http://127.0.0.1'))
password = 'password'
address = web3.personal.newAccount('password')
wallets_list = w3.geth.personal.list_wallets()
keyfile_path = (wallets_list[list(i['accounts'][0]['address'] for i in wallets_list).index(address)]['url']).replace("keystore://", "").replace("\\", "/")
keyfile = open(keyfile_path)
keyfile_contents = keyfile.read()
keyfile.close()
private_key = eth_keys.keys.PrivateKey(account.Account.decrypt(keyfile_contents, password))
public_key = private_key.public_key
private_key_str = str(private_key)
public_key_str = str(public_key)
резчик