为什么仍需要一双手把手 Ethereum 创建钱包指南?
在中文社区搜索 “Ethereum 钱包 创建” 时,你会发现不少教程要么默认你是 Solidity 高手,要么把浏览器插件的安装步骤写成了天书。作为一名纯 Python 开发者,我只想在服务器端自动化生成一个可复原的 ETH 钱包,却花了整整一晚才被 BIP-39 和 web3.py 的管线吓到。
这篇指南就是我的“踩坑总结”:十行代码 + 一行 Infura 配置,即可在本地把以太坊钱包稳稳搞出来。
入门必读:一条龙所需工具
| 关键词 | 作用 |
|---|---|
| Python 以太坊钱包 | 用脚本自动化钱包创建,可在 CI/CD 环境中批量生成地址 |
| BIP-39 助记词 | 生成可读、可备份的 12/24 词短语,兼容 MetaMask、Rabby 等主流钱包 |
| web3.py | 社区最成熟的 Python 与 EVM兼容网络交互库 |
| Infura | 无需本地节点即可连接主网、测试网、二层网络的极简 RPC 提供方 |
所有包只需两个命令就能装好:
pip install web3==6.13 mnemonic==0.21Step 0|Infura 盲配 30 秒
- 打开 https://infura.io/,注册账号(邮箱 + 手机验证码秒过)。
- 新建 Project → 复制
https://mainnet.infura.io/v3/你的PROJECT_ID这个 HTTP endpoint。 - 把这个 endpoint 保存在环境变量,后面脚本直接读取:
export MAIN_NET_HTTP_ENDPOINT="https://mainnet.infura.io/v3/你的PROJECT_ID"Step 1|十行搞定 ETH 钱包核心代码
以下代码可同时跑在 Mac、Linux、WSL 或服务器,确保 Python ≥3.8 即可。
#!/usr/bin/env python3
# eth_wallet.py
import os
from mnemonic import Mnemonic
from web3 import Web3
mnemo = Mnemonic("english")
words = mnemo.generate(strength=256) # 24 个助记词
seed = Mnemonic.to_seed(words, passphrase="") # 可按需再加二次密码
w3 = Web3(Web3.HTTPProvider(os.getenv("MAIN_NET_HTTP_ENDPOINT")))
private_key = seed[:32].hex()
acct = w3.eth.account.from_key(private_key)
print("助记词:", words)
print("私钥 :", private_key)
print("地址 :", acct.address)运行效果:
助记词: luxury alpha cricket ... radar toddler buzz
私钥 : 0x45fc...e1b2
地址 : 0x68F...a5bD👉 把脚本改成 Web API,让它 24 小时自动批量生成地址
Step 2|助记词实战:导入到应用钱包
有了 BIP-39 助记词,你可以在任意钱包里恢复同一地址:
- MetaMask:设置 → 导入钱包 → 填入 24 词短语(无需私钥)
- Rabby / OKX 钱包:同理,优先选 “助记词” 而非私钥,加速恢复
⚠️ 安全提醒:24 词控制一切,一定离线存放!任何在线存储都可能被截屏、粘贴板嗅探或木马扫描。
Step 3|测试:在 Rinkeby Goerli 验证交易签名
主网 Gas 价格高?先用测试币无脑体验。
>>> w3_goerli = Web3(Web3.HTTPProvider("https://goerli.infura.io/v3/你的PROJECT_ID"))
>>> acct_goerli = w3_goerli.eth.account.from_key(private_key)
>>> tx = {
... "to": "0x000000000000000000000000000000000000c0DE",
... "value": int(0.001 * 10**18),
... "gas": 21000,
... "maxFeePerGas": Web3.to_wei(10, "gwei"),
... "maxPriorityFeePerGas": Web3.to_wei(2, "gwei"),
... "nonce": w3_goerli.eth.get_transaction_count(acct_goerli.address),
... "chainId": 5
... }
>>> signed = w3_goerli.eth.account.sign_transaction(tx, private_key)
>>> w3_goerli.eth.send_raw_transaction(signed.rawTransaction).hex()
'0x1ec...bdbc'只要 chainId 正确,同一套助记词在 任何 EVM 兼容网络 都能派生出同意私钥 / 地址。
常见疑问 FAQ
Q1: BIP-39 与 BIP-44 有什么区别?
A1: BIP-39 负责生成助记词;BIP-44 定义派生路径(如 m/44'/60'/0'/0/0)。w3.eth.account.from_key() 已默认走以太路径,无需额外配置即可使用。
Q2: 如何保证助记词安全又不遗失?
A2: 分离存储:硬件钱包 + 钢板,或写在 2 张上放不同国家。不要用云盘、聊天软件截图,更别拍照发邮箱。
Q3: 可以只给项目暴露公钥吗?
A3: 可以。脚本本身可关闭私钥输出,仅把地址保存进数据库,配合 HD 钱包 批量轮换待使用地址即可。
Q4: 为什么打印出来的私钥不能直接发帖给别人?
A4: 任何人拿到私钥就拥有全部资产控制权,官方文档和审计都强烈建议“私钥仅供自身脚本内部使用”。
Q5: Python 版本更新会导致脚本崩溃吗?
A5: 只要 web3.py ≥6.0,mnemonic ≥0.20,兼容性已非常稳;测试覆盖率超 90%,可放心跑生产。
Q6: 可以在交易所用这套地址收款吗?
A6: 可以,但仍需小额 测试转账 确认到账,确保交易所支持 ERC-20 标准 或 Layer2 桥接。
拓展阅读:把脚本升级成 SaaS 钱包工厂
- 把助记词加密后存到 AWS KMS,实现 热钱包 自动派生。
- 用 FastAPI 打包
POST /create,十秒可生成 100 个干净地址。 - 结合 余额监控 API(Infura Trace 或 Etherscan RPC),检测存款到账后触发后端打款。
👉 立即测试钱包 API,免费获取 1000 次地址生成额度
结束语:让区块链开发像写 CRUD 一样简单
从 2024 年开始,越来越多的 Python 开发者开始把区块链当成“另一个数据库”。借助 Infura、web3.py 与 BIP-39,如今你可以把“以太坊钱包”的创建流程封装成脚本、API、甚至微服务。
下一次当你要在自动化测试、空投工具、NFT 铸造或游戏道具分配里用到钱包地址时,不需要再学钱包 UI,只需复制粘贴这十行代码就够了。祝编码愉快,钱包永不被盗!