世界杯竞猜项目Dapp-第三章(ERC20)

news2024/11/24 14:47:38

ERC20 是标准的以太坊 Token 协议,它也是一个合约代码,只要在该合约内部实现了特定的 6 个方法,就会被系统判定为代币合约,具体总结为:6 个必要接口,2 个必要事件,3 个可选接口,详情如下:

6 个必要接口

// 代币总发行量
function totalSupply() public view returns(uint256)

// 内部维护一个 mapping,返回余额
function balanceOf(address _owner) public view returns(uint 256 balance)

// token 持有人调用,进行转账(写操作,花钱)
// 张三 -> 李四, 100 * 10**18
function transfer(address _to, uint256 _value) public returns(bool success)

// 张三是 token 持有人, 作为 owner, 1w
// 张三将 1w 授权给李四
function approve(address _spender, uint256 _value) public returns(bool success)
allowanace[张三][李四] += 1w

function allowance(address _owner, address _spender) public view returns (uint256 remaining)
// 李四是被授权人,spender
// 王五是接受 token 的人,receiver

// 李四是张三的授权人,李四调用 transferFrom 给王五转账
function transferFrom(address _from, address _to, uint256 _value) public returns(bool success)

2 个必要事件

// 在tranfer 和transferFrom内部使用
event Transfer(address indexed _from, address indexed _to, uint256 _value)

// 在approve方法中使用
event Approval(address indexed _owner, address indexed _spender, uint256 _value)

3 个可选接口

// Token 名称
function name() public view returns (string)

// Token 标识,比如 ETH
function symbol() public view returns (string) 

// USDT:  6, 10000000 * 10**6
// WBTC:  8, 10000000 * 10**8
// 其他Token:18, 10000000 * 10**18
// 精度
function decimals() public view returns (uint8)

常见使用场景

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tQ6W9Gg7-1670918042522)(media/16709140486194/16709157555730.jpg)]

  • 张三为 Token 持有人,李四为张三的委托人(被授权),王五是收款人
  • 张三调用 USDT 的 Approve 方法,授权李四可以支配 50w Token,调用格式为:USDT.Approve(李四, 50w)
  • 此时在 USDT 合约内部,会通过 allowance 进行记录:allowance[张三][李四] += 50w
  • 此时李四便可以支配张三的 50w USDT,并调用 transferFrom 给王五转转,调用形式为:USDT.transferFrom(张三, 王五, 1w)
  • 转账过后,张三的 Token 减少 1w,王五点 Token 增加 1w,李四被授权的额度减少 1w

实战发行 ERC20 Token

我们发行一个 worldCupToken,用于后续对参与竞猜的用户进行奖励,token信息如下:

  • Name:World Cup Token
  • Symbol:WCT
  • Decimals:18
  • TotalSupply:1w

首先在 node_modules 目录下安装标准 openzeppeline 包以引入 ERC20

npm i @openzeppelin/contracts

创建 WorldCupToken.sol,如下:

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

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

contract WorldCupToken is ERC20 {
    // 一次性 mint 出来,不允许后续 mint
    // name:名称,symbol:token 标识,toalSupply:总发行量
    constructor(
        string memory name_,
        string memory symbol_,
        uint256 totalSupply_
    ) ERC20(name_, symbol_) {
        _mint(msg.sender, totalSupply_);
    }
}

创建部署脚本 deployMockERc20.ts

import { ethers } from "hardhat";

async function main() {

  const totalSupply = ethers.utils.parseUnits('10000000', 18)
  console.log('totalSupply:', totalSupply);

  const FHTToken = await ethers.getContractFactory('WorldCupToken');
  const fht = await FHTToken.deploy("World Cup Token", "WCT", totalSupply);

  await fht.deployed();

  console.log(`new World Cup Token deployed to ${fht.address}`);
}

// We recommend this pattern to be able to use async/await everywhere
// and properly handle errors.
main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

编译部署合约:

# new World Cup Token deployed to 0x8fe664FA864C61054D2dec3dEB54b204a427d8A8
npx hardhat run scripts/deployMockERc20.ts --network goerli

// verify
npx hardhat verify --contract contracts/WorldCupToken.sol:WorldCupToken 0x8fe664FA864C61054D2dec3dEB54b204a427d8A8 "World Cup Token" "WCT" "10000000000000000000000000" --network goerli

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/86934.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信贷产品年终总结之客群特征画像

临近年末&#xff0c;围绕信贷产品业务的年终总结&#xff0c;是各家金融机构或科技公司的必要工作内容之一。根据实际业务的数据表现进行汇总分析&#xff0c;不仅为回顾过去业务经营的全貌特点&#xff0c;提供了客观的数据分布描述&#xff0c;而且对后期业务开展的策略制定…

H-03卷积神经网络中卷积的作用与原理

目录 1.前言 2.卷积的作用 3.卷积的参数 3.1 卷积核大小&#xff08;kernel_size&#xff09; 3.2 填充&#xff08;padding&#xff09; 3.2.1 same 3.2.2 valid 3.2.3 full 3.3 卷积核算子&#xff08;operator&#xff09; 3.3.1 Robert 算子 3.3.2 Prewitt算子 …

2023就要你换个方式过新年!富而喜悦一年一渡开启新方式!

过去的一年&#xff0c;你过得怎么样&#xff1f;是否有过艰难的逆流时刻&#xff0c;是否拥有过快乐和满足&#xff0c;又是否得到了成长和收获&#xff1f;富而喜悦2023一年一渡财富流新年主题活动就要给你一个礼物多多&#xff01;美美的“礼物”活动&#xff01; 为此&…

