码迷,mamicode.com
首页 > 其他好文 > 详细

实现代币ERC721功能

时间:2020-03-05 22:13:07      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:关于   ret   token   tran   标准   内容   Nero   too   通过   

首先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函数

来提取 

实现代币ERC721功能

标签:关于   ret   token   tran   标准   内容   Nero   too   通过   

原文地址:https://www.cnblogs.com/beautiful7/p/12422965.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!