替换成你自己的Infura或Alchemy项目ID

时间: 2026-02-24 7:27 阅读数: 3人阅读

以太坊API文档Python入门:连接区块链世界的桥梁


在数字经济浪潮席卷全球的今天,以太坊作为去中心化应用(DApp)和智能合约的首选平台,正吸引着无数开发者的目光,对于Python开发者而言,想要与以太坊区块链进行交互,无论是查询账户余额、读取智能合约状态,还是发起交易,都离不开一个核心工具——以太坊API,而掌握如何利用Python调用这些API,就是通往区块链开发世界的第一步。

本文将为您详细梳理以太坊API的核心概念,并重点介绍如何使用Python与这些API进行交互,助您轻松搭建起连接Python与以太坊的桥梁。

什么是以太坊API?

以太坊API是一套预定义的接口,它允许我们的应用程序(比如用Python写的脚本)向以太坊网络发送请求,并接收响应,这些请求可以包括:

  • 查询信息:获取某个地址的ETH余额、查看一个智能合约的代码、读取合约中的某个变量。
  • 发起交易:向某个地址转账ETH、调用智能合约中的某个函数来修改链上状态。

最主流、最广泛使用的以太坊API是JSON-RPC API,它是一个无状态的、轻量级的远程过程调用协议,使用JSON格式进行数据编码,几乎所有的以太坊节点(如Geth)和第三方服务提供商都支持这个标准化的API。

如何访问以太坊API?

开发者通常有两种方式来获取JSON-RPC API的访问端点:

  1. 运行自己的节点:在自己的服务器上下载并运行一个以太坊客户端(如Geth或Parity),这种方式完全自主可控,但需要较高的硬件配置、持续的带宽和同步整个区块链数据,对个人开发者不太友好。
  2. 使用第三方节点服务商:这是目前最流行的方式,像InfuraAlchemyQuickNode等平台提供了稳定、快速且可扩展的节点服务,你只需要注册一个免费账户,就可以获得一个专属的API端点(URL),无需自己维护节点,极大地降低了开发门槛。

对于初学者来说,我们强烈推荐使用Infura或Alchemy,在它们的官网上创建项目后,你会得到类似 https://mainnet.infura.io/v3/YOUR_PROJECT_ID 这样的URL,这就是你与以太坊主网对话的“钥匙”。

Python库的选择:Web3.py

在Python生态中,与以太坊JSON-RPC API交互最强大、最流行的库是 Web3.py,它是一个功能全面的Python库,封装了底层的JSON-RPC调用,提供了简洁、直观的Pythonic接口。

你需要安装它:

pip install web3

Web3.py库几乎可以满足你所有的以太坊交互需求,包括:

  • 连接到以太坊节点
  • 创建和管理账户(钱包)
  • 发送交易和估算Gas费用
  • 与智能合约进行交互(读取和写入)
  • 事件监听

Python实战:通过API与以太坊交互

下面,我们通过几个具体的Python代码示例,来感受一下如何使用Web3.py和以太坊API。

连接到以太坊网络

你需要从Infura或Alchemy获取一个主网(或测试网)的URL,并用它来初始化Web3对象。

from web3 import Web3
infura_url = "https://mainnet.infura.io/v3/YOUR_PROJECT_ID"
w3 = Web3(Web3.HTTPProvider(infura_url))
# 检查连接是否成功
print(f"是否已连接: {w3.is_connected()}")
# 输出: 是否已连接: True

查询ETH余额

以太坊API可以轻松查询任意地址的ETH余额。eth_getBalance是核心API,Web3.py将其封装得非常易用。

# 要查询的以太坊地址
address = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" # Uniswap V2的ETH-USDC池地址
# 地址需要转换为校验格式
checksum_address = Web3.to_checksum_address(address)
# 调用API获取余额(单位是Wei)
balance_wei = w3.eth.get_balance(checksum_address)
# 将Wei转换为ETH
balance_eth = w3.from_wei(balance_wei, 'ether')
print(f"地址 {checksum_address} 的余额是: {balance_eth} ETH")

