Solidity:ERC20合约

本文探讨了ERC20智能合约,详细介绍了其提案背景,由Fabian Vogelsteller和Vitalik Buterin提出。接着,概述了ERC20合约的基础知识,并提供了一个简单的实现代码案例,帮助读者更好地理解和应用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);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值