mcpField
W
web3-py

web3-py

github.com/alphaonedev开发46 次安装
代码仓库

关于 web3-py

web3-py 是供 Python 应用和脚本与 Ethereum 交互的库,可连接节点并查询链上数据、调用合约、管理账户和处理交易。

主要功能

  1. 01通过 HTTP、WebSocket 或 IPC 连接
  2. 02查询余额、区块和事件
  3. 03使用 ABI 与合约交互
  4. 04管理账户并签署交易
  5. 05估算交易 Gas

适用场景

  1. 01读取 Ethereum 账户余额
  2. 02调用智能合约函数
  3. 03从 Python 发送已签名交易

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/alphaonedev/openclaw-graph --skill web3-py

安装后在 Claude Code 中输入/web3-py确认已加载。

详细介绍

web3-py

用途

web3-py 是一个用于通过 Web3 协议与 Ethereum 区块链交互的 Python 库。它支持以编程方式访问区块链数据、智能合约和交易。

适用场景

构建需要查询 Ethereum 数据、部署智能合约或处理交易的 Python 应用时,请使用此库。适用于 dApp、区块链分析,或与 Ethereum 节点交互的自动化脚本。

主要功能

  • 通过 HTTP、WebSocket 或 IPC 提供程序连接到 Ethereum 节点。
  • 管理账户、签署交易并处理 Gas 估算。
  • 使用 ABI 定义与智能合约交互。
  • 查询区块链状态,包括余额、区块和事件。
  • 支持 Binance Smart Chain 等兼容 Ethereum 的链。

使用模式

始终导入 web3-py,并使用提供程序初始化一个 Web3 实例。对于敏感密钥,请使用环境变量,例如在 shell 中设置 INFURA_API_KEY。使用 web3.async 处理异步操作,以提升性能。在生产环境中,使用 try-except 代码块封装调用,并使用可靠的提供程序 URL。

常用命令/API

  • 获取账户余额:使用 web3.eth.get_balance(address)。示例:
    from web3 import Web3
    w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/' + os.getenv('INFURA_API_KEY')))
    balance = w3.eth.get_balance('0xYourAddress')
    
  • 发送交易:使用 w3.eth.send_transaction(transaction)。示例:
    tx = {'from': account.address, 'to': '0xRecipient', 'value': w3.to_wei(1, 'ether')}
    signed_tx = w3.eth.account.sign_transaction(tx, private_key=os.getenv('ETH_PRIVATE_KEY'))
    tx_hash = w3.eth.send_raw_transaction(signed_tx.rawTransaction)
    
  • 调用智能合约函数:使用 contract.functions.myFunction().call()。示例:
    contract = w3.eth.contract(address='0xContractAddress', abi=contract_abi)
    result = contract.functions.balanceOf('0xAddress').call()
    
  • 估算 Gas:使用 w3.eth.estimate_gas(transaction)。传入包含 'from'、'to' 和 'data' 键的字典。

集成说明

使用 pip install web3 安装 web3-py,即可将其集成到项目中。使用类似 https://mainnet.infura.io/v3/$INFURA_API_KEY 的 URL 配置提供程序,以连接 Infura。使用环境变量存储密钥:例如,使用 os.getenv('INFURA_API_KEY') 访问 API。对于本地节点,请使用 IPC:Web3(Web3.IPCProvider('/path/to/geth.ipc'))。确保与 Ethereum 版本兼容;在交易中指定链 ID,以防止重放攻击。在生产环境部署前,先在 Ganache 等沙盒中测试集成。

错误处理

使用 try-except 处理 ConnectionError 等连接错误,例如:

try:
    w3.eth.get_block('latest')
except web3.exceptions.ConnectionError:
    print("Node unreachable; check provider URL and network status.")

对于交易失败,请捕获 ValueError,以处理资金不足或 Gas 问题:

try:
    tx_hash = w3.eth.send_transaction(tx)
except ValueError as e:
    if 'insufficient funds' in str(e):
        raise Exception("Add funds to account before retrying.")

使用前请通过 w3.is_address(address) 等方式验证地址等输入。记录包含错误码等详细信息的错误日志(例如提供程序返回的 RPC 错误),以便调试。

具体使用示例

  1. 查询代币余额:若要获取 Ethereum 主网上某个地址的 ERC-20 余额,请使用 Infura 初始化 Web3,加载代币合约,然后调用 balanceOf 函数。在脚本中的示例用法:设置 INFURA_API_KEY 环境变量,然后运行上文“常用命令/API”中调用合约的代码片段。
  2. 部署简单的智能合约:将 Solidity 合约编译为 ABI 和字节码,然后使用 w3.eth.contract 进行部署。示例:在代码中创建合约实例,并发送包含字节码的交易;处理 Gas 限制的方式参见 send_transaction 示例。

图关系

  • 相关集群:blockchain(例如,与其他区块链工具共享功能)。
  • 关联标签:web3(直接 API 交互)、python(基于 Python 实现)、ethereum(专用于 Ethereum 生态系统)。
  • 链接到:smart-contracts(通过合约处理功能),如嵌入提示所示。

评论

支持 Markdown