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

投稿 2026-04-03 14:57 点击数: 18

以太坊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的访问端点:

    随机配图
i>运行自己的节点:在自己的服务器上下载并运行一个以太坊客户端(如Geth或Parity),这种方式完全自主可控,但需要较高的硬件配置、持续的带宽和同步整个区块链数据,对个人开发者不太友好。
  • 使用第三方节点服务商:这是目前最流行的方式,像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