当前位置:网站首页>Erc20 token agreement
Erc20 token agreement
2022-07-06 08:01:00 【Guangzhou wuyanzu】
ERC20 Token agreement
Write at the top
Why does anyone believe such a boring thing as air coin ?
Start the tutorial
ERC20 The development process of tokens can be divided into two steps
- Definition ERC20 Token standard interface
- Token protocol inherits standard interface
ERC20 Standard interface
pragma solidity ^0.4.20;
// Definition ERC-20 Standard interface
contract ERC20Interface {
// Token name
string public name;
// Token symbol or abbreviation
string public symbol;
// Token decimal places , The smallest unit of token
uint8 public decimals;
// The total amount of tokens issued
uint public totalSupply;
// Realize token transaction , Used to transfer tokens to an address
function transfer(address to, uint tokens) public returns (bool success);
// Realize transactions between token users , Transfer tokens from one address to another
function transferFrom(address from, address to, uint tokens) public returns (bool success);
// allow spender Withdraw money from your account many times , And at most tokens individual , It is mainly used in some scenarios to authorize other users to spend tokens from your account
function approve(address spender, uint tokens) public returns (bool success);
// Inquire about spender Allow from tokenOwner The number of tokens spent on
function allowance(address tokenOwner, address spender) public view returns (uint remaining);
// Event triggered during token transaction , That is to call transfer Method
event Transfer(address indexed from, address indexed to, uint tokens);
// Events triggered when allowing other users to spend tokens from your account , That is to call approve Method
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}
Inherit ERC20 Interface
// Realization ERC-20 Standard interface
contract ERC20Impl is ERC20Interface {
// Store the balance of each address ( the reason being that public So it will be generated automatically balanceOf Method )
mapping (address => uint256) public balanceOf;
// Store the operable address of each address and its operable amount
mapping (address => mapping (address => uint256)) internal allowed;
// Initialization property
constructor() public {
name = "TestByteGoToken"; // Definition Token name
symbol = "TBG22"; // Abbreviation of token
decimals = 18;
totalSupply = 100000000 * 10 ** uint256(decimals); // The total amount of tokens
// The account that initializes the token will have all the tokens
balanceOf[msg.sender] = totalSupply; // When initializing , Who does this token belong to
}
function transfer(address to, uint tokens) public returns (bool success) {
// Check whether the recipient address is legal
require(to != address(0));
// Check whether the sender's account balance is sufficient
require(balanceOf[msg.sender] >= tokens);
// Check whether overflow will occur
require(balanceOf[to] + tokens >= balanceOf[to]);
// Deduct the sender's account balance
balanceOf[msg.sender] -= tokens;
// Increase the recipient's account balance
balanceOf[to] += tokens;
// Trigger the corresponding event
emit Transfer(msg.sender, to, tokens);
}
function transferFrom(address from, address to, uint tokens) public returns (bool success) {
// Check whether the address is legal
require(to != address(0) && from != address(0));
// Check whether the sender's account balance is sufficient
require(balanceOf[from] >= tokens);
// Check whether the amount of operation is allowed
require(allowed[from][msg.sender] <= tokens);
// Check whether overflow will occur
require(balanceOf[to] + tokens >= balanceOf[to]);
// Deduct the sender's account balance
balanceOf[from] -= tokens;
// Increase the recipient's account balance
balanceOf[to] += tokens;
// Trigger the corresponding event
emit Transfer(from, to, tokens);
success = true;
}
function approve(address spender, uint tokens) public returns (bool success) {
allowed[msg.sender][spender] = tokens;
// Trigger the corresponding event
emit Approval(msg.sender, spender, tokens);
success = true;
}
function allowance(address tokenOwner, address spender) public view returns (uint remaining) {
return allowed[tokenOwner][spender];
}
}
The last look
pragma solidity ^0.4.20;
// Definition ERC-20 Standard interface
contract ERC20Interface {
// Token name
string public name;
// Token symbol or abbreviation
string public symbol;
// Token decimal places , The smallest unit of token
uint8 public decimals;
// The total amount of tokens issued
uint public totalSupply;
// Realize token transaction , Used to transfer tokens to an address
function transfer(address to, uint tokens) public returns (bool success);
// Realize transactions between token users , Transfer tokens from one address to another
function transferFrom(address from, address to, uint tokens) public returns (bool success);
// allow spender Withdraw money from your account many times , And at most tokens individual , It is mainly used in some scenarios to authorize other users to spend tokens from your account
function approve(address spender, uint tokens) public returns (bool success);
// Inquire about spender Allow from tokenOwner The number of tokens spent on
function allowance(address tokenOwner, address spender) public view returns (uint remaining);
// Event triggered during token transaction , That is to call transfer Method
event Transfer(address indexed from, address indexed to, uint tokens);
// Events triggered when allowing other users to spend tokens from your account , That is to call approve Method
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}
// Realization ERC-20 Standard interface
contract ERC20Impl is ERC20Interface {
// Store the balance of each address ( the reason being that public So it will be generated automatically balanceOf Method )
mapping (address => uint256) public balanceOf;
// Store the operable address of each address and its operable amount
mapping (address => mapping (address => uint256)) internal allowed;
// Initialization property
constructor() public {
name = "TestByteGoToken"; // Definition Token name
symbol = "TBG22"; // Abbreviation of token
decimals = 18;
totalSupply = 100000000 * 10 ** uint256(decimals); // The total amount of tokens
// The account that initializes the token will have all the tokens
balanceOf[msg.sender] = totalSupply; // When initializing , Who does this token belong to
}
function transfer(address to, uint tokens) public returns (bool success) {
// Check whether the recipient address is legal
require(to != address(0));
// Check whether the sender's account balance is sufficient
require(balanceOf[msg.sender] >= tokens);
// Check whether overflow will occur
require(balanceOf[to] + tokens >= balanceOf[to]);
// Deduct the sender's account balance
balanceOf[msg.sender] -= tokens;
// Increase the recipient's account balance
balanceOf[to] += tokens;
// Trigger the corresponding event
emit Transfer(msg.sender, to, tokens);
}
function transferFrom(address from, address to, uint tokens) public returns (bool success) {
// Check whether the address is legal
require(to != address(0) && from != address(0));
// Check whether the sender's account balance is sufficient
require(balanceOf[from] >= tokens);
// Check whether the amount of operation is allowed
require(allowed[from][msg.sender] <= tokens);
// Check whether overflow will occur
require(balanceOf[to] + tokens >= balanceOf[to]);
// Deduct the sender's account balance
balanceOf[from] -= tokens;
// Increase the recipient's account balance
balanceOf[to] += tokens;
// Trigger the corresponding event
emit Transfer(from, to, tokens);
success = true;
}
function approve(address spender, uint tokens) public returns (bool success) {
allowed[msg.sender][spender] = tokens;
// Trigger the corresponding event
emit Approval(msg.sender, spender, tokens);
success = true;
}
function allowance(address tokenOwner, address spender) public view returns (uint remaining) {
return allowed[tokenOwner][spender];
}
}
Finally, I urge you to spend more time on serious things , Don't keep thinking about speculation
边栏推荐
- 二叉树创建 & 遍历
- 珠海金山面试复盘
- [Yugong series] creation of 009 unity object of U3D full stack class in February 2022
- JS select all and tab bar switching, simple comments
- Position() function in XPath uses
- 指针和数组笔试题解析
- Launch APS system to break the problem of decoupling material procurement plan from production practice
- [1. Delphi foundation] 1 Introduction to Delphi Programming
- Circuit breaker: use of hystrix
- HTTP cache, forced cache, negotiated cache
猜你喜欢
07- [istio] istio destinationrule (purpose rule)
Easy to use tcp-udp_ Debug tool download and use
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
wincc7.5下载安装教程(Win10系统)
【云原生】手把手教你搭建ferry开源工单系统
Machine learning - decision tree
Golang DNS write casually
Interview Reply of Zhuhai Jinshan
[1. Delphi foundation] 1 Introduction to Delphi Programming
23. Update data
随机推荐
wincc7.5下载安装教程(Win10系统)
软件开发的一点随记
Nft智能合约发行,盲盒,公开发售技术实战--合约篇
National economic information center "APEC industry +": economic data released at the night of the Spring Festival | observation of stable strategy industry fund
Golang DNS 随便写写
Nft智能合约发行,盲盒,公开发售技术实战--拼图篇
MEX有关的学习
Mex related learning
Oracle time display adjustment
灰度升级 TiDB Operator
P3047 [USACO12FEB]Nearby Cows G(树形dp)
华为云OBS文件上传下载工具类
Leetcode question brushing record | 203_ Remove linked list elements
Position() function in XPath uses
你想知道的ArrayList知识都在这
数据治理:微服务架构下的数据治理
使用 Dumpling 备份 TiDB 集群数据到兼容 S3 的存储
[untitled]
指针和数组笔试题解析
"Friendship and righteousness" of the center for national economy and information technology: China's friendship wine - the "unparalleled loyalty and righteousness" of the solidarity group released th