使用ERC721标准,来抽象非同质化的物品。
EIP全称 Ethereum Improvement Proposals(以太坊改进建议), 是以太坊开发者社区提出的改进建议, 是一系列以编号排定的文件, 类似互联网上IETF的RFC。
EIP可以是 Ethereum 生态中任意领域的改进, 比如新特性、ERC、协议改进、编程工具等等。
ERC全称 Ethereum Request For Comment (以太坊意见征求稿), 用以记录以太坊上应用级的各种开发标准和协议。如典型的Token标准(ERC20, ERC721)、名字注册(ERC26, ERC13), URI范式(ERC67), Library/Package格式(EIP82), 钱包格式(EIP75,EIP85)。
ERC协议标准是影响以太坊发展的重要因素, 像ERC20, ERC223, ERC721, ERC777等, 都是对以太坊生态产生了很大影响。
通过ERC165标准,智能合约可以声明它支持的接口,供其他合约检查。
IERC165接口合约只声明了一个supportsInterface函数,输入要查询的interfaceId接口id,若合约实现了该接口id,则返回true:
interface IERC165 {
/**
* @dev 如果合约实现了查询的`interfaceId`,则返回true
* 规则详见:https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
*
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
ERC721和ERC20的最大区别就是它利用tokenId来表示特定的非同质化代币,授权或转账都要明确tokenId;而ERC20只需要明确转账的数额即可。 不同的tokenId,具有的价值是不一样的。 主要包含的函数有:
- balanceOf:返回某地址的NFT持有量balance。
- ownerOf:返回某tokenId的主人owner。
- transferFrom:普通转账,参数为转出地址from,接收地址to和tokenId。
- safeTransferFrom:安全转账(如果接收方是合约地址,会要求实现ERC721Receiver接口)。参数为转出地址from,接收地址to和tokenId。
- approve:授权另一个地址使用你的NFT。参数为被授权地址approve和tokenId。
- getApproved:查询tokenId被批准给了哪个地址。
- setApprovalForAll:将自己持有的该系列NFT批量授权给某个地址operator。
- isApprovedForAll:查询某地址的NFT是否批量授权给了另一个operator地址。
- safeTransferFrom:安全转账的重载函数,参数里面包含了data。