以太坊 - 如何使用Web3.py和Python发送ERC-20代币 - Quicknode

  • QuickNode
  • 发布于 2024-11-13 16:17
  • 阅读 26

本文详细探讨了如何使用Web3.py库在以太坊区块链上与ERC-20代币进行交互,涵盖了ERC-20代币的基本概念、设置开发环境、实现代币转账及授权等内容。文章提供了丰富的代码示例和指导,使开发者能够在实战中熟悉与以太坊的交互方式。

概述

在本指南中,我们深入探讨与以太坊区块链交互的实际方面,特别关注 ERC-20 代币的转移。ERC-20 代币是一种标准的以太坊代币类型,广泛用于各种应用中。我们将使用流行的库:Web3.py for Python 来实现这一功能。

你将做什么

  • 理解 ERC-20 代币的基本概念及其转移方法
  • 设置必要库的开发环境
  • 实现 ERC-20 代币转移到以太坊地址
  • 实现 ERC-20 代币的批准,以及代表智能合约的转让

你需要什么

  • 对以太坊的基本了解智能合约的熟悉程度。
  • 熟悉 Python
  • 一个文本编辑器或 IDE(如 VS Code)
  • 能够连接到以太坊网络的以太坊节点或服务,如 QuickNode(或其他 24 种区块链!免费注册 这里
  • 一个 EVM 钱包(具有访问私钥的权限,如 MetaMask 或烧钱包)
依赖项 版本
Python 3.9.6
web3.py 6.18.0

ERC-20 代币与批准

要详细了解 ERC-20 代币、它们在以太坊生态系中的角色,以及对 ERC-20 智能合约批准至关重要的“approve”函数的深入了解,请参考我们的综合指南:如何使用 QuickNode SDK 发送 ERC-20 代币。本指南将特别关注使用 Web3py 的实际实施方面。

现在,在深入研究发送 ERC-20 代币的技术细节之前,让我们先设置一个免费的 QuickNode 端点并为我们的钱包提供资金。

项目先决条件:创建 QuickNode 端点

你可以自由使用公共节点或部署并管理自己的基础设施;然而,如果你希望获得 8 倍的响应速度,你可以将重担留给我们。免费注册一个账户 这里

登录后,点击 创建端点 按钮,然后选择你要部署的区块链和网络。为了本指南的目的,我们将选择 Ethereum Sepolia 链。

创建端点后,请保留该页面,因为我们将在本指南的技术编码部分中需要它。

Sepolia QuickNode 端点

提示

请注意,尽管我们在本指南中使用 Ethereum Sepolia 进行演示,但你也可以使用其他兼容 EVM 的链,如 Base、Polygon、Arbitrum 等,来与智能合约和 ERC-20 代币进行交互。

创建好基础设施后,我们现在将进入技术部分。

项目先决条件:为你的钱包提供资金

如果你在 Sepolia 测试网中需要 ETH,Multi-Chain QuickNode 水龙头 可以轻松获取测试 ETH!

导航到 Multi-Chain QuickNode 水龙头并连接你的钱包(例如 MetaMask、Coinbase Wallet),或粘贴你的钱包地址以检索测试 ETH。请注意,在以太坊主网使用 EVM 水龙头需要主网余额要求为 0.001 ETH。你还可以通过推特或用你的 QuickNode 账户登录以获取奖金!

Multi-Chain QuickNode 水龙头

在本指南的其余部分,我们将转到编码部分,并演示如何将 ERC-20 代币发送到以太坊地址,并批准智能合约分配一定数量的 ERC-20 代币。

使用 Web3.py 发送 ERC-20 代币

我们将使用一个流行的 web3 SDK,名为 Web3.py,它被设计用于以太坊交互。使用 Web3.py,开发者和用户可以发送交易、与智能合约交互、读取区块数据以及其他多种用例。

第 1 步:安装 SDK 并设置项目

首先,确保你已安装 Python(版本 3+),然后打开终端通过 Pip 安装 Web3py 库:

pip install web3

如果你在安装过程中遇到问题,可能是你的环境配置不正确。请参考故障排除 指南 获取有关如何建立干净环境的说明。

第 2 步:创建并配置文件

接下来,让我们创建一个名为 main.py 的文件:

echo > main.py

随后,输入以下 Python 代码:

from web3 import Web3
from web3.middleware import geth_poa_middleware
import json

## RPC URL 和合约细节的常量
RPC_URL = 'YOUR_QUICKNODE_ENDPOINT'
CONTRACT_ADDRESS = Web3.to_checksum_address('ERC20_CONTRACT_ADDRESS')
TO_ADDRESS = 'TO_ADDRESS'  # 调整发送地址

## 替换为你的私钥
private_key = 'YOUR_PRIVATE_KEY'

## 检查是否提供了私钥
if not private_key:
    raise ValueError("未提供私钥。")

## 创建连接到指定 RPC URL 的 Web3 实例
w3 = Web3(Web3.HTTPProvider(RPC_URL))

## 为使用授权共识算法的网络注入 PoA 中间件
w3.middleware_onion.inject(geth_poa_middleware, layer=0)

## 检查与以太坊网络的连接
if not w3.is_connected():
    raise ConnectionError("无法连接到 HTTPProvider")

## 从文件加载合约 ABI
with open('abi.json') as abi_file:
    contract_abi = json.load(abi_file)

## 创建合约对象
contract = w3.eth.contract(address=CONTRACT_ADDRESS, abi=contract_abi)

## 定义交易细节
token_amount = w3.to_wei(1, 'ether')  # 根据需要调整转账数量

## 获取交易的 nonce
nonce = w3.eth.get_transaction_count(w3.eth.account.from_key(private_key).address)

## 构建交易
transaction = contract.functions.transfer(TO_ADDRESS, token_amount).build_transaction({
    'chainId': w3.eth.chain_id,
    'gas': 2000000,  # 根据需要调整气体限制
    'gasPrice': w3.eth.gas_price,  # 根据需要调整气体价格或使用 w3.eth.generate_gas_price()
    'nonce': nonce,
})

## 用私钥签名交易
signed_txn = w3.eth.account.sign_transaction(transaction, private_key)

## 尝试发送交易
try:
    tx_hash = w3.eth.send_raw_transaction(signed_txn.rawTransaction)
    print(f"交易已发送!哈希: {tx_hash.hex()}")
except Exception as e:
    print(f"发送交易时出错: {e}")

记得将占位符 YOUR_QUICKNODE_ENDPOINTYOUR_PRIVATE_KEYERC20_CONTRACT_ADDRESSTO_ADDRESS 替换为实际值。

重要:你还需要在相同目录中创建一个 abi.json 文件,并包含你要转移代币的智能合约(ERC-20 代币)的 ABI。如果你要转移的 ERC-20 代币的智能合约已在 Etherscan 上验证,你可以通过合同标签检索 ABI。

第 3 步:执行并发送 ERC-20 代币

最后,我们可以通过运行以下终端命令来执行代码:

python main.py

输出将类似于:

交易已发送!哈希: 0x9fc4ea7be48f5af020e257023e5e56c28246fe3d54c815bc5b623e45d5ef1aab

就是这样!

授予智能合约访问 ERC-20 代币的权限

如本 指南批准 部分所述,你无需使用 approve 函数将 ERC-20 代币转入智能合约;但是,如果你希望智能合约代表你访问部分或全部 ERC-20 代币,你需要首先调用 approve 函数。

让我们演示如何做到这一点。我们不会深入讨论设置文件(因为与上述过程相同),所以只需跟随而不编码。

transaction = contract.functions.approve(spender_address, token_amount).build_transaction({
    'chainId': w3.eth.chain_id,
    'gas': 2000000,  # 根据需要调整气体限制
    'nonce': nonce,
})

请注意唯一的变化是在函数名称和参数字段。我们将函数更新为 approve,因为这是我们要调用的函数,并将参数值更新为 spender_address,它应该引用你想要批准代币的合约地址。因此,回顾一下,当使用 approve 函数时,你需要添加或更改的主要内容就是调用那个新函数,并更新地址以引用 spender_address 地址(智能合约)。

最后想法

恭喜你完成本指南!你现在已经掌握了使用 Web3.py 自信地发送 ERC-20 代币的知识。这一技能是与以太坊区块链交互的基本部分,也是你 Web3 工具箱中的宝贵资产。

接下来是什么?

  • 实验与探索:尝试在不同账户之间发送代币,或将这些方法集成到你的项目中。
  • 深入了解:深入智能合约开发,探索其他代币标准如 ERC-721 或 ERC-1155。
  • 加入社区:与其他开发者互动,分享你的经验,并合作开发项目。

请记住,区块链开发是一个不断发展的领域,保持更新是 🔑。订阅我们的 新闻通讯,获取有关 Web3 和区块链的更多文章和指南。如果你有任何疑问或需要进一步的帮助,请随时加入我们的 Discord 服务器或使用下面的表单提供反馈。通过关注我们的 Twitter (@QuickNode) 和 Telegram 公告频道,保持信息畅通与联系。

我们 ❤️ 反馈!

让我们知道 如果你有任何反馈或新主题请求。我们非常期待你的意见。

  • 原文链接: quicknode.com/guides/eth...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。