Week10-NFT 标准
近两年NFT,元宇宙发展如火如荼,那么到底什么是NFT ? NFT 又称非同质化代币,核心特性是每个代币都是独一无二的,跟其他代币是不相同的。在以太坊标准里 NFT 是通过一系列 EIP 来定义的,本周来带领大家了解一下主流的标准
Day1 - ERC721
ERC-721 是最早的 NFT 标准, 早期 CryptoKitties 等项目均采用该标准。与 20 代币最大的区别是:每个 token 都有唯一的 ID,且 token 不可进行拆分
。
其核心接口如下:
interface ERC721 /* is ERC165 */ {
// events
event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
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 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);
}
写接口包含:
- transferFrom
- safeTransferFrom
- approve
- setApprovalForAll
读接口则包含:
- balanceOf
- ownerOf
- getApproved
- isApprovedForAll
另外 ERC721 还有一些常用的扩展,包括:
- metadata 扩展
- 枚举扩展
- 可暂停扩展
- 可销毁扩展
Day2 ERC1155
ERC1155 是另外一个采用较多的标准, 该标准 与 ERC20
的区别是,在一个合约中可以同时包含多个 token,与 ERC721 的区别在于,每个 tokenId 的数量,可以不止有一个。
另外 ERC1155 支持批量操作,比如批量转账,批量mint,批量查询余额
interface ERC1155 /* is ERC165 */ {
event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _value);
event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _values);
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
event URI(string _value, uint256 indexed _id);
function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data) external;
function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) external;
function balanceOf(address _owner, uint256 _id) external view returns (uint256);
function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory);
function setApprovalForAll(address _operator, bool _approved) external;
function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}
Day3 ERC2981
ERC2981 主要用于实现 NFT 版税功能,可以实现在 NFT 每次转移时,支付一定收益给 NFT 的创造者或者版权所有者。该标准适用于 ERC721 或 ERC1155 token.
该标准主要包含一个方法 royaltyInfo
用于确认某 tokenId 在某售价情况下,应该给谁支付多少的版税:
interface IERC2981 is IERC165 {
function royaltyInfo(
uint256 _tokenId,
uint256 _salePrice
) external view returns (
address receiver,
uint256 royaltyAmount
);
}
Day4 SBT 灵魂绑定代币
SBT 又称灵魂绑定 Token,简单来说可以理解为 不可转移 NFT。其应用场景包含:身份认证,投票, KYC 等
目前能够支持 SBT 的 EIP 提案,我们已经看到的有 EIP-4973、EIP-5114、ERC721S 等,还有 Solv Protocol 提出的 EIP-3525。
Day5 ERC3525 半匀质化通证代币
这是一个通用标准,适用面非常广阔。它可以把多个相似但并不相同的通证识别为“同类”,然后允许同类之间进行相互转账等特殊操作。从效果上,相当于同类之间可以进行合并、拆分、碎片化等数学操作
直截了当地解释 ERC-3525 与 ERC-1155 的差别 - 孟岩
概览
除此之外 NFT 相关的 标准还有很多,NFT 协议全览:标准协议、流动性协议和跨链协议 对他们进行了全面的梳理和总结
No Comments