什么是erc721?ERC-721代币的基本概念、应用场景和实现原理
2023-03-02分类:以太币(ETH) 阅读()
ERC-721是以太坊上的一种代币标准,它与以太坊的另一种代币标准ERC-20不同,ERC-721代币是唯一的,不可分割的非同质化代币(Non-Fungible Token,NFT),用于代表一种独特的数字资产。本文将介绍ERC-721代币的基本概念、应用场景和实现原理。
一、基本概念
ERC-721代币是一种非同质化代币,它与ERC-20代币不同,每个ERC-721代币都是独特的,不能互换或分割。例如,一张数字艺术品、一块土地、一只宠物等都可以被表示为一个ERC-721代币。ERC-721代币具有以下特点:
1.独特性:每个ERC-721代币都是唯一的,有独特的标识符。
2.不可分割性:ERC-721代币不能被分割或互换,它们代表的是一个完整的、独特的数字资产。
3.可交易性:ERC-721代币可以在区块链上进行交易,所有交易记录都被记录在区块链上,实现了完全透明和不可篡改的交易记录。
二、应用场景
ERC-721代币的应用场景很广泛,例如:
1.数字艺术品:数字艺术品可以被表示为一个ERC-721代币,每个代币都是唯一的、不可分割的。
2.游戏道具:游戏道具可以被表示为一个ERC-721代币,每个代币都有独特的属性和价值。
3.虚拟土地:虚拟土地可以被表示为一个ERC-721代币,每块土地都有独特的位置和属性。
4.实物代币化:实物可以被代币化为一个ERC-721代币,例如房屋、汽车、艺术品等。
三、实现原理
ERC-721代币是基于以太坊智能合约实现的,代币的标识符、所有者和交易记录都被记录在智能合约中。ERC-721代币的实现需要包括以下几个部分:
1.代币合约:代币合约定义了代币的标识符、所有者和交易记录等信息。
2.代币所有权:代币所有权可以通过智能合约中的函数实现,包括转移所有权、查询所有者等。
3.代币交易:代币交易可以通过智能合约中的函数实现,包括出售、购买、拍卖等等。
ERC-721代币的合约结构如下所示:
contract ERC721 { // 代币名称 string public name; // 代币符号 string public symbol; // 代币总量 uint256 public totalSupply; // 代币标识符到所有者的映射 mapping (uint256 => address) internal tokenOwner; // 所有者拥有的代币数量 mapping (address => uint256) internal ownedTokensCount; // 所有者到代币标识符的映射 mapping (uint256 => address) internal tokenApprovals; // 授权操作的映射 mapping (address => mapping (address => bool)) internal operatorApprovals; // 转移所有权 function transfer(address to, uint256 tokenId) public; // 查询所有者 function ownerOf(uint256 tokenId) public view returns (address); // 授权操作 function approve(address to, uint256 tokenId) public; // 获取被授权者 function getApproved(uint256 tokenId) public view returns (address); // 设置操作员 function setApprovalForAll(address to, bool approved) public; // 查询操作员 function isApprovedForAll(address owner, address operator) public view returns (bool); // 代币交易 function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) public; function safeTransferFrom(address from, address to, uint256 tokenId) public; function transferFrom(address from, address to, uint256 tokenId) public; }
ERC-721代币合约中定义了代币名称、符号、总量等信息,以及代币标识符到所有者的映射、所有者拥有的代币数量、代币标识符到被授权者的映射、授权操作的映射等信息。合约中包含了转移所有权、查询所有者、授权操作、设置操作员、代币交易等函数。
转移所有权函数transfer用于将代币的所有权从一个地址转移到另一个地址,函数实现如下:
function transfer(address to, uint256 tokenId) public { // 判断代币的所有者是否为当前调用者 require(_isApprovedOrOwner(msg.sender, tokenId)); // 清除当前所有者的所有权 _clearApproval(tokenId); _removeTokenFromOwnerEnumeration(tokenOwner[tokenId], tokenId); // 将代币所有权转移给目标地址 tokenOwner[tokenId] = to; _addTokenToOwnerEnumeration(to, tokenId); // 触发Transfer事件 emit Transfer(msg.sender, to, tokenId); }
查询所有者函数ownerOf用于查询代币的所有者,函数实现如下:
function ownerOf(uint256 tokenId) public view returns (address) { address owner = tokenOwner[tokenId]; require(owner != address(0)); return owner; }
函数safeTransferFrom和transferFrom分别实现了代币的安全转移和普通转移,函数实现如下:
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public { // 调用_checkOnERC721Received函数,检查代币接收者是否实现了onERC721Received函数 require(_checkOnERC721Received(from, to, tokenId, data)); transferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public { safeTransferFrom(from, to, tokenId, ""); } function transferFrom(address from, address to, uint256 tokenId) public { // 判断操作者是否有转移代币的权限 require(_isApprovedOrOwner(msg.sender, tokenId)); // 清除当前代币的授权操作 _clearApproval(tokenId); _removeTokenFromOwnerEnumeration(from, tokenId); // 将代币所有权转移给目标地址 tokenOwner[tokenId] = to; _addTokenToOwnerEnumeration(to, tokenId); // 增加目标地址的代币数量 ownedTokensCount[to]++; // 减少当前地址的代币数量 ownedTokensCount[from]--; // 触发Transfer事件 emit Transfer(from, to, tokenId); }
除了以上函数之外,ERC-721代币合约中还定义了其他辅助函数,例如判断地址是否为代币的所有者或被授权者的函数_isApprovedOrOwner、清除代币的授权操作函数_clearApproval、移除代币从地址拥有的代币列表中函数_removeTokenFromOwnerEnumeration、添加代币到地址拥有的代币列表中函数_addTokenToOwnerEnumeration等。
总之,ERC-721代币是一种具有唯一性、不可分割性和可交换性的代币标准,广泛应用于数字资产的领域,例如游戏、艺术品、房地产等。ERC-721代币合约通过定义代币的结构、转移所有权、查询所有者、授权操作、设置操作员、代币交易等函数,实现了代币的基本功能。
Tags: ERC721
相关文章
标签云
-
Binance OKx 虚拟货币交易所 USDT 模因币 BRC20 TRC20 Staking 虚拟货币 ARB Sol gamefi 小狐狸钱包 DAO web3.0 流动性挖矿 什么是DeFi ICO 什么是NFT 什么是稳定币 SHIB 虚拟货币钱包 加密货币交易所 加密货币 什么是加密货币 GST 资金费率 MAX 区块链技术 区块链投资 区块链是什么 Coinw BingX Gate.io Bitfinex MEXC BITGET BitMEX Kucoin pionex Bybit BitMart KYC 网格交易 LTC Litecoin PI 什么是狗狗币 LUNA USDC