读取智能合约状态

这是以太坊API最强大的功能之一,假设我们想去读一个部署在以太坊上的智能合约的某个变量。

  • 获取合约地址和ABI(应用程序二进制接口)

    • 合约地址:合约部署在区块链上的唯一地址。
    • ABI:一份描述合约有哪些函数、函数的参数和返回值类型的JSON文件,它就像是合约的“说明书”。
  • 使用Web3.py加载合约

# 假设我们要查询USDT代币的余额(USDT是一个ERC20代币)
# USDT在以太坊主网的合约地址
usdt_contract_address = "0xdAC17F958D2ee523a2206206994597C13D831ec7"
# USDT的ABI(为了简洁,这里只包含一个balanceOf函数的必要部分)
# 实际开发中需要从Etherscan等平台获取完整的ABI
usdt_abi = [
    {
        "constant": True,
        "inputs": [{"name": "_owner", "type": "address"}],
        "name": "balanceOf
随机配图
", "outputs": [{"name": "balance", "type": "uint256"}], "type": "function" } ] # 加载合约 usdt_contract = w3.eth.contract(address=usdt_contract_address, abi=usdt_abi) # 查询某个地址的USDT余额 address_to_check = "0x742d35Cc6634C0532925a3b844Bc9e7595f8bE8c" usdt_balance = usdt_contract.functions.balanceOf(address_to_check).call() print(f"地址 {address_to_check} 的USDT余额是: {usdt_balance} (单位为最小精度)")

发送交易(修改链上状态)

发送交易比查询要复杂,因为它需要签名和支付Gas费,这通常涉及到创建一个本地账户,用私钥对交易进行签名。

# 注意:这个例子仅用于演示,实际操作请务必使用测试网和测试账户!
# 主网操作错误将导致真实资产损失!
# 1. 创建一个本地账户(需要真实的私钥)
# 私钥请妥善保管,切勿泄露!
private_key = "YOUR_PRIVATE_KEY_HERE"
account = w3.eth.account.from_key(private_key)
# 2. 构建交易
# 接收方地址
to_address = Web3.to_checksum_address("0x1234567890123456789012345678901234567890")
# 转账金额(单位:Wei)
value = w3.to_wei(0.01, 'ether')
# 获取当前最新的nonce
nonce = w3.eth.get_transaction_count(account.address)
# 构建交易字典
transaction = {
    'to': to_address,
    'value': value,
    'gas': 21000, # 转账ETH的固定Gas Limit
    'gasPrice': w3.eth.gas_price, # 获取当前建议的Gas Price
    'nonce': nonce,
    'chainId': 1 # 主网Chain ID
}
# 3. 签名交易
signed_txn = w3.eth.account.sign_transaction(transaction, private_key)
# 4. 发送交易
tx_hash = w3.eth.send_raw_transaction(signed_txn.rawTransaction)
# 5. 等待交易被打包并获取收据
print(f"交易已发送,等待确认... 交易哈希: {w3.to_hex(tx_hash)}")
tx_receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
print(f"交易已确认! 区块号: {tx_receipt.blockNumber}")

总结与展望

以太坊API文档(特别是JSON-RPC规范)是区块链开发的基石,而Python的Web3.py库则为我们提供了驾驭这块基石的强大工具,通过本文的介绍,您应该已经了解了如何:

  1. 理解以太坊API的作用和访问方式。
  2. 使用Web3.py库连接到以太坊网络。
  3. 编写Python代码来查询余额、读取合约状态和发送交易。

这只是区块链开发的冰山一角,您可以进一步探索链下数据预言机去中心化身份(DID)NFT元数据管理等更高级的应用场景,以太坊的世界广阔无垠,而掌握Python