solidity实现最简单的代币token 第一个简单合约 以太坊ERC20简单合约

IDE地址:http://remix.ethereum.org

第一个简单合约

在remix新建文件SimpleToken.sol

pragma solidity ^0.4.20;

contract SimpleToken{
    //记录账本
    mapping(address => uint256)public balanceOf;
    //构造方法,将全部发行量给第一个账本
    constructor(uint256 initialSupply){
        balanceOf[msg.sender] = initialSupply;
    }
    //交易函数
    function transfer(address _to,uint256 _value)public{
        //检验余额是否够本次交易
        require(balanceOf[msg.sender] >= _value);
        //检验目标账本是否会溢出
        require(balanceOf[_to] + _value >= balanceOf[_to]);

        balanceOf[msg.sender] -= _value;
        balanceOf[_to] += _value;
    }
}

以太坊ERC20简单合约

在remix新建文件erc20interface.sol接口协议文件

pragma solidity ^0.4.20;

contract ERC20interface{
    //function name() constant returns (string name);
    //function symbol() constant returns (string symbol);
    //function decimals() constant returns (uint8 decimals);
    //function totalSupply() constant returns (uint256 totalSupply);
    //function balanceOf(address _owner) constant returns (uint256 balance);
    //代币名称
    string public name;
    //代币代码
    string public symbol;
    //可交易小数位数
    uint8 public decimals;
    //代币发行量
    uint public totalSupply;

    function transfer(address _to, uint256 _value) returns (bool success);
    function approve(address _spender, uint256 _value) returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success);
    function allowance(address _owner, address _spender) constant returns (uint256 remaining);

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

在remix新建文件ERC20Token.sol实现上面的erc20接口

pragma solidity ^0.4.20;

import "./erc20interface.sol";

contract ERC20Token is ERC20interface{
    mapping(address => uint256)public balanceOf;
    mapping(address => mapping(address => uint256)) allowed;
    constructor(string _name) public {
        name = _name; //"HXDChain";
        symbol = "HXD";
        decimals = 0;
        totalSupply = 10000;
        balanceOf[msg.sender] = totalSupply;
    }

    function transfer(address _to, uint256 _value) returns (bool success){
        require(_to != address(0));
        require(balanceOf[msg.sender] >= _value);
        require(balanceOf[_to] + _value >= balanceOf[_to]);

        balanceOf[msg.sender] -= _value;
        balanceOf[_to] += _value;
        emit Transfer(msg.sender,_to,_value);
        return true;
    }
    function approve(address _spender, uint256 _value) returns (bool success){
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender,_spender,_value);
        return true;
    }
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success){
        require(_to != address(0));
        require(allowed[_from][msg.sender] >= _value);
        require(balanceOf[_from] >= _value);
        require(balanceOf[_to] + _value >= balanceOf[_to]);

        balanceOf[_from] -= _value;
        balanceOf[_to] += _value;
        allowed[_from][msg.sender] -= _value;

        emit Transfer(msg.sender,_to,_value);
        return true;
    }
    function allowance(address _owner, address _spender) constant returns (uint256 remaining){
        return allowed[_owner][_spender];
    }
}