2026-06-15 17:43:23
最近,越来越多的小伙伴们对区块链和以太坊(Ethereum)这种新兴技术表现出浓厚的兴趣。其实,以太坊不只是虚拟货币,它还有许多好玩的东西,比如智能合约。这种合约可以自动执行,不需要中介,省时又省力。而今天,我们要聊聊怎么用Python和Web3库来和以太坊互动。
首先我们得有个好的环境,才能开始动手。你需要安装Python和Web3库。如果你的电脑上还没有Python,可以去官网下载最新版本。安装好后,打开命令提示符,输入以下命令来安装Web3库:
pip install web3
这样,小伙伴们就完成了环境的搭建。是不是超级简单?接着,我们需要有一个以太坊节点的地址。可以自己搭建一个节点,也可以用Infura这样的服务,免费的哦!
接下来,我们就要建立与以太坊的连接了。这里以Infura为例。如果你还没有注册Infura,可以先去注册一个账号,然后创建一个新的项目,获取到你的API URL。然后在Python代码中,像下面这样连接:
from web3 import Web3
# 替换成你的 Infura URL
infura_url = 'https://mainnet.infura.io/v3/YOUR_INFURA_KEY'
web3 = Web3(Web3.HTTPProvider(infura_url))
# 检查连接是否成功
if web3.isConnected():
print("连接成功!")
else:
print("连接失败!")
这段代码就是用来连接以太坊的,也太简单了吧!只要替换你的Infura URL后运行,一看“连接成功”,内心就会雀跃不已。
在以太坊上,每个用户都有一个独特的地址,这就像是你的身份证。,要创建一个新的以太坊钱包,我们可以通过以下代码生成:
account = web3.eth.account.create()
print("新创建的地址:", account.address)
print("私钥:", account.privateKey.hex())
生成的地址和私钥一定要好好保管哦,私钥就像是你银行卡的密码,丢了可就麻烦了。
现在我们来实现一个最常见的操作:转账给别人以太币。假设你已经有了一些以太币,代码可以这样写:
from web3.middleware import geth_poa_middleware
web3.middleware_stack.inject(geth_poa_middleware, layer=0)
# 你的地址和私钥
my_address = '你的以太坊地址'
my_private_key = '你的私钥'
# 目标地址
to_address = '目标以太坊地址'
value = web3.toWei(0.01, 'ether') # 转账0.01个以太币
# 构建交易
transaction = {
'to': to_address,
'value': value,
'gas': 2000000,
'gasPrice': web3.toWei('50', 'gwei'),
'nonce': web3.eth.getTransactionCount(my_address),
}
# 签名交易
signed_txn = web3.eth.account.sign_transaction(transaction, my_private_key)
# 发送交易
txn_hash = web3.eth.sendRawTransaction(signed_txn.rawTransaction)
print("交易哈希:", txn_hash.hex())
注意,这个转账过程用到了“nonce”,也就是你账户的交易次数,确保交易是唯一的。如果你不会的话,可以在Etherscan上查看你地址的交易记录。
除了转账,我们还可以和智能合约进行互动。假设有一个智能合约已经部署在以太坊上,我们想要调用它的函数。这里假设合约地址和ABI都已知:
contract_address = '智能合约地址'
contract_abi = '合约ABI'
contract = web3.eth.contract(address=contract_address, abi=contract_abi)
# 调用合约中的函数
result = contract.functions.someFunction().call()
print("调用结果:", result)
合约的ABI就像是一份说明书,告诉你合约里有哪些函数可以调用,以及它们需要什么参数。用得熟练后,你就能自由地操控智能合约了。
有时候,我们可能想知道合约中发生了哪些事情。这个时候,监听事件就非常有用了。像这样:
event_filter = contract.events.SomeEvent.createFilter(fromBlock='latest')
for event in event_filter.get_new_entries():
print(event) # 处理事件
通过监听某个事件的发生,我们可以获取到合约执行的各种变动,真的很方便!
在使用Python和Web3的过程中,可能会遇到各种问题。比如连接不上以太坊节点、超时、私钥错误等等。遇到这些情况,首先要冷静检查你的代码。可以在交易发送前打印出整个交易结构,确认各项数据是否无误。
通过这篇文章,相信你对如何用Python和Web3库与Ethereum进行交互有了一定的了解。无论是转账、调用合约,还是监听事件,只要熟练使用这些代码,小伙伴们就可以在区块链这个巨大市场中乘风破浪。未来的蓝海市场,期待你们的加入!