一、ERC721标准
ERC721是以太坊上的智能合约标准之一,定义了一个基于以太坊的代币接口。它是非同质化代币(Non-Fungible Token, NFT)的标准之一。
ERC721定义了代币的标准接口,包括代币发行、转移、查询等功能。它能够实现数字资产的唯一性和独特性,例如游戏中的角色、道具、艺术品等。
pragma solidity ^0.8.0;
interface IERC721 {
event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
function balanceOf(address _owner) external view returns (uint256);
function ownerOf(uint256 _tokenId) external view returns (address);
function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata _data) external payable;
function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
function approve(address _approved, uint256 _tokenId) external payable;
function setApprovalForAll(address _operator, bool _approved) external;
function getApproved(uint256 _tokenId) external view returns (address);
function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}
ERC721接口的具体实现需要继承这个接口,并进行相应的实现。
二、ERC721Enumerable
ERC721Enumerable是对ERC721标准的扩展,增加了更多的查询功能,使得代币集合可以像数组一样进行操作。
pragma solidity ^0.8.0;
interface IERC721Enumerable is IERC721 {
function totalSupply() external view returns (uint256);
function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);
function tokenByIndex(uint256 _index) external view returns (uint256);
}
ERC721Enumerable接口定义了查询代币集合情况的功能,包括总量、所有者持有的代币的索引、根据索引获取代币等。
三、ERC20
ERC20是另一个以太坊的智能合约标准,定义了一个基于以太坊的可替代代币接口。
ERC20代币是同质化的,即每个代币都是可以互相替换的。它们可以用于交易、支付、存储等各种场景。
pragma solidity ^0.8.0;
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}
ERC20代币接口包括代币的发行、转移、查询余额、授权等功能。
四、如何查看ERC721代币
通过以太坊的链上浏览器可以查看ERC721代币。例如,使用Etherscan,输入指定的ERC721代币合约地址可以查询该地址下所有的代币信息。其中包括代币ID、持有地址、转移记录等。
使用Solidity编写一个简单的ERC721合约:
pragma solidity ^0.8.0;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.0/contracts/token/ERC721/ERC721.sol";
contract MyToken is ERC721 {
constructor() ERC721("MyToken", "MTK") {}
}
这个合约的名字是“MyToken”,代币符号是“MTK”。
可通过以下代码创建一个代币,然后将其发送给另一个地址:
MyToken public myToken = new MyToken();
function mintToken(address to, uint256 tokenId) public {
myToken.mint(to, tokenId);
}
function sendToken(address to, uint256 tokenId) public {
myToken.safeTransferFrom(msg.sender, to, tokenId);
}
这些函数可以在合约内部、外部直接调用,完成ERC721代币的发行、转移等相关操作。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/156594.html
微信扫一扫
支付宝扫一扫