实现EIP20Interface代币接口

实现EIP20Interface代币接口

pragma solidity ^0.4.24;

contract EIP20Interface {
    //获取token发布的总量,比如:EOS 10亿
    uint256 public totalSupply;
    // //获取token名字,比如:“kongyixueyuan”
    // function name() view returns (string name);
    // //获取token简称,比如:"KYXYB"
    // function symbol() view returns (string symbol);
    // //获取小数位,比如以太坊的decimals为18:10^18
    // function decimals() view returns (uint8 decimals);
    // //获取token发布的总量,比如:EOS 10亿
    // function totalSupply() view returns (uint256 totalSupply);
    //获取_owner地址的余额
    function balanceOf(address _owner) view returns (uint256 balance);
    //转帐:调用方向_to转_value个token
    function transfer(address _to, uint256 _value) returns (bool success);
    //转帐:从_from向_to转_value个token
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success);
    //允许_spender从自己(调用方)帐户转走_value个token
    function approve(address _spender, uint256 _value) returns (bool success);
    //自己(_owner)查询_spender地址一共可以转走自己多少个token
    function allowance(address _owner, address _spender) view returns (uint256 remaining);
    //转帐的时候必须要调用的事件,如transfer,transferFrom方法
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    //成功执行approve后调用的事件
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

contract MyToken is EIP20Interface{
    //获取token名字,比如:“kongyixueyuan”
    string public name;
    //获取token简称,比如:"KYXYB"
    string public symbol;
    //获取小数位,比如以太坊的decimals为18:10^18
    uint8 public decimals;
    //获取token发布的总量,比如:EOS 10亿
    uint256 public totalSupply;

    //存储币拥有者拥有的币的余额
    mapping(address=>uint256) balances;
    //任何地址
    /**
    允许0xca35b7d915458ef540ade6068dfe2f44e8fa733c
    转走gate.io =>100
    转走huobi =>100

   允许地址 0x14723a09acff6d2a60dcdf7aa4aff308fddc160c
    转走gate.io =>10
    转走huobi =>200
     */
    //外层address代表0x14723a09acff6d2a60dcdf7aa4aff308fddc160c
    //value的map代表 转走gate.io =>10
    mapping(address=> mapping(address=>uint256)) allowances;

    //传4个状态变量,要加下划线
    function MyToken(
        string _name,
        string _symbol,
        uint8 _decimals,
        uint256 _totalSupply) {
        //获取参数的值
        name=_name;
        symbol=_symbol;
        decimals=_decimals;
        totalSupply=_totalSupply;
        //将币的总量给发起人
        balances[msg.sender]=_totalSupply;

    }


    //获取_owner地址的余额
    function balanceOf(address _owner) view returns (uint256 balance){
        //返回_owner所对应的余额
        return balances[_owner];
    }
    //转帐:调用方向_to转_value个token
    function transfer(address _to, uint256 _value) returns (bool success){
        //判断要转的
        require(balances[_to]+_value>balances[_to] && balances[msg.sender] > _value && _value > 0);
        //只是改了值,并没有真正转帐
        balances[_to]+=_value;
        balances[msg.sender]-=_value;
        //转帐后必须调用event Transfer方法才能实现真正转帐
        Transfer(msg.sender,_to,_value);
        //必须返回true
        return true;
    }
    //转帐:从_from向_to转_value个token
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success){
        return true;
    }
    //允许_spender从自己(调用方)帐户转走_value个token
    function approve(address _spender, uint256 _value) returns (bool success){
        //条件判断,防止异常
        require(balances[msg.sender] > _value && _value > 0);
        //存储到allowances的自己的msg.sender,允许_spender转走自己帐户_value个token
        //自己可以多次调用这个方法,允许别人转走自己指定的金额
        //如果已经设置过了别人转走的金额,比如已经第一次设置了10个,但是现在又要求可以转走100个
        //那么实际上它能转走100个,就是再次调用这个方法,就会重置当前的值。并不是累加
        allowances[msg.sender][_spender] = _value;
        //调用这个方法
        Approval(msg.sender,_spender,_value);
        return true;
    }
    //自己(_owner)查询_spender地址一共可以转走自己多少个token
    function allowance(address _owner, address _spender) view returns (uint256 remaining){
        //后面key可以从前面key转走多少
        return allowances[_owner][_spender];
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值