ERC20

erc20需要实现以下方法

function name() public view returns (string)
function symbol() public view returns (string)
function decimals() public view returns (uint8)
function totalSupply() public view returns (uint256)
function balanceOf(address _owner) public view returns (uint256 balance)
function transfer(address _to, uint256 _value) public returns (bool success)
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
function approve(address _spender, uint256 _value) public returns (bool success)
function allowance(address _owner, address _spender) public view returns (uint256 remaining)

以及两个事件

event Transfer(address indexed _from, address indexed _to, uint256 _value)
event Approval(address indexed _owner, address indexed _spender, uint256 _value)

以下是代码部分

pragma solidity >=0.4.16 <0.9.0;
import "openzeppelin-solidity/contracts/math/SafeMath.sol";
contract NilahToken{
    using SafeMath for uint256;
    string public name = "NilahToken";
    string public symbol = "NLT";
    uint256 public decimals = 18;
    uint256 public totalSupply;
    mapping (address => uint256) public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);


    constructor() {
        totalSupply = 1000000 * (10 ** decimals);
        balanceOf[msg.sender] = totalSupply;
    }

 
    function transfer(address _to, uint256 _value) public returns (bool success){ 
        require(_to != address(0));  
        _transfer(msg.sender, _to, _value); //调用_transfer函数
        return true;
    }

    function _transfer(address _from, address _to, uint256 _value) internal{  //私有函数 用于调用
        require(balanceOf[_from] >= _value);
        balanceOf[_from] = balanceOf[_from].sub(_value);
        balanceOf[_to] = balanceOf[_to].add(_value);
        emit Transfer(_from,_to,_value);
    }

    function approve(address _spender, uint256 _value) public returns (bool success){ //授权给交易所金额
        //msg.sender当前账户
        //_spender交易所地址
        //_value金额
        require(_spender != address(0));
        allowance[msg.sender][_spender] = _value; //msg.sender授权给_spender交易所_value金额
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success){
        //msg.sender提供授权的账户
        //_from交易所账户
        //_value金额
        require(balanceOf[_from] >= _value);
        require(allowance[_from][msg.sender] >= _value); //授权金额大于转账金额
        allowance[_from][msg.sender] = allowance[_from][msg.sender].sub(_value); //授权金额减去转账金额
        _transfer(_from, _to, _value); //调用方法进行转账
        return true; 
    }
}

1.规定版本

2.导入SafeMath库,方便后续使用sub、add方法

3.再后面就是实现erc20方法,代码块里有注解

4.此代码复制粘贴即可使用,但是需要自行下载SafeMath库

5.代码名称以及代号在变量name和symbol处更改

6.Token位数可以在decimals处更改

7.存量是1000000,也可以在构造函数的totalSupply处更改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值