ERC20以太坊Web3实例教程,从零开始掌握代币交互开发

博主:neragonerago 2026-09-27 01:09:25 4

在以太坊生态中,ERC20是最广泛使用的代币标准,几乎所有基于以太坊的代币(如USDT、USDC、LINK等)都遵循这一标准,而Web3.js则是连接前端应用与以太坊区块链的桥梁,本文将通过完整的实例,带你一步步掌握如何使用Web3.js与ERC20代币合约进行交互,包括查询余额、转账、授权等核心操作。

ERC20以太坊Web3实例教程,从零开始掌握代币交互开发

什么是ERC20标准?

ERC20(Ethereum Request for Comments 20)是以太坊上代币合约的标准接口规范,一个符合ERC20标准的合约必须实现以下核心方法:

  • totalSupply() — 返回代币总供应量
  • balanceOf(address) — 查询某地址的代币余额
  • transfer(address, uint256) — 转账
  • approve(address, uint256) — 授权额度
  • allowance(address, address) — 查询授权额度
  • transferFrom(address, address, uint256) — 授权转账

同时包含两个标准事件:Transfer(转账事件)和 Approval(授权事件)。

环境准备

在开始之前,需要安装以下工具:

# 初始化项目
npm init -y
# 安装web3.js
npm install web3

你还需要:

  1. 一个以太坊节点服务:推荐使用 Infura 或 Alchemy,注册后可获取免费的API密钥
  2. 测试网ETH:开发阶段建议使用 Sepolia 测试网,可通过水龙头免费领取
  3. 测试代币合约:可以自己部署一个,或使用已部署的测试代币

编写并部署一个简单的ERC20合约

使用OpenZeppelin库可以快速创建一个安全的ERC20代币:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
    constructor() ERC20("My Token", "MTK") {
        // 铸造100万枚代币给部署者
        _mint(msg.sender, 1000000 * 10 ** decimals());
    }
}

可以用 Remix(remix.ethereum.org)在线编译并部署到测试网,记下部署后的合约地址,后续会用到。

Web3.js实战实例

实例1:初始化Web3并连接以太坊

const { Web3 } = require('web3');
// 使用Infura节点连接
const web3 = new Web3('https://sepolia.infura.io/v3/你的项目ID');
async function init() {
    const blockNumber = await web3.eth.getBlockNumber();
    console.log('当前区块高度:', blockNumber);
    const chainId = await web3.eth.getChainId();
    console.log('链ID:', chainId);
}
init();

实例2:查询ERC20代币基本信息

与合约交互需要定义ABI(应用二进制接口),以下是精简版ABI:

const minABI = [
    {
        constant: true,
        inputs: [],
        name: 'name',
        outputs: [{ name: '', type: 'string' }],
        type: 'function'
    },
    {
        constant: true,
        inputs: [],
        name: 'symbol',
        outputs: [{ name: '', type: 'string' }],
        type: 'function'
    },
    {
        constant: true,
        inputs: [],
        name: 'decimals',
        outputs: [{ name: '', type: 'uint8' }],
        type: 'function'
    },
    {
        constant: true,
        inputs: [],
        name: 'totalSupply',
        outputs: [{ name: '', type: 'uint256' }],
        type: 'function'
    },
    {
        constant

The End

发布于:2026-09-27,除非注明,否则均为区块链社区- 欧亿APP下载原创文章,转载请注明出处。