首先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使用//方便自己
首先建立一个映射来使得查找代币和对应人的地址,再转接,同样的这也需要ERC721的event监听
再实现takeOwnership函数,用来检测是否确保msg.sender被批准来提取代币了,确认后就是用_transfer函数
来提取