• 实现代币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函数

    来提取 

  • 相关阅读:
    Java根据百度API获得经纬度,然后根据经纬度在获得城市信息
    获取鼠标位置的几个通用的JS函数
    java 定时备份数据库
    基于commons-net实现ftp创建文件夹、上传、下载功能
    java自动识别用户上传的文本文件编码
    CSS3实现10种Loading效果
    Java实现拖拽上传
    JAVA 比较两张图片的相似度的代码
    Java jsp页面中jstl标签详解
    mysql去除重复数据
  • 原文地址:https://www.cnblogs.com/beautiful7/p/12422965.html
Copyright © 2020-2023  润新知