当前位置: 首页 > news >正文

使用Hardhat实现ERC20 代币合约详解

ERC20 代币合约详解 💰

在这里插入图片描述

1. 合约概览

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract MyToken is ERC20 {
    constructor() ERC20("MyToken", "MTK") {
        _mint(msg.sender, 1000000 * 10 ** decimals());
    }
}

1.1 基本信息

  • 合约名称:MyToken
  • 代币符号:MTK
  • 初始供应量:1,000,000 代币
  • 小数位数:18(ERC20 标准)

2. 核心功能

2.1 继承自 OpenZeppelin 的 ERC20

我们的合约继承了 OpenZeppelin 的 ERC20 合约,这提供了:

  • 代币转账功能 (transfer, transferFrom)
  • 授权机制 (approve, allowance)
  • 余额查询 (balanceOf)
  • 总供应量查询 (totalSupply)

2.2 标准 ERC20 函数

  1. 余额相关

    • balanceOf(address): 查询地址余额
    • totalSupply(): 查询总供应量
  2. 转账相关

    • transfer(address to, uint256 amount): 直接转账
    • transferFrom(address from, address to, uint256 amount): 授权转账
  3. 授权相关

    • approve(address spender, uint256 amount): 授权额度
    • allowance(address owner, address spender): 查询授权额度

3. 特殊功能

3.1 代币铸造

  • 在构造函数中一次性铸造了所有代币
  • 铸造数量:1,000,000 * 10^18
  • 接收者:合约部署者

3.2 小数位处理

1000000 * 10 ** decimals()
  • decimals() 返回 18
  • 实际铸造数量是 1,000,000 * 10^18
  • 这样可以支持小数位的转账

4. 安全特性

4.1 OpenZeppelin 保障

  • 使用经过审计的 OpenZeppelin 库
  • 内置溢出检查
  • 标准的事件触发
  • 安全的转账逻辑

4.2 权限控制

  • 初始代币都由部署者持有
  • 转账需要有足够余额
  • 授权转账需要事先批准

5. 使用示例

5.1 基本转账

// 转账 100 个代币
await token.transfer(receiverAddress, ethers.parseEther("100"));

5.2 授权和授权转账

// 授权 100 个代币
await token.approve(spenderAddress, ethers.parseEther("100"));

// 授权转账
await token.transferFrom(ownerAddress, receiverAddress, ethers.parseEther("100"));

5.3 查询操作

// 查询余额
const balance = await token.balanceOf(address);

// 查询总供应量
const supply = await token.totalSupply();

// 查询授权额度
const allowance = await token.allowance(ownerAddress, spenderAddress);

相关推荐阅读

Hardhat配置指南
DApp 开发入门指南

http://www.dtcms.com/a/31264.html

相关文章:

  • 通俗易懂的DOM事件模型指南
  • 数据结构:哈希表(unordered_map)
  • 1.13作业
  • 人工智能之自动驾驶技术体系
  • 大学本科教务系统设计方案,涵盖需求分析、架构设计、核心模块和技术实现要点
  • 长尾关键词优化三步法:提升SEO搜索排名实战
  • MATLAB | 设置滑动窗口计算栅格数据的CV变异系数
  • MySQL数据库表约束详解
  • 一些时间方法
  • python入门 介绍及变量的使用
  • 低代码与开发框架的一些整合[2]
  • Error: error:0308010C:digital envelope routines::unsupported
  • My Metronome for Mac v1.4.2 我的节拍器 支持M、Intel芯片
  • 【工具篇】【深度解析 DeepAI 工具:开启 AI 应用新体验】
  • 机器翻译中的编码器、自注意和解码器
  • c语言中offseto宏
  • 单片机 code RO-data RW-data ZI-data以及OTA学习
  • 在PyTorch中使用插值法来优化卷积神经网络(CNN)所需硬件资源
  • Spring面试题2
  • gitlab 解决双重认证无法登录remote: HTTP Basic: Access denied.
  • webmin配置终端显示样式,模仿UbuntuDesktop终端
  • 25年HVV关于0day的面试题
  • Elasticsearch Open Inference API 增加了对 Jina AI 嵌入和 Rerank 模型的支持
  • 改进收敛因子和比例权重的灰狼优化算法【期刊论文完美复现】(Matlab代码实现)
  • Python爬虫实战:获取笔趣阁小说信息,并做数据分析
  • 科普:你的笔记本电脑中有三个IP:127.0.0.1、无线网 IP 和局域网 IP;两个域名:localhost和host.docker.internal
  • 【Linux】进程优先级
  • 【小白学AI系列】NLP 核心知识点(八)多头自注意力机制
  • js版本ES6、ES7、ES8、ES9、ES10、ES11、ES12、ES13、ES14[2023]新特性
  • 【什么是双亲委派?】