从零开始学以太坊开发,ERC20代币创建完整教程

OKX欧易app

OKX欧易app

欧易交易所app是全球排名第一的虚拟货币交易所,注册领取6万元盲盒礼包!

APP下载   官网注册

从零开始学以太坊开发,ERC20代币创建完整教程

从零开始学以太坊开发,ERC20代币创建完整教程

在区块链的世界里,以太坊凭借其智能合约平台地位,成为了加密货币和去中心化应用(DApp)开发的“操作系统”,而ERC20(Ethereum Request for Comments 20)作为以太坊上最主流的代币标准,规范了同质化代币(如USDT、USDC等稳定币)的基本功能接口,让代币开发变得标准化、可互操作,本文将带你从零开始,手把手教你使用以太坊开发工具创建一枚属于自己的ERC20代币,涵盖环境搭建、代码编写、测试部署到交互验证的全流程。

ERC20代币标准核心解析

在动手之前,我们先快速理解ERC20的核心逻辑,ERC20标准要求代币合约必须实现以下6个基本接口(函数):

  1. name():返回代币全称,如“Tether USD”。
  2. symbol():返回代币符号,如“USDT”,通常2-3个字符。
  3. decimals():返回代币精度,即小数位数(如ETH为18,USDT为6)。
  4. totalSupply():返回代币总供应量。
  5. balanceOf(address _owner):查询指定地址的代币余额。
  6. transfer(address _to, uint256 _value):转账函数,将_value数量代币从调用者地址转给_to。

标准还推荐实现approve()、allowance()、transferFrom()三个函数,用于授权第三方(如交易所)转移代币(即“代币授权”功能),这也是代币与交易所、钱包等第三方服务交互的基础。

开发环境准备:工具安装与配置

ERC20代币开发基于以太坊虚拟机(EVM),我们需要以下核心工具:

安装Node.js和npm

Node.js是JavaScript运行时环境,npm是其包管理器,访问Node.js官网下载LTS版本(推荐18.x以上),安装完成后打开终端,输入以下命令验证:

node -v  # 查看Node.js版本
npm -v   # 查看npm版本

安装Hardhat(以太坊开发框架)

Hardhat是当前最流行的以太坊开发工具之一,支持智能合约编译、测试、部署和调试,插件生态丰富,在终端中执行:

npm init -y  # 初始化npm项目(会生成package.json文件)
npm install --save-dev hardhat  # 安装Hardhat

安装完成后,在项目目录下运行:

npx hardhat  # 初始化Hardhat项目

根据提示选择“Create a basic sample project”(创建基础示例项目),默认配置即可,这会生成以下关键文件:

  • contracts/:存放智能合约源码(示例中有一个Lock.sol)。
  • scripts/:存放部署脚本(示例中有一个deploy.js)。
  • test/:存放测试脚本(示例中有一个test.js)。
  • hardhat.config.js:Hardhat配置文件。

安装OpenZeppelin合约库(ERC20标准实现)

OpenZeppelin是一个开源的智能合约库,提供了经过安全审计的ERC20、ERC721等标准合约实现,避免重复造轮子并降低安全风险,安装:

npm install @openzeppelin/contracts  # 安装OpenZeppelin合约库

编写ERC20代币智能合约

创建代币合约文件

在contracts/目录下新建文件,命名为MyToken.sol(或你喜欢的名字),我们基于OpenZeppelin的ERC20合约进行扩展,只需定义代币名称、符号和总供应量。

编写合约代码

打开MyToken.sol,输入以下代码:

// SPDX-License-Identifier: MIT  // 指定许可证(必填,推荐MIT)
pragma solidity ^0.8.20;       // 指定Solidity版本(需与Hardhat兼容)
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";  // 导入OpenZeppelin的ERC20合约
contract MyToken is ERC20 {     // 继承ERC20合约,实现其所有功能
    /**
     * @dev 构造函数,初始化代币
     * @param _name 代币名称
     * @param _symbol 代币符号
     * @param _initialSupply 初始供应量(注意:需乘以10^decimals,默认decimals=18)
     */
    constructor(
        string memory _name,
        string memory _symbol,
        uint256 _initialSupply
    ) ERC20(_name, _symbol) {  // 调用父类ERC20的构造函数,设置名称和符号
        _mint(msg.sender, _initialSupply);  // 将_initialSupply数量代币铸造给合约部署者(msg.sender)
    }
}

代码解析:

  • SPDX-License-Identifier:声明许可证,避免法律纠纷。
  • pragma solidity:指定Solidity编译器版本(^0.8.20表示兼容0.8.20及以上版本)。
  • import "@openzeppelin/contracts/token/ERC20/ERC20.sol":导入OpenZeppelin的ERC20标准合约,包含所有ERC20接口的默认实现。
  • contract MyToken is ERC20:定义MyToken合约,继承ERC20,自动获得所有ERC20功能(如transfer、balanceOf等)。
  • constructor:合约部署时自动执行的构造函数,接收代币名称、符号和初始供应量参数。
  • ERC20(_name, _symbol):调用父类ERC20的构造函数,设置代币名称和符号。
  • _mint(msg.sender, _initialSupply):_mint是ERC20合约内部函数,用于铸造代币(注意:不是mint,因为OpenZeppelin将铸造设为内部函数,防止未授权铸造),这里将初始供应量全部给部署者(即你的钱包地址)。

编写部署脚本

