当前位置: 首页 > 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.lryc.cn/news/540860.html

相关文章:

  • 清华大学《DeepSeek与AI幻觉》(无套路免费分享)
  • 代码随想录算法【Day52】
  • Spark 和 Flink
  • Unity结合Vuforia虚拟按键实现AR机械仿真动画效果
  • PL/SQL 异常处理
  • 【自学笔记】Spring Boot框架技术基础知识点总览-持续更新
  • Redis 缓存穿透、击穿、雪崩:问题与解决方案
  • 第一个CMAKE项目hello cmake
  • 骶骨神经
  • 基于Django的购物商城平台的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
  • 使用快捷键高效管理 VSCode:提升工作效率,告别鼠标操作
  • 【找工作】C++和算法复习(自用)
  • 大语言模型基础
  • 深入浅出机器学习:概念、算法与实践
  • 2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序
  • 老游戏回顾:d2
  • 【深度学习】Pytorch的深入理解和研究
  • 什么是 Vue 的自定义事件?如何触发和监听?
  • windows上vscode cmake工程搭建
  • DEMF模型赋能多模态图像融合,助力肺癌高效分类
  • Android:权限permission申请示例代码
  • AI Agent Service Toolkit:一站式大模型智能体开发套件
  • 大数据SQL调优专题——Hive执行原理
  • Python程序打包 |《Python基础教程》第18章笔记
  • 图论 之 迪斯科特拉算法求解最短路径
  • 掌握Spring开发_常用注解详解
  • 华为昇腾服务器(固件版本查询、驱动版本查询、CANN版本查询)
  • Kubernetes的Ingress和Service有什么区别?
  • 洛谷B3619(B3620)
  • vue组件,父子通信,路由,异步请求后台接口,跨域