当前位置:网站首页>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
边栏推荐
- CAD ARX 获取当前的视口设置
- [KMP] template
- 继电反馈PID控制器参数自整定
- Artcube information of "designer universe": Guangzhou implements the community designer system to achieve "great improvement" of urban quality | national economic and Information Center
- Binary tree creation & traversal
- A Closer Look at How Fine-tuning Changes BERT
- Webrtc series-h.264 estimated bit rate calculation
- Epoll and IO multiplexing of redis
- Opencv learning notes 9 -- background modeling + optical flow estimation
- [非线性控制理论]9_非线性控制理论串讲
猜你喜欢
Sanzi chess (C language)
It's hard to find a job when the industry is in recession
Generator Foundation
Chinese Remainder Theorem (Sun Tzu theorem) principle and template code
The State Economic Information Center "APEC industry +" Western Silicon Valley will invest 2trillion yuan in Chengdu Chongqing economic circle, which will surpass the observation of Shanghai | stable
Database basic commands
Epoll and IO multiplexing of redis
Asia Pacific Financial Media | "APEC industry +" Western Silicon Valley invests 2trillion yuan in Chengdu Chongqing economic circle to catch up with Shanghai | stable strategy industry fund observatio
From monomer structure to microservice architecture, introduction to microservices
[factorial inverse], [linear inverse], [combinatorial counting] Niu Mei's mathematical problems
随机推荐
Data governance: 3 characteristics, 4 transcendence and 3 28 principles of master data
Parameter self-tuning of relay feedback PID controller
22. Empty the table
Onie supports pice hard disk
A Closer Look at How Fine-tuning Changes BERT
从 SQL 文件迁移数据到 TiDB
Transformer principle and code elaboration
Interview Reply of Zhuhai Jinshan
(lightoj - 1410) consistent verbs (thinking)
National economic information center "APEC industry +": economic data released at the night of the Spring Festival | observation of stable strategy industry fund
MFC 给列表控件发送左键单击、双击、以及右键单击消息
Opencv learning notes 8 -- answer sheet recognition
. Net 6 learning notes: what is NET Core
From monomer structure to microservice architecture, introduction to microservices
Nft智能合约发行,盲盒,公开发售技术实战--合约篇
Golang DNS 随便写写
Codeforces Global Round 19(A~D)
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
Go learning notes (3) basic types and statements (2)
[Yugong series] February 2022 U3D full stack class 010 prefabricated parts