NFT(Non-Fungible Tokens,非同质化代币)是智能合约领域中最耀眼的星之一,是一种类似于ERC20的代币标准。
非同质化意味着它是独一无二的,这与ERC20代币截然不同,后者都是同质化代币。
这些NFT可以通过编程来完成几乎任何你想做的事情,就像普通的智能合约一样,但它们具有链上加密的真实性,因为它们的部署历史将随着区块链的存在而得到几乎永久的保证。这解决了许多问题,特别是对于那些在艺术界摸爬滚打的人来说,NFT所创造的数字稀缺性和真实性简直就是灵丹妙药。这也可以解决版税的问题,创造数字地位的象征,让游戏应用程序可以加强交互,等等。
NFT是由区块链和智能合约的出现所碰撞出的全新的火花,而现在有大量的开发者和机构团队正在其上勾线各种奇思妙想。
标准
为了使你的合同能被系统认定是一个NFT,它所要做的就是遵循这个标准。我们把这个标准导入到我们的合约中,这样我们就不必每次想做一个新的合约时都要重新造轮子。
NFT有一个tokenURI变量,他们有一个tokenId到其所有者的映射,每个token有自己的"所有者"。这与ERC20不同,后者只有一个地址与余额的映射。ERC721仍然允许人们转让代币,在代币上设置权限等等。按照惯例,这是一个轻量级的标准,所以我们可以用它们建立任何我们想要的东西。
当你进入OpenSea(一个顶级NFT市场),你可以看到一堆图片。那么既然NFT是在区块链上,那么他们的所有数据都应该在链上,对吗?嗯,不尽然。
在链上存储数据可能会非常昂贵,而且艺术品的文件体积往往并不会太小。以太坊和智能合约的开发者意识到,即使是上传1 MB的图片也会让他们迅速破产,所以他们必须创造一个不必存储大量数据,却依旧能展示他们作品的途径。
作为一种变通方法,大多数NFT都有一个所谓的tokenURI。这是一个全球唯一的标识符,用于NFT的可视性领域。这使得给NFT添加视觉效果更容易。URI是一个统一资源标识符,它可能是一个HTTPS API调用,通过IPFS的东西,或其他类型的唯一标识符。这个元数据看起来像这样。
它们的JSON文件结构是这样的:
name
description
image
attributes
这些文件通常存储在API或IPFS上。
链上元数据VS链外元数据
如果你想让你的NFT所有你能想象到的有趣的事情,它的链上属性是必须的。举几个例子,如果你想给他们像口袋妖怪那样的战斗状态,某种类型的稀有性统计,或者让他们有链上加密的稀缺性。这些属性必须是链上的。(因为这些都需要可追溯,可证伪,公众开放)
目前NFT平台没有很好的方法来让链上的属性可视化,所以你只需要用你铸造的NFT创建一个tokenURI。
对于tokenURI,最流行的方法之一是使用IPFS来存储你的数据。你会把你的数据上传到那里,然后使用pinning服务来确保数据永远留在那里。