pragma solidity ^0.6.2;
contract NFT{
string public name = "Cocktail NFT"; // token名字
string public symbol = "CNFT"; // token简称
uint256 public totalSupply = 1000000; // 允许的最大发行量
uint256 public maxTokenId; // 已经发行的token数量
mapping(address => uint256) public balances; // 余额
mapping(uint256 => bool) public tokenExists; // token是否存在
mapping(uint256 => address) public tokenOwners; // token拥有者
mapping(address => mapping(address => uint256)) allowed; // 代理
address public owner; // 铸币人
event Approval(address,address,uint256);
event Transfer(address,address,uint256);
constructor() public{
owner = msg.sender; // 设置铸币人
}
// 查询token的拥有者
function ownerOf(uint256 _tokenId) public view returns (address) {
require(tokenExists[_tokenId]);
return tokenOwners[_tokenId];
}
// 授权
function approve(address _to,uint256 _tokenId) public{
require(msg.sender ==ownerOf(_tokenId)); // 证明我是该token的拥有者
require(msg.sender != _to);
allowed[msg.sender][_to] = _tokenId; // 授权指定地址可以动用我的指定token
emit Approval(msg.sender, _to, _tokenId);
}
// token代理人提币
function takeOwnership(uint256 _tokenId) public{
require(tokenExists[_tokenId]); // 该token是存在的
address oldOwner = ownerOf(_tokenId); // 该token的拥有者地址
require(msg.sender != oldOwner);
require(allowed[oldOwner][msg.sender] == _tokenId); // 该token的拥有者已对我授权可以动用该资产
balances[oldOwner] -= 1;
tokenOwners[_tokenId] = msg.sender; // 转账
balances[msg.sender] += 1;
emit Transfer(oldOwner, msg.sender,_tokenId);
}
// 转账
function transfer(address _to, uint256 _tokenId) public{
require(tokenExists[_tokenId]); // 该token是存在的
require(msg.sender == ownerOf(_tokenId)); // 该token的拥有者为我
require(msg.sender != _to); // 不允许自己给自己转账
require(_to != address(0)); // 接收人不能为空
balances[msg.sender] -= 1;
tokenOwners[_tokenId] = _to; // 转账
balances[_to] += 1;
emit Transfer(msg.sender, _to, _tokenId);
}
// 铸币
function mint() public{
maxTokenId += 1;
require(maxTokenId <= totalSupply);
balances[msg.sender] += 1;
tokenExists[maxTokenId] = true;
tokenOwners[maxTokenId] = msg.sender;
}
// 仅限管理员操作
modifier onlyOwner(){
require(msg.sender == owner, "No authority");
_;
}
}
ERC721
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 加密猫应该是以太坊迄今为止最成熟,最成功的Dapp。它在很短的时间内造成了以太坊的交易拥堵。单个猫咪的成交价格飙升...