部署脚本是用于将智能合约部署到以太坊网络的JavaScript文件,我们修改scripts/目录下的deploy.js文件:

// scripts/deploy.js
async function main() {
    // 获取部署时传入的参数(名称、符号、初始供应量)
    const [deployer] = await ethers.getSigners();  // 获取部署者账户(第一个账户)
    console.log("Deploying contracts with the account:", deployer.address);
    // 从命令行参数获取代币配置,默认值:"My Token", "MTK", 1000000(100万枚)
    const name = process.argv[2] || "My Token";
    const symbol = process.argv[3] || "MTK";
    const initialSupply = ethers.parseUnits(process.argv[4] || "1000000", 18);  // 将字符串转为uint256(默认18位小数)
    // 部署MyToken合约
    const MyToken = await ethers.getContractFactory("MyToken");  // 获取合约工厂
    const token = await MyToken.deploy(name, symbol, initialSupply);  // 部署合约,传入构造函数参数
    await token.waitForDeployment();  // 等待部署完成
    console.log("MyToken deployed to:", await token.getAddress());  // 输出合约地址
}
main()
    .then(() => process.exit(0))
    .catch((error) => {
        console.error(error);
        process.exit(1);
    });

脚本解析:

  • ethers.getSigners():获取Hardhat默认账户(本地测试网络会生成10个测试账户,第一个为部署者)。
  • process.argv:获取命令行参数(如npx hardhat run scripts/deploy.js --network sepolia "My Token" "MTK" "1000000")。
  • ethers.getContractFactory("MyToken"):根据合约名称获取合约工厂,用于部署合约。
  • MyToken.deploy(...):部署合约,传入构造函数参数。
  • token.waitForDeployment():等待交易上链(测试网络几乎瞬间完成)。
  • token.getAddress():获取部署后的合约地址(后续交互需要用到)。

测试与本地部署

在正式部署到以太坊主网前,建议先在本地测试网络或测试网(如Sepolia)进行测试。

本地测试网络(Hardhat Network)

Hardhat自带本地节点,无需额外配置,在终端运行:

npx hardhat node  # 启动本地测试节点,会输出10个测试账户及私钥

然后打开另一个终端,运行

本文来自用户投稿,不代表币大大立场,如若转载,请注明出处:https://czxurui.com/jys/235272.html

上一篇 2026年06月20日
下一篇 2026年06月20日

相关推荐

  • 以太坊升级浪潮下,库神冷钱包如何守护您的数字资产?

    以太坊升级浪潮下,库神冷钱包如何守护您的数字资产? 以太坊(Ethereum)网络正经历着一场前所未有的重大升级,从工作量证明(PoW)向权益证明(PoS)的全面转型,即“合并”(The Merge),这场升级不仅标志着以太坊向更高效、更环保、更具可扩展性的未来迈出了关键一步,也

    2026-11-05 16:10:02
    0 0
  • 马斯克买以太坊花了多少钱?一场价值百亿的豪赌与未来

    马斯克买以太坊花了多少钱?一场价值百亿的豪赌与未来 当埃隆马斯克的名字与加密货币联系在一起时,全球市场总会为之震动,作为特斯拉和SpaceX的掌门人,他的一言一行足以掀起币圈的滔天巨浪,关于他是否以及何时购买了以太坊(ETH),更是坊间经久不衰的谜题,这位现实世界的

    2026-11-05 16:10:02
    0 0
  • 以太坊合约在线跟单,开启智能投资新纪元,机遇与风险并存

    以太坊合约在线跟单,开启智能投资新纪元,机遇与风险并存 随着区块链技术的飞速发展和DeFi(去中心化金融)生态的日益繁荣,以太坊作为智能合约平台的领军者,催生了众多创新的投资模式。“以太坊合约在线跟单”便是其中备受瞩目的一种,它为普通投资者提供了一种参与复杂加

    2026-11-05 14:10:02
    2 0
  • 七月底以太坊难度调整,市场动态与网络健康的晴雨表

    七月底以太坊难度调整,市场动态与网络健康的晴雨表 七月底,对于以太坊生态系统而言,是一个充满关注与变化的时期。“以太坊难度”这一技术指标,虽不为普通用户所熟知,却如同网络的“神经系统”,敏锐地反映着矿工行为、市场情绪以及整个区块链的运行状态,在七月底这个时间

    2026-11-05 14:10:02
    2 0
  • 以太坊合约赚钱的真相,是风口还是陷阱?

    以太坊合约赚钱的真相,是风口还是陷阱? “以太坊合约有赚钱的吗?”——这或许是每一个踏入或打算踏入加密货币领域,尤其是以太坊生态的投资者都曾问过的问题,以太坊作为全球第二大加密货币,其智能合约功能催生了DeFi(去中心化金融)、NFT、GameFi等无数创新应用,也确实

    2026-11-05 12:10:01
    3 0
  • 以太坊,不止是比特币2.0,为何我们需要一个世界计算机?

    以太坊,不止是比特币2.0,为何我们需要一个世界计算机? 在数字货币的浪潮中,比特币如同一座巍然矗立的灯塔,以其去中心化、总量恒定的特性,开创了加密货币的先河,当人们满足于用比特币进行点对点的电子现金交易时,一个问题悄然浮现:如果区块链技术仅仅停留在记账和转移

    2026-11-05 10:10:01
    6 0

发表回复

8206

评论列表(0条)

    暂无评论

binance币安交易所
已有2000万用户加入币安交易所

立即下载