写NFT合约要实现哪些功能
比如你要发行一套“虎虎生威”NFT,你要怎么写合约呢?
这个“虎虎生威”NFT,是一套老虎头像,有10000个,每个都是一个token。
这个合约要实现至少以下几个功能:
1、“铸造”(mint)功能。
NFT是非同质化代币,也就是一种“币”(token)了,既然是“币”(说是币,其实只是png图片而已),就要mint(铸造)了。执行一次mint,就会产生一个铸造好的token。
根据我前面的NFT科普文章,所谓铸造,就是在区块链上记载了一个token的ID和其拥有者的地址。
在计算机世界的术语里,有很多这种莫名其妙的说法,说铸造吧,也没有炉子,也没有高温,也没有金属,也没有模具,其实就单纯是个比喻,一开始会让人不习惯,时间长了就好了。
像“挖矿”、“铸造”、“销毁”、“桥”、“钱包”、“分叉”、“空投”、“分片”等等,一开始看上去是有点懵圈的,仔细研究一下就知道其实八杆子打不上关系,只是一个概念的借用,为了描述方便和好玩而已。
2、转移功能。
要能让拥有者把一个token转移给另外一个人。
3、查询功能。
要能查询某个token在谁手里,一个人有多少token,等等这种类似功能。
4、元数据功能。
元数据这个术语,在老百姓那里说出来有点装。其实就是描述某事物各种属性的信息,比如一个人的元数据,就是他的姓名、性别、年龄、肤色、身份证号码、职业、民族、照片等信息。
一个NFT的元数据,其实是说每个token的元数据,比如在虎虎生威NFT中,有10000个token,每个token都有其元数据,记录老虎头像各种属性的信息,诸如一个老虎的发型、肤色、性别、年龄、姿态、编号,以及存储这个老虎图像的链接。
由于图片一般比较大,所以图片本身都不放在以太坊上,而是放在web上或者IPFS上,链上只是存储了一个链接信息。
合约有了元数据功能,提供了tokenURI函数,人们就可以通过该函数的调用,获取某个token的元数据链接,然后读取元数据,并最终取得其图像。
OpenSea之所以可以展示你的NFT token,就是因为它调用你合约的tokenURI,获得元数据中的image项,然后读取图像的。
5、合约元数据功能。
如果你想把你的NFT放在OpenSea上作为一个Collection(收藏集)出现,就要让OpenSea能获取关于你Collection的一些基本设置。
合约元数据就是干这事的。
6、其他功能
比如你还想实现团队分账功能(团队成员按一定的比例获取收益)、白名单预售功能(只有白名单里的人才能在预售阶段mint)等等。