Python 开发以太坊钱包:从入门到实践指南**
随着区块链技术的飞速发展,加密货币钱包作为用户与区块链交互的核心工具,其重要性日益凸显,以太坊作为全球领先的智能合约平台,其钱包开发更是众多开发者和项目关注的焦点,本文将详细介绍如何使用 Python 语言进行以太坊钱包的开发,涵盖基本概念、核心库、关键步骤以及实践案例,助你快速上手构建自己的以太坊钱包。
在选择开发语言时,Python 凭借其独特的优势成为以太坊钱包开发的理想选择之一:

web3.py、py-solc-x、ethereum 等,大大简化了与以太坊节点交互的复杂性。在开始编码之前,理解几个核心概念至关重要:
web3.py 是与以太坊节点进行交互的最核心 Python 库,它提供了一个 Pythonic 的接口,连接到以太坊节点(如 Geth、Parity 或 Infura 等),从而实现账户管理、交易发送、智能合约交互等功能。
安装 web3.py:
pip install web3
其他可能用到的库:

mnemonic:用于生成和验证 BIP39 助记词。bip-utils:处理 BIP39, BIP32, BIP44 等比特币改进提案,用于分层确定性钱包 (HD Wallet)。eth-account:提供了更高级别的账户管理功能,如本地签名和加密。你需要一个以太坊节点,对于开发测试,可以使用:
from web3 import Web3
infura_url = "https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID"
w3 = Web3(Web3.HTTPProvider(infura_url))
# 检查连接是否成功
print(f"Connected: {w3.is_connected()}")
最核心的是生成私钥和地址。
从随机数生成私钥和地址
import os
# 生成随机私钥 (32字节)
private_key_bytes = os.urandom(32)
private_key_hex = private_key_bytes.hex()
# 将私钥转换为 Account 对象
from eth_account import Account
account = Account.from_key(private_key_hex)
# 获取地址
address = account.address
print(f"Private Key: {private_key_hex}")
print(f"Address: {address}")
使用助记词生成 HD 钱包 (推荐)

这更符合现代钱包标准,可以从一个助记词派生多个账户。
from mnemonic import Mnemonic
from eth_account import Account
from bip_utils import Bip39MnemonicValidator, Bip39SeedGenerator, Bip44, Bip44Coins, Bip44Changes
# 1. 生成助记词
mnemo = Mnemonic("english")
seed_phrase = mnemo.generate(strength=128) # 12个单词
print(f"Seed Phrase: {seed_phrase}")
# 2. 从助记词生成种子
seed = Bip39SeedGenerator(seed_phrase).Generate()
# 3. 使用 BIP44 派生路径 (以太坊默认路径: m/44'/60'/0'/0/0)
bip44_mst = Bip44.FromSeed(seed, Bip44Coins.ETHEREUM)
bip44_acc = bip44_mst.Purpose().Coin().Account(0).Change(Bip44Changes.CHAIN_EXTERNAL).AddressIndex(0)
# 4. 获取私钥和地址
private_key_hex = bip44_acc.PrivateKey().ToHex()
address = bip44_acc.PublicKey().ToAddress()
print(f"Derived Private Key: {private_key_hex}")
print(f"Derived Address: {address}")
# 使用 w3.eth.get_balance() 查询余额 (单位: Wei)
balance_wei = w3.eth.get_balance(address)
balance_eth = w3.from_wei(balance_wei, 'ether')
print(f"Balance of {address}: {balance_eth} ETH")
发送交易是钱包的核心功能之一,需要构造交易、签名并发送。
# 假设我们已经有一个发送方账户 (sender_account) 和接收方地址 (receiver_address)
sender_private_key_hex = "YOUR_SENDER_PRIVATE_KEY_HEX" # 实际使用中应安全存储
sender_account = Account.from_key(sender_private_key_hex)
receiver_address = "0xRecipientAddress..."
# 1. 获取 nonce
nonce = w3.eth.get_transaction_count(sender_account.address)
# 2. 构造交易
tx = {
'nonce': nonce,
'to': receiver_address,
'value': w3.to_wei(0.01, 'ether'), # 发送 0.01 ETH
'gas': 21000, # 转账 ETH 的最小 gas
'gasPrice': w3.eth.gas_price, # 获取当前 gas 价格
'chainId': 1 # 主网 chainId, 测试网如 Ropsten 是 3
}
# 3. 签名交易
signed_tx = w3.eth.account.sign_transaction(tx, sender_private_key_hex)
# 4. 发送交易
tx_hash = w3.eth.send_raw_transaction(signed_tx.rawTransaction)
# 5. 等待交易确认
receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
print(f"Transaction sent: {tx_hash.hex()}")
print(f"Transaction receipt: {receipt}")
钱包开发中,安全是重中之重:
nonce 和 chainId。本文介绍了使用 Python 开发以太坊钱包的基本流程,包括环境搭建、核心库使用、账户生成、余额查询和交易发送等关键步骤,Python 的简洁性和强大的库生态使得以太坊钱包开发变得更加高效。
一个完整的钱包应用还包含更多功能,如: