你有没有想过,用Python和以太坊玩儿起来会是怎样的感觉?就像是把编程的乐趣和区块链的神秘结合在一起,是不是听起来就有点儿刺激呢?今天,我就要带你一起探索这个奇妙的世界,看看如何用Python对接以太坊,让你的代码在区块链上大放异彩!
一、初识以太坊:一个去中心化的世界

以太坊,这个区块链界的明星,它不仅仅是一个数字货币,更是一个去中心化的应用平台。在这个世界里,你可以创建自己的数字资产,甚至可以编写智能合约,让它们自动执行复杂的逻辑。
二、Python的魔法:连接以太坊的桥梁

Python,这个编程界的“老司机”,它简单易学,功能强大。而要和以太坊搭上话,我们得借助一个叫做web3.py的库。这个库就像是Python和以太坊之间的翻译官,让我们的代码能够和区块链顺畅沟通。
三、搭建环境:准备工作

首先,你得确保你的电脑上安装了Python。打开命令行,输入以下命令安装web3.py:
pip install web3
安装完成后,你就可以开始你的以太坊之旅了。
四、连接节点:开启对话
以太坊的世界很大,要想和它对话,你得先找到一个节点。这里有几个常用的节点:
- Infura:一个提供全球节点服务的平台,你可以免费使用。
- QuickNode:另一个提供节点服务的平台,同样免费。
- Alchemy:一个专注于以太坊的节点服务,提供更快的速度和更稳定的连接。
选择一个节点后,你可以使用web3.py连接到它。比如,连接到Infura:
```python
from web3 import Web3
infura_url = 'https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'
w3 = Web3(Web3.HTTPProvider(infura_url))
连接成功后,你可以使用`w3.isConnected()`来检查连接是否正常。
五、发送交易:你的代码在行动
现在,你已经和以太坊建立了联系,接下来就是发送交易了。在以太坊上,发送交易就像是给一个账户转账。
```python
from web3 import Web3
infura_url = 'https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'
w3 = Web3(Web3.HTTPProvider(infura_url))
获取账户私钥
private_key = 'YOUR_PRIVATE_KEY'
创建账户对象
account = w3.eth.account.privateKeyToAccount(private_key)
构建交易
nonce = w3.eth.getTransactionCount(account.address)
gasPrice = w3.toWei('50', 'gwei')
gasLimit = 21000
to = 'RECIPIENT_ADDRESS'
value = w3.toWei('1', 'ether')
transaction = {
'nonce': nonce,
'gasPrice': gasPrice,
'gasLimit': gasLimit,
'to': to,
'value': value,
'data': b''
签名交易
signed_txn = account.signTransaction(transaction)
发送交易
tx_hash = w3.eth.sendRawTransaction(signed_txn.rawTransaction)
print(tx_hash.hex())
这段代码会创建一个交易,然后将其发送到以太坊网络。你可以使用`w3.eth.getTransactionReceipt(tx_hash)`来查看交易是否成功。
六、监听事件:实时获取信息
以太坊上的智能合约可以触发事件,你可以使用web3.py监听这些事件。
```python
from web3 import Web3
infura_url = 'https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'
w3 = Web3(Web3.HTTPProvider(infura_url))
创建合约实例
contract_address = 'CONTRACT_ADDRESS'
contract_abi = 'CONTRACT_ABI'
contract = w3.eth.contract(address=contract_address, abi=contract_abi)
监听事件
event_filter = contract.events.YourEvent.createFilter(fromBlock='latest')
for event in event_filter.get_all_entries():
print(event)
这段代码会监听合约上的特定事件,并将事件信息打印出来。
七、:开启你的以太坊之旅
通过这篇文章,你学会了如何使用Python对接以太坊,发送交易,监听事件。现在,你已经准备好在这个去中心化的世界里探险了。祝你好运,愿你的代码在区块链上大放异彩!