Addresses

如何使用 web3.py 生成私有、公共和乙太坊地址?

  • January 27, 2022

我想知道使用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-rpcweb3 使用的 api 公開私鑰。我也不知道訪問您的公鑰的方法。

如果您想要本地密鑰而不是託管密鑰,請查看:如何在 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

您還詢問了公鑰,這不是乙太坊經常使用的部分,因此沒有很好的 API。您可以使用此非公共 API,但請注意,這些變數名稱可能隨時更改:

acct._key_obj.public_key

引用自:https://ethereum.stackexchange.com/questions/43565