zoukankan      html  css  js  c++  java
  • 实现代币ERC721功能

    首先ERC721的标准:

    contract ERC721 {

      event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);

      event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);

      function balanceOf(address _owner) public view returns (uint256 _balance);

      function ownerOf(uint256 _tokenId) public view returns (address _owner);

      function transfer(address _to, uint256 _tokenId) public;

      function approve(address _to, uint256 _tokenId) public;

      function takeOwnership(uint256 _tokenId) public;

    }

    1.调查代币

      balanceOf:

        function balanceOf(address _owner) public view returns(uint256 _balance)

        //这个函数的功能是传入地址参数,返回代币数量

      ownerOf:

        function ownerOf(uint256 _tokenId) public view returns(address _owner);

        //传入代币(token)的ID而返回拥有者的address

    2.转移代币:

      ERC721有三种函数关于转移代币:

    方法一:直接转移

      function transfer(address _to,uint256 _tokenId) public;

        将想转移的代币_tokenId转移到_to地址中

    方法二:

    function approve(address _to,uint256 _tokenId) public;

    function takeOwnership(uint256 _tokenId) public;

      代币拥有者先调用approve,传入相同的参数后,该合约会存储谁被允许提取代币,

    然后存储到一个mapping(uint256=> address)中,然后调用takeOwnershi时合约会检查msg.sender

    查看是否有批准来提取代币。

    这里使用私有函数来实现方法1使用//方便自己

    function _transfer(address _from, address _to, uint256 _tokenId) private {
    ownerZombieCount[_to]++;
    ownerZombieCount[_from]--;
    zombieToOwner[_tokenId] = _to;
    Transfer(_from, _to, _tokenId);
    再修改transfer函数的内容,只需要在transfei中使用_transfer就行了
    }
     
      实现批准approve函数:
      步骤:
        1,作为所有者,用新主人的address和交易的_tokenId来调用approve
        2.接受者通过takeOwnership来获得代币
         //在这两者之间需要一个数据结构来存储什么人被批准获取什么代币

      首先建立一个映射来使得查找代币和对应人的地址,再转接,同样的这也需要ERC721的event监听

      再实现takeOwnership函数,用来检测是否确保msg.sender被批准来提取代币了,确认后就是用_transfer函数

    来提取 

  • 相关阅读:
    时间控件My97DatePicker,实现时间的选择,具体运用
    OnClientClick事件和验证控件同时用的时候,会有问题
    根据Eval()函数绑定的值,来显示GridView中的控件的方法
    打印部分页面内容(Javascript)
    U盘装系统中bios怎么设置USB启动(图文教程)
    TextBox控件只允许输入数字(转)
    JS模态窗体的运用,以及相关注意事项(有用到window.returnValue)
    控件TextBox与验证控件相结合产生的控件(运用)
    linq 实现动态 orderby(根据参数名排序)
    yii 多个数据库链接
  • 原文地址:https://www.cnblogs.com/beautiful7/p/12422965.html
Copyright © 2011-2022 走看看