艾美捷ichorbio CD4体内抗体,无惧竞争对手

CD4&#xff08;分化簇4&#xff09;是一种在辅助T细胞、调节性T细胞、单核细胞、巨噬细胞和树突状细胞表面表达的糖蛋白。CD4与主要组织相容性复合体&#xff08;MHC&#xff09;的II类分子相互作用&#xff0c;增强T细胞活化的信号。 艾美捷ichorbio CD4体内抗体-低内毒素&am…

基于web得数字媒体资源库系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

VCS2 VCS仿真的基础

1、基础知识 编译流程&#xff1a; -Mupdate &#xff1a;增量编译&#xff0c;作用是将需要修改的某个文件修改后重新编译&#xff0c;其.o文件再与其他文件相链接。 -R &#xff1a;编译后立马执行。 -gui &#xff1a;打开DVE的实时GUI。 -l &#xff1a;把编译过程中产生…

CDH6.3.2防止被攻击,打补丁(未授权漏洞)

参考&#xff1a;CDH6.3.2Hadoop默认配置下存在未授权漏洞&#xff0c;禁止匿名访问 - 民宿 - 博客园 这段时间公司的运维大佬扫描安全漏洞的时候&#xff0c;发现有漏洞会被攻击&#xff0c;原因是没有新增用户校验&#xff0c;允许匿名去访问。这样的话。可以操作HDFS和Yarn上…

【iOS】熟悉Objective-C

熟悉Objective-C Objective—C通过一套全新的语法&#xff0c;在C语言基础上添加了面向对象的特性 频繁使用方括号和极长的方法名&#xff0c;使得代码十分易读。 了解Objective-C的起源 Obejective-C与C&#xff0c;java等面向对象的语言类似&#xff0c;在语法上使用“消息结…

【GRU时序预测】基于门控循环单元GRU实现时间序列预测附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

【云原生进阶之容器】第一章Docker核心技术1.3节——命名空间Namespace

1. Linux Namespaces机制简介 Linux Namespace是Linux提供的一种内核级别环境隔离的方法。很早以前的Unix有一个叫chroot的系统调用(通过修改根目录把用户jail到一个特定目录下),chroot提供了一种简单的隔离模式:chroot内部的文件系统无法访问外部的内容。Linux Namespace在…

文件包含漏洞相关协议详解

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是文件包含漏洞相关协议详解。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未…

执行 pkg -t win index.js 报错 node.js使用pkg打包成exe可执行文件

文章目录一、问题&#xff1a;当执行命令 pkg -t win index.js 的时候报以下错误&#xff1a;二、解决办法&#xff1a;三、安装pkg流程四、其他的打包方法五、题外话&#xff1a;更换exe的icon图标一、问题&#xff1a;当执行命令 pkg -t win index.js 的时候报以下错误&#…

[附源码]计算机毕业设计点餐系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

传奇微端架设好后不亮灯是怎么回事微端程序无连接不更新有连接不更新问题解决办法

传奇微端架设好后不亮灯是怎么回事微端程序无连接不更新有连接不更新问题解决办法 这是在架设传奇微端时很多小伙伴都会遇到的问题&#xff0c;今天艾西来教大家怎么解决这个问题 以下图中有打码的望读者理解&#xff08;平台gz&#xff09; 网关配置好后&#xff0c;图中几个电…

pikachu靶场-11 SSRF漏洞

SSRF漏洞 概述 SSRF(Server-Side Request Forgery:服务器端请求伪造) 其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制 导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据 数据…

Allegro如何把分离的线段变成封闭连续的图形

Allegro如何把分离的线段变成封闭连续的图形 Allegeo支持把分离的线段变成封闭连续的图形,以下图为例,线段是分离的 具体操作如下 选择shape-compose shape Option选择一个层面,比如画在Board Geometry outline层 Find选择other segs 和Lines 框选图形 鼠标右击选择d…

HTML基础学习笔记合集

HTML学习笔记基础认知基本概念常用标签排版标签标题标签段落标签换行标签&#xff08;单标签&#xff09;水平线标签&#xff08;单标签&#xff09;文本格式化标签图片标签&#xff08;单标签&#xff09;音频标签&#xff08;双标签&#xff09;视频标签&#xff08;双标签&a…

K_A08_013 基于 STM32等单片机驱动大功率MOS管模块按键控制直流电机加减速启停

目录 一、资源说明 二、基本参数 参数 引脚说明 三、驱动说明 大功率MOS模块驱动 对应程序: 四、部分代码说明 接线说明 STC89C52RC大功率MOS模块 STM32F103C8T6大功率MOS模块 五、基础知识学习与相关资料下载 六、视频效果展示与程序资料获取 七、项目主要材料清单 八…

Dockers更新镜像(保留原始数据)

文章目录 一、前言二、使用步骤1.拉取需要更新的镜像版本2.获取当前镜像启动参数3.停止当前镜像4.启动新镜像5.删除旧镜像三、测试验证一、前言 日常工作中,应用程序为了避免漏洞、体验等等肯定是需要定期更新的,使用Docker安装的应用镜像也一样需要定期更新。更新最大的风险…

搭建基于lvs+nginx的负载均衡服务集群

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a;蟹黄瓜子文章来源&#xff1a;社区投稿 1.基于四层七层的负载均衡 实现负载均衡的方式有很多&#xff0c;例如…