NFT的图片、音视频等资源需要有个存储空间,我们一般会使用IPFS。
星际文件系统IPFS(Inter-Planetary File System)是一个面向全球的、点对点的分布式版本文件系统,目标是为了补充(甚至是取代)目前统治互联网的超文本传输协议(HTTP),将所有具有相同文件系统的计算设备连接在一起。原理用基于内容的地址替代基于域名的地址,也就是用户寻找的不是某个地址而是储存在某个地方的内容,不需要验证发送者的身份,而只需要验证内容的哈希,通过这样可以让网页的速度更快、更安全、更健壮、更持久。
idToOwner维护了谁拥有什么通证,映射关系是通证ID到其所有者地址;
idToApproval维护了谁被授权操作某个通证,映射关系是通证ID到被授权操作的地址;
ownerToNFTokenCount维护了某个地址所拥有的nft总量,映射关系是用户地址到代表总量的整数;
ownerToOperators维护了某个地址是否授权给了另外一个地址;
一个主要的modifier是canOperate:
// 查看是否具备操作某个nft的权限
modifier canOperate(
uint256 _tokenId
)
{
// 找到对应token的所有者
address tokenOwner = idToOwner[_tokenId];
require(
// 需要操作者是所有者或者被所有者授权
tokenOwner == msg.sender || ownerToOperatorstokenOwner,
// 否则返回错误
NOT_OWNER_OR_OPERATOR
);
_;
}
同时,ERC-721还支持可选的实现项,metadata extension,主要用以返回NFT的描述信息。
ERC-1155
ERC-1155同上面的描述,因为实现了“打包”的功能,所以ERC-1155的大部分函数都支持batch的操作。相比于ERC-721,ERC-1155有很好的效率提升。