本文详细介绍了如何使用QuickNode SDK与以太坊区块链进行交互,尤其是在ERC-20代币的转移操作。内容涵盖ERC-20代币的基本概念、开发环境的设置、合约的授权与转移,提供了实用的代码示例和步骤,使读者能够掌握ERC-20代币的发送和与智能合约的交互方法。
在本指南中,我们深入探讨与以太坊区块链互动的实际方面,特别关注 ERC-20 代币的转移。ERC-20 代币是一种标准类型的以太坊代币,广泛应用于各种应用程序。我们将探讨如何使用在 JavaScript 中支持的 QuickNode SDK 来实现这一目标。
依赖项 | 版本 |
---|---|
node.js | 18.13.0 |
@quicknode/sdk | ^1.1.4 |
ERC-20 代币是在以太坊区块链上构建的数字资产,遵循一组特定的 标准,使其能够被共享、交换或转移到任何以太坊地址。这些代币代表广泛的资产,例如投票权、金融股份、资源的使用权或仅仅是价值的存储。
在处理 ERC-20 代币转换时,理解 approve
函数至关重要。该函数授予智能合约在你代表下转移特定数量代币的权限。这是一种安全措施,确保代币只能在获得你明确同意的情况下进行移动。
approve
函数。这类似于将代币从你的钱包发送到另一个人的钱包或智能合约。approve
函数是 ERC-20 代币在以太坊生态系统中互动的基本方面,为你控制和保护代币的使用提供了保障。
现在,在深入详细的 ERC-20 代币发送技术之前,让我们首先设置一个免费的 QuickNode 端点并为我们的钱包充值。
你可以使用公共节点或部署和管理自己的基础设施;不过,如果你希望获得 8 倍的响应速度,可以将重担交给我们。你可以在 这里 注册一个免费账号。
登录后,单击 创建一个端点 按钮,然后选择你希望部署的区块链和网络。出于本指南的目的,我们将选择 Ethereum Sepolia 链。
创建端点后,请保留该页面,因为在本指南的技术编码部分,我们会需要它。
提示
请注意,尽管我们在本指南中使用 Ethereum Sepolia 进行演示,你也可以使用其他 EVM 兼容链,例如 Base、Polygon、Arbitrum 等,与智能合约和 ERC-20 代币互动。
完成基础设施创建后,让我们继续进入技术部分。
如果你需要在 Sepolia 测试网上获取 ETH, Multi-Chain QuickNode Faucet 使获取测试 ETH 变得简单!
前往 Multi-Chain QuickNode Faucet,连接你的钱包(例如,MetaMask、Coinbase Wallet)或粘贴你的钱包地址以获取测试 ETH。请注意,使用 EVM 水龙头需要在以太坊主网上有 0.001 ETH 的主网余额。你还可以通过发推或使用 QuickNode 账户登录以获取额外奖励!
在本指南的剩余部分,我们将过渡到代码部分,展示如何将 ERC-20 代币发送到以太坊地址并将其转移到智能合约。
QuickNode SDK 是一个先进的 web3 库,让开发者能够轻松连接 QuickNode 基础设施并与区块链互动。它提供了一个适用于 JavaScript 和 TypeScript 的多功能库,并与任何框架兼容。该 SDK 支持 CommonJS 和 ES 模块格式,并使用 Viem 发起 RPC 调用。公共客户端支持的所有基本操作,例如获取区块号、交易和从智能合约读取,均可通过 Core 类的客户端属性访问。此外,它是开源的,其源代码可在 qn-oss repository 中获取。
注意,如果你需要一个 ERC-20 代币以完成本指南的其余部分,请查看此 QuickNode 指南:如何创建和部署 ERC20 代币
要安装 QuickNode SDK,我们将使用 npm 包 @quicknode/sdk。对于此包,node.js 版本需为 16 或更高。
创建一个项目文件夹,进入其中,并在终端中运行以下命令以初始化一个默认的 npm 项目:
npm init --y
然后,通过 npm 安装 @quicknode/sdk:
npm install @quicknode/sdk
或者,通过 yarn 初始化你的项目。运行命令:
yarn init --y
然后,通过 yarn 安装:
yarn add @quicknode/sdk
注意:在完成任一步骤后,将 "type": "module"
插入刚创建的 package.json 文件中。这将启用 ES 模块语法的使用。
请查看 QuickNode documentation 以获取更多信息。
接下来,让我们创建一个文件并输入代码。在你的项目目录中,创建一个名为 index.js 的文件:
echo > index.js
然后,在代码编辑器中打开该文件并输入以下代码:
import { Core } from '@quicknode/sdk';
import { sepolia } from 'viem/chains'; // 根据需要更改网络
import { createWalletClient, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import abi from './abi.json' assert { type: 'json' };
// 定义你的私钥
const privateKey = '0x' + 'YOUR_PRIVATE_KEY';
// 将私钥转换为账户对象
const account = privateKeyToAccount(privateKey);
// 初始化客户端
const core = new Core({
endpointUrl: "YOUR_QUICKNODE_ENDPOINT",
});
const walletClient = createWalletClient({ account, chain: sepolia, transport: http(core.endpointUrl) });
// 合约和交易详情
const contractAddress = 'ERC20_CONTRACT_ADDRESS';
const toAddress = 'TO_ADDRESS';
const decimals = 18; // 这应该根据你的 ERC20 小数位数进行更改
const tokenAmount = BigInt(10 ** decimals); // 1 个代币,按需调整
async function send() {
try {
const { request } = await core.client.simulateContract({
address: contractAddress,
abi: abi,
functionName: 'transfer',
args: [toAddress, tokenAmount],
account
});
const response = await walletClient.writeContract(request);
console.log('交易已发送。交易哈希:', response);
} catch (error) {
console.error('发送交易时错误:', error);
}
}
send().catch(error => console.error('发送函数中的错误:', error));
花几分钟时间回顾代码和注释。随后,替换所有占位符字符串 YOUR_QUICKNODE_ENDPOINT、YOUR_PRIVATE_KEY、ERC20_CONTRACT_ADDRESS 和 TO_ADDRESS 为它们的实际值。
注意:你将看到在导入时我们创建了一个 abi 变量,引用了我们的 abi.json 文件。你需要在同一目录中创建一个类似的文件,或者将你的 ABI 代码内联(但这可能占用空间)。例如,你可以通过访问以太坊浏览器的 合约 标签(示例)并向下滚动至 合约 ABI 部分,引用/复制一个 ABI。但请注意,此方法仅适用于在 Etherscan 上经过验证的合约。
通过调用以下命令执行你的脚本。记得在上面的代码中更新所有占位符为实际值。
node index.js
如果你使用 yarn,则运行:
yarn run index.js
输出将类似于:
交易已发送。交易哈希: 0x35f50018c2a83ca13685a7a0ad8e52598ef8ae48a0fa15dc537737f7fe6077a8
通过在 Etherscan 或你喜欢的区块浏览器上查询来确认交易。
如前面的 批准 部分所提到的,转移 ERC-20 代币到智能合约并不需要使用 approve 函数;但是如果你希望智能合约访问你的一部分或全部 ERC-20 代币,你需要先调用 approve 函数。
让我们演示一下如何做到这一点。我们不会深入讨论如何设置文件(因为这个过程与上面是一样的),所以请跟随而行而不进行编码。
async function approve() {
try {
const { request } = await core.client.simulateContract({
address: contractAddress,
abi: abi,
functionName: 'approve',
args: [spender, tokenAmount],
account
});
const response = await walletClient.writeContract(request);
console.log('交易哈希:', response);
} catch (error) {
console.error('发送交易时错误:', error);
}
}
注意,唯一的变化是 functionName
和 argument
字段。我们将函数更新为 approve
,因为那是我们要调用的函数,并将参数值更新为 spender,它应该引用你希望获得代币批准的合约地址。
祝贺你完成本指南!你现在已经掌握了通过 QuickNode SDK 自信地发送 ERC-20 代币的知识。这一技能是与以太坊区块链互动的基本部分,也是你 Web3 工具箱中的一项宝贵资产。
如果你希望查看使用 Web3.py 的此指南的 Python 版本,请查看此 QuickNode 指南:如何使用 Web3.py 发送 ERC-20 代币。
请记住,区块链开发是一个不断发展的领域,保持更新非常重要🔑。订阅我们的 newsletter 查询更多关于 Web3 和区块链的文章和指南。如果你有任何问题或需要进一步的帮助,请随时加入我们的 Discord 服务器,或使用下面的表格提供反馈。通过关注我们的 Twitter (@QuickNode)和 Telegram 公告频道 保持信息灵通和联系。
告诉我们 如果你有任何反馈或新主题请求。我们期待听到你的声音。
- 原文链接: quicknode.com/guides/eth...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!