【问题标题】:How do I create an ethereum wallet in pure python?如何在纯 python 中创建以太坊钱包?
【发布时间】:2018-02-10 18:11:32
【问题描述】:

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

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

我对以太坊的想法和这种开发实践非常陌生,因此很高兴能得到您的帮助。先感谢您。

【问题讨论】:

  • 您的节点以密钥副本结束对您来说是否重要,或者如果一切都发生在纯 python 中您是否满意?
  • @carver 我实际上是在寻找完全在 python 中发生的事情

标签: python ethereum web3


【解决方案1】:

您可以通过纯计算创建私钥/公钥对,绕过 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/

【讨论】:

    【解决方案2】:

    编辑:我删除了已弃用的 pyethereum 解决方案,替换为更好的 eth-account 解决方案。

    设置

    在外壳:pip install eth_account

    生成帐户

    eth-account 库将通过附加地址帮助您create a private key

    >>> 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...' 不同的随机字符串。

    有关使用私钥的更多信息,请参阅this doc with common examples, like signing a transaction


    附带说明,您可以在ethereum.stackexchange.com

    找到更多支持

    【讨论】:

    • 非常感谢您的详细说明。但是,我想知道这个密钥对是否可以用于执行实际事务(对不起,我对这个领域很陌生)。另外,我想在我的数据库中存储一个 WalletID、私钥和密码(用于私钥,类似于 myetherwallet 中使用的密码)。这可能吗?
    • 这是您之前询问的重点扩展的广泛扩展。最好将它们分成重点问题。此外,如果您展示您在此过程中尝试的工作,您将获得更多支持。像 reddit.com/r/ethdev 这样的网站可能更适合开放式的“我该如何开始?”问题。
    • 感谢您的建议。我会调查 subreddit。
    • 乐于助人。如果您对该特定问题的回答感到满意,您可以通过接受答案来表明这一点。
    • @SaujanyaAcharya 您好,您后来是如何获得所有信息的?我也在尝试做同样的事情
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2022-10-22
    • 1970-01-01
    相关资源
    最近更新 更多