Solidity:ERC20合约

1. ERC20合约

1.1 ERC20合约的提案:

https://eips.ethereum.org/EIPS/eip-20
作者: Fabian Vogelsteller, Vitalik Buterin

1.2 ERC20合约基础:

https://en.bitcoinwiki.org/wiki/ERC20

2. ERC20合约实现代码:简单案例

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

 interface IERC20 {
    
    
    function totalSupply() external view returns(uint);

    function balanceOf(address account) external view returns(uint);

    function transfer(address recipient, uint amount) external returns(bool);

    function allowance(address owner, address spender) external view returns(uint);

    function approve(address spender, uint amount) external returns(bool);

    function tranferFrom(address sender, address recipient, uint amount) external returns(bool);

    event Transfer(address indexed from, address indexed to, uint amount);
    event Approve(address indexed owner, address indexed spender, uint amount);
}

contract ERC20 is IERC20{
    
    
    uint public totalSupply;
    mapping(address=>uint) public balanceOf;
    mapping(address=>mapping(address=>uint)) public allowance;
    string public name= "Test";
    string public symbol="TEST";
    uint8 public decimals=18;

    function transfer(address recipient, uint amount) external returns(bool){
    
    
        balanceOf[msg.sender] -= amount;
        balanceOf[recipient] += amount;
        emit Transfer(msg.sender, recipient,amount);
        return true;
    }

    function approve(address spender, uint amount) external returns(bool) {
    
    
        allowance[msg.sender][spender]= amount;
        emit Approve(msg.sender,spender,amount);
        return true;
    }

    function tranferFrom(address sender, address recipient, uint amount) external returns(bool){
    
    
        allowance[sender][msg.sender] -= amount;
        balanceOf[sender] -= amount;
        balanceOf[recipient] += amount;
        emit Transfer(sender,recipient,amount);
        return true;
    }

    function mint(uint amount) external {
    
    
        balanceOf[msg.sender] += amount;
        totalSupply += amount;
        emit Transfer(msg.sender, address(0),amount);
    }

    function burn(uint amount) external {
    
    
        balanceOf[msg.sender] -= amount;
        totalSupply -= amount;
        emit Transfer(address(0),msg.sender,amount);
    }

}

猜你喜欢

转载自blog.csdn.net/runrundream/article/details/127179702