在最近的区块链领域,越来越多的人认为NFT将迎来爆发式发展,DeFi+NFT的概念将是未来主要的流行趋势。那么,什么是NFT,NFT是如何实现的,又是如何使用的呢?得益于石头哥推荐的资料,老码农整理了自己的学习笔记,记录了自己对NFT的一点认识。Token的区块链演进——NFT的诞生“Token”本来只是一个计算机术语,比如早期基于token的计算机网络,token一般只是身份证明,没有流通价值。如果说流通只是机器之间的流通,那又代表着一定的操作权限。区块链本质上是分布式数据库,使我们能够以安全且可公开访问的方式存储信息。区块链还提供经济激励以避免作弊,从而实现真正的经济稀缺性。区块链还为数字身份问题提供了一些有趣的解决方案:我们在区块链上进行的每笔交易都与一个公共地址相关联——一个可以重复使用的匿名、安全标识符。区块链非常强大,并带来了第一个广泛使用的加密货币,但比特币仅作为一种货币有用。它只不过是一个值的表示、记录或占位符。V神创造了以太坊,利用区块链让更复杂的信息甚至脚本去中心化。人们开始使用以太坊来创造新的加密货币(通常称为Tokens)和去中心化应用程序(或dApps),其中“Tokens”,即流通的加密数字证明,是区块链上的一种价值凭证,具有流通价值,可以交易直接地,通常被称为“令牌”。进一步,Token可以代表任何有价物,实现权益的数字化,称为“通证”,具有产权、股权、货币等属性。就像股票一样,我们能够捕捉盈亏。基于以太坊对更复杂的数据结构进行编码的能力导致了对标准的需求,以太坊开发者社区撰写了ERC-EthereumRequestforComments,它制定了一套使用以太坊构建软件的标准。基于ERC,开发人员可以构建软件以与其他代码兼容,方法是确保不同的代币和应用程序共享类似的组件,开发人员可以交换这些组件以构建新的体验。比特币和以太币等加密货币代币是可替代的或“同质的”,因为一个代币可以与任何其他代币交换。唯一改变的是区块链上的记录,记录交易。ERC20只是制造大多数可替代代币所依据的标准。以太坊使开发人员能够分散更复杂的数据,那么为什么令牌不应该包含比简单的单位值和所有者更多的变量?换句话说,代币是不可替代的吗?至此,NFT——non-fungibletoken诞生,中文名称为non-fungibletoken。就像ERC20标准化同质代币一样,ERC721是为标准化非同质代币而编写的。通过对NFT进行标准化,开发者社区开创了一个由使用NFT的数字内容、游戏和应用程序组成的新生态系统。什么是NFT?-非同质通证(token)在区块链上,数字加密货币分为本币和token两大类。前者,如BTC、ETH、Filecoin等,拥有自己的主链,利用链上的交易来维护账本数据;代币附加在现有的区块链上,使用智能合约来记录账本,比如附加在以太坊上发行的各种代币。通证可以分为两种类型:同质化和非同质化。我们常见的Token(如BTC、ETH等)都是同质化的,即FT(FungibleToken),可以相互替代,几乎可以无限拆分的代币。NFT是一种非同质代币(token),具有不可分割、不可替代、独一无二的特点。每一个NFT都有唯一唯一的标识,两对不可互换,最小单位为1,不可分割。比如以太坊中的猫痴迷,每只猫都对应链上的一个NFT,拥有唯一的id和基因,更重要的是拥有独立的价值。原生数字资产是存在于数字世界中,或源于数字世界的资产。因此,与FT相比,NFT的关键创新在于提供了一种标记原生数字资产所有权的方式,而这种所有权可以存在于中心化服务或中心化图书馆之外。NFT的所有权并不妨碍其他人阅读它。不是捕获信息并隐藏起来,而是在捕获信息后,发现信息与链上所有其他信息的关系和价值。基于NFT非同质化、不可分割的特性,可以锚定现实世界中的商品概念。简单的说,就是发行在区块链上的数字资产。该资产可以是数字艺术品、纪念品、门票等,并且是独一无二的、不可复制的。由于NFT具有天然的收藏属性且易于交易,因此加密艺术家可以使用NFT创作独一无二的数字艺术品。NFT的实现标准非同质化的代币标准让NFT可以轻松跨越多个生态。当开发人员启动一个新的NFT项目时,这些NFT可以立即出现在几十个不同的钱包提供商上,可以在市场上交易,最近还可以在虚拟世界中交易。这是完全可能的,因为开放标准为读取和写入数据提供了清晰、一致、可靠且经过许可的API。互操作性最引人注目的特征是开放市场中的自由贸易。NFT的即时可交易性将带来更高的流动性。智能合约允许开发人员对不可替代代币的供应设置硬性上限,并强制实施在NFT发行后无法修改的持久属性。NFT是完全可编程的,设计空间充满了可能性。由CryptoKitties开创的ERC721是第一个表示不可替代数字资产的标准。ERC721是一种可继承的实体智能合约标准,这意味着开发者可以通过从OpenZeppelin库中导入ERC721来轻松创建新的ERC721兼容合约。ERC721实际上相对简单:它提供了唯一标识符(每个标识符代表一种资产)到地址的映射,地址代表该标识符的所有者。ERC721还提供了一种使用transferFrom方法转移这些资产的许可方式。interfaceERC721{functionownerOf(uint256_tokenId)externalviewreturns(address);functiontransferFrom(address_from,address_to,uint256_tokenId)externalpayable;}这两个方法实际上就是表示NFT所需要的全部:ownerOf检查谁拥有什么,transferFrom实现资产转移。该标准还有一些其他的补充(其中一些对NFT市场非常重要),但ERC721的核心是相当基础的。ERC1155,由Enjin(https://enjinx.io)团队首创,为NFT世界带来了半置换的理念。在ERC1155中,ID代表的不是单个资产,而是一类资产。例如,一个ID可能代表“剑”,而一个钱包可能包含1000把这样的剑。在这种情况下,balanceOf方法返回钱包拥有的剑的数量,用户可以通过使用“剑”ID调用transferFrom来转移任意数量的这些剑。interfaceERC1155{functionbalanceOf(address_owner,uint256_id)externalviewreturns(address);functiontransferFrom(address_from,address_to,uint256_id,uint256quantity)externalpayable;}这个系统的一个优点是效率:基于ERC721,如果用户想转移1000把剑,他需要修改智能合约的状态(通过调用transferFrom方法)获得1000个独特的代币。但是,如果使用ERC1155,只需要调用1000个参数的transferFrom方法,进行一次操作即可。当然,这种效率的提高伴随着信息的丢失:人们无法再追溯单把剑的历史。ERC1155提供了ERC721功能的超集,这意味着可以使用ERC1155构建ERC721资产(对于每个资产,只需要有一个单独的ID和数量1)。最近Opensea在Github上开发了一个存储库(https://github.com/ProjectOpenSea/opensea-erc1155),用于使用ERC1155标准。ERC-998标准作为一种联合创新,提供了一个模板,NFT可以通过该模板同时拥有同质和非同质资产。目前主网上部署的可组合NFT很少,但可能会有一些不可思议的机会!虽然以太坊是NFT目前最活跃的地方,但其他区块链上也出现了一些NFT标准。DGoods由MythicalGames团队开发,致力于提供来自EOS的功能丰富的跨链标准。Cosmos项目还在开发一个NFT模块,可以作为CosmosSDK的一部分加以利用。NFT附加信息的存储NFT通过元数据为特定标签ID提供描述性附加信息。在CryptoKittty的情况下,元数据是猫的名字、猫的图片、描述文本和任何其他特征(在CryptoKitties的情况下称为“cattributes”)。对于门票,元数据可能包括活动日期和门票类型,以及名称和描述。上面这只猫的元数据可能如下所示:{"name":"DukeKhanplum","image":"https://storage.googleapis.com/ck-kitty-image/0x06012c8cf97bead5deae237070f9587f8e7a266d/1500718.png","description":"Heya.MynameisDukeKhanplum,butI'vealwaysbelievedI'mKingHenryVIIIreincarnated."}为了方便NFT应用访问这些数据,这些数据如何存储,存储在哪里?第一个决定是存储在链上还是链下。也就是说,元数据是直接放入代表代币的智能合约中,还是单独托管?在链上存储元数据的好处是它永久驻留在令牌中,超出任何给定应用程序的限制。生命周期;它可以根据链上逻辑进行更改。如果数字资产的长期价值远远超过其最初创作的价值,例如,一件数字艺术作品被认为可以历久弥新,那么原始站点是否用于创作该艺术作品并不重要仍然存在。因此,NFT的元数据必须与标签标识符的生命周期一起保存。尽管有这些好处,但由于以太坊区块链的存储限制,大多数项目目前都将其NFT存储在链外。因此,ERC721标准包括一种称为tokenURI的方法,可以实现它来告诉应用程序在哪里可以找到给定项目的元数据。functiontokenURI(uint256_tokenId)publicviewreturns(string)tokenURI方法返回一个publicURL,通过URL返回一个JSON数据字典,类似于上面的CryptoKitty示例字典。此元数据应符合官方ERC721元数据标准,以便OpenSea等应用程序可以获取它。最简单的链下存储方式是在一些集中式服务器上,或者在像AWS这样的云存储解决方案上。当然,这也有缺点:1)开发者可以随意更改元数据;2)如果服务挂了,NFT的元数据可能会从原始来源消失。为了缓解问题2,一些服务现在开始在自己的服务器上缓存元数据,以确保即使原始托管解决方案失败也能有效地为用户提供服务。然而,越来越多的开发者,尤其是数字艺术领域的开发者,正在使用IPFS来实现NFT的链下存储。IPFS是一种点对点文件存储系统,它允许跨计算机托管内容,以便可以在许多不同的位置复制文件。准确的说,是另外一条链用来存储NFT的元数据。这确保了:元数据是不可变的,因为它由文件的哈希唯一解析;只要有节点愿意托管数据,数据就会随着时间的推移而持续存在。现在,像Pinata这样的服务通过处理用于部署和管理IPFS节点的基础设施使开发人员的过程更容易,备受期待的Filecoin网络可以在IPFS之上添加一个层来激励节点托管文件。构建尝试——NFT的helloword上面提到,所有的NFT都有所谓的元数据。基本上,我们发现在以太坊上存储图像非常费力且昂贵。如果存储一张8x8的图片,还是很便宜的,但如果你想要分辨率好的图片,就需要多花钱了。但是,将图像添加到IPFS更容易,并且不需要运行服务器。以下是来自Opensea的教程总结。当然,你需要将RinkebyTestnetETH和RinkebyTestnetLINK放入你的钱包中才能继续。具体步骤是:使用ChainlinkVRF创建一个可验证的随机D&D字符串使用IPFS添加一个tokenURI在OpenSeaMarketplace添加这个随机NFT首先,在bash_profile文件中设置环境变量如下:exportMNEMONIC='catdogfrog....'exportRINKEBY_RPC_URL='www.infura.io/asdfadsfafdadf'接下来,克隆示例代码库:gitclonehttps://github.com/PatrickAlphaC/dungeons-and-dragons-nftcddungeons-and-dragons-nftgitcheckoutopensea-updatenpminstalltrufflemigrate--reset--networkrinkeby然后,生成一个角色:truffleexecscripts/fund-contract.js--networkrinkebytruffleexecscripts/generate-character.js--networkrinkebytruffleexecscripts/get-character.js--networkrinkeby这将创建一个新的随机统计角色!我们可以免费获得一个EtherscanAPI密钥,要与链上的NFT进行交互,我们需要将ETHERSCANAPI密钥设置为环境变量:npminstalltruffle-plugin-verifytrufflerunverifyDungeonsAndDragonsCharacter--networkrinkeby--licenseMIT这将验证并发布这个智能合约,另外,你可以使用oneclickdapp并添加合约地址和ABI,ABI可以在build/contracts文件夹中找到。一个NFT一旦创建,需要给它一个tokenURI,用来对外展示NFT数据。这使得存储图像之类的东西变得更容易,而不会浪费将它们添加到链上存储的过程。NFT元数据的一个例子如下:":[...]}为了在IPFS中离线存储一张NFT表示的图片和元数据,需要下载相关工具,包括IPFS、IPFScompanion和Pinata。IPFS伴侣允许我们在Chrome等浏览器中原生查看IPFS数据。如果您在浏览器中单击此链接,您将知道IPFS伙伴正在工作:IPFShttps://IPFS.io/IPFS/qmtgqnhfbmkft9s8phkcdxbn1f5bg3q5hmbar4u6hotvb1?filename=chainlink_elf.png一旦启动IPFS节点,您就可以开始添加文件到它。首先,上传NFT图片。然后,您需要将元数据JSON对象添加到IPFS,并从部署的令牌中获取名称和属性。可以使用create-metadata.js运行:truffleexecscripts/create-metadata.js--networkrinkebymetadatajson文件就是tokenURI,所以我们修改set-token-uri.js的tokenId,添加IPFS的tokenURI:truffleexecscripts/set-token-uri.js--networkrinkeby现在,你可以得到这个NFT地址,然后去OpenSea测试网市场(https://testnets.opensea.io/get-listed/step-two)去查看甚至尝试出售。NFT应用场景自2017年CryptoKitty上线以来,已铸造、流通、交易、发布给用户的NFT藏品近万种、数千万件,其中大部分为游戏、卡牌、网络域名、加密艺术品等.通过NFT呈现现实或互联网世界中的“不可互惠权利”之后,最本质的变化是NFT的价格发现机制将从原来的市场交易转变为权利的“隐性溢价”。拥有或转让NFT的用户将评估NFT的非互惠权益对自己的价值。在保持流动性弱的基本特征不变的前提下,NFT的可交易性将大大增强。NTF的应用场景非常多,几乎充满了想象空间。游戏NFT在游戏行业很受欢迎,因为这些代币解决了一些固有的问题。例如,用作游戏内宠物、武器道具、服装等物品。使用NFT,这些属性可以很容易地转移并用于不同的游戏。因此,NFT可以帮助推动游戏内经济。数字资产,例如Decentraland,参与者可以在其中购买虚拟土地。另一个更贴切的例子是ENS(EthereumNameService,以太坊名称服务),它使用NFT买卖.ETH域名。此外,数字艺术家已经接受NFT来创作基于NFT的艺术品。然而,NFT之所以如此具有吸引力,是因为艺术家可以在NFT市场上赚取利润。值得注意的是,在2020年下半年,数字艺术家以最高价格出售了他们的产品。例如,2020年9月,一件随比特币价格变动的NFT数字艺术品以262ETH(当时101,100美元)的价格售出。知识产权NFT可以代表一幅画、一首歌、一项专利、一段视频、一张照片或其他知识产权。在这个领域,NFT扮演着专利局的角色。帮助每个独特的事物注册版权并帮助它识别专利。实物资产。其他实物资产如房屋等不动产,可以用NFT来代表,进行代币化。可以作为资产流通等金融市场。记录和身份证明NFT可用于验证身份和出生证明、驾照、学历证书、医疗记录等。这些可以以数字形式安全地保存,以防止误用或篡改。Nft是打击身份盗用的理想工具,可以数字化以代表身份甚至我们的外表。金融发票、订单、保险、票据等都可以转化为NFT进行交易。特别是NFT开始与DeFi融合,例如DeFi协议YearnFinance开发了一款名为Y.Insure的保险产品,适用于任何虚拟货币资产。Y.Insure利用NFT机制(ERC-721)来代表保单的独特性。基本上,在定义保单的独特特征时,标准ERC-20代币是“毫无意义的”。DeFi目前通过跨链解决抵押,通过保证金系统解决杠杆,最终实现类似信用衍生品的操作。有杠杆,有抵押,有资金池。金融最基本的东西都有了,理论上任何复杂的衍生品都可以设计。总结我们有很多数字化的东西,只是我们从来没有真正拥有过它们。事实上,NFT的影响不仅限于数字商品的实物所有权。它扩展到与技术交互的情感体验——它改变了产品和消费内容的关联方式。最终,让人们更多地控制他们的创作,更少地控制他们的用户,让用户更多地控制他们的身份。其影响远不止简单的所有权。与任何全新的创新技术一样,我们只能推测NFT将如何使用,我们只能拭目以待。【参考及相关阅读】https://coinmarketcap.com/alexandria/article/what-is-a-non-fungible-token-nfthttps://blog.chain.link/build-deploy-and-sell-your-own-dynamic-nft/https://dao2.io/liao-jie-nft-quan-mao-kan-zhe-pian-jiu-gou-liao/https://decentraland.org/blog/technology/what-are-nfts/https://opensea.io/blog/guides/non-fungible-tokens/https://www.btcfans.com/article/33456
