创建NFT合同,用流量和IPFS铸造代币

Bitget下载

注册下载Bitget下载,邀请好友,即有机会赢取 3,000 USDT

APP下载   官网注册

非同质代币(NFT)市场正进入狂热状态。回顾NFT的早期发展和回忆隐猫所暴露的挑战是有趣的。CryptoKitties是由DapperLabs团队建造的。,这是"大规模"以太坊的使用。

此后,NFT开始发展壮大,Rarible、OpenSea、Foundation、Sorare等平台层出不穷。。这些平台每个月都有几百万的流量。尽管磕磕绊绊,但大多数仍发生在以太坊区块链。但是在经历了CryptoKitties之后,DapperLabs'团队着手建立一个新的宇宙。这是非常适合NFT使用场景区块链。这样做的目的是解决以太坊中看到的许多NFT问题,并为该领域的开发者和收藏家提供更好的体验。他们的新区块链流已经证明它可以着陆。吸引一些大人物。比如NBA,UFC,甚至苏斯博士都在用Flow。

最近,我们写了关于通过使用保存在IPFS的基础资产创建NFT的文章,并讨论了NFT菲尔德的责任。以及IPFS能提供什么帮助。现在,本文讨论如何在Flow上创建一个IPFS支持的NFT。在早期,Flow区块链的主要应用之一是NBA顶级投篮。。我们需要重新建立一个非常基本的NFT造币过程,然后追溯NFT元数据和IPFS的基础资产。

因为我们喜欢皮亚塔斯,我们的NFT将不再是NBA的精彩视频。

本教程有 3 篇文章

,而是一个可交易的piatas视频。

创建契约和铸造令牌(本文是第一篇)

创建一个应用程序来查看通过此契约创建的NFT。

创建一个市场,将NFT转让给他人,同时也转让IPFS的基础资产。

我们需要安装FlowCLI。Flow的文档里有一些很好的安装说明:

MACOS

Linux

Windows

我们将在IPFS上存储资产文件。我们使用Pinata来简化操作。我们可以在这里注册一个免费账号,获得一个API密匙。PinataAPI将在本教程的第二篇文章中使用。但在本文中,我们使用Pinata网站。

我们还需要安装NodeJS和一个文本编辑器,它可以帮助突出显示Flowsmartcontract的代码的语法(它是用一种叫做Cadence的语言编写的)。。VisualStudio代码有一个支持Cadence语法的插件。

Let';现在,为项目创建一个目录:

输入目录并初始化一个新的流项目:

。在您喜欢的代码编辑器中打开项目(如果您使用VisualStudio代码,可以安装Cadence插件),让';让我们开始吧。

您将看到一个flow.json文件。我们很快就会用到它。首先,创建一个名为cadence的文件夹。在此文件夹中,添加另一个名为contracts的文件夹。最后,在contracts文件夹中创建一个名为PinataPartyContract.cdc的文件。

解释我们正在做的关于区块链的所有工作都将在模拟器上完成。但是要将项目部署到测试网络或主网络,只需更新flow.json文件中的配置即可。让';现在我们把这个文件设置成一个模拟器环境,然后我们就可以开始写合同了。

更新flow.json中的合同对象,代码如下:

然后,更新这个文件中的deployments对象,代码如下:

这是告诉FlowCLI使用模拟器部署我们的契约。它还引用(在模拟器上)我们即将撰写的合同……

Flow有一个关于创建NFT合同的优秀教程。它';这是一个很好的参考,但正如Flow指出的,他们没有';t还没有解决NFT元数据的问题。。他们希望在链上存储元数据。它';这是个好主意。他们肯定会想出一个合理的办法。然而,我们现在想要用元数据来转换一些令牌,并且我们想要关联相应的媒体文件(目标)。元数据只是其中一个组成部分。。我们还需要指出令牌最终代表的媒体文件。

如果你熟悉以太坊区块链上的NFT,你可能知道很多代币的底层资产都存储在传统的云服务器上,这是可能的,但是有缺点。。我们已经写过IPFS的可寻址内容以及在传统云平台上存储区块链数据的缺点。总结起来主要有两点:

资产要可验证

维护责任要容易转移

IPFS解决了这两点。。另一方面,Pinata以一种简单的方式将内容长时间保存在IPFS上。这就是我们的NFT相关信息所需要的吗?我们需要确保我们能证明NFT的所有权。,并确保我们可以控制基础资产(IPFS)-媒体文件或其他内容,以确保它们不是重复的。考虑到这一点,让';让我们写一个契约,它可以铸造NFT,并将元数据与NFT相关联。并确保元数据指向存储在IPFS上的底层资产。

打开PinataPartyContract.cdc,写代码:

第一步是定义契约,后面会添加更多内容。但是首先我们定义PinataPartyContract并在其中创建一个资源。资源存储在用户帐户中,通过访问控制措施进行访问。在这里,NFT资源最终被用来代表NFT所拥有的。。NFT必须是惟一的,id属性允许我们识别令牌。

接下来,我们需要创建一个资源接口,我们将使用它来定义哪些功能可以提供给其他人(即不是合同所有者)。

将此代码放在NFT资源代码下。这个NFTReceiver资源接口用来定义谁有访问资源的权限,所以可以调用以下方法:

deposit

getids。

Iexists

getmetadata

接下来,我们需要定义令牌收集接口。可以把它想象成一个存放用户所有NFT的钱包。

这个资源里有很多东西,请说明。首先,有一个变量叫做ownedNFT。这是非常直接的,它可以跟踪用户在此合同中拥有的所有NFT。

接下来,还有一个变量叫做metadataObjs。。这有点特殊,因为我们扩展了流NFT的契约函数来存储每个NFT的元数据的映射。这个变量将令牌id映射到其相关的元数据,这意味着我们需要在设置令牌id之前将其设置为元数据。然后我们初始化变量。流中定义的资源中的变量必须初始化。

最后,我们拥有NFT集合资源的所有可用功能。应该注意的是这些函数并不是所有人都能调用的。您还记得在上一节中,任何人都可以访问的函数是在NFTReceiver资源接口中定义的。

我特别想指出存款功能。。正如我们扩展了默认的流NFT契约以包含metadataObjs映射一样,我们也扩展了默认的存款函数以接受额外的元数据参数。你为什么在这里做这个??因为您需要确保只有令牌的minter可以将此元数据添加到令牌中。为了保持这种私密性,元数据的初始添加仅限于造币的执行。

合同代码快写完了。因此在集合资源下,添加以下内容:

首先,我们有一个函数,它在被调用时会创建一个空的NFT集合。这是首次与合同交互的用户创建存储位置的方式。该位置被映射到定义的集合资源。在

之后,我们将创建一个资源。它非常重要,因为没有它,我们就不能';不要做代币。NFTMinter资源包括一个idCount。这是为了确保我们的NFT不会有重复的id。它还有一个创建NFT的功能。

在NFTMinter资源下,增加主合同初始化功能;

该初始化函数仅在部署合同时调用。它有三个功能。

为集合的部署者创建一个空集合,以便合同的所有者可以从合同中转换并拥有NFT。

集合资源发布在一个公共位置,引用开头创建的NFTReceiver接口。这样,契约被告知NFTReceiver上定义的函数可以被任何人调用。

NFTMinter资源保存在帐户存储中,供合同创建者使用。这意味着只有契约的创建者才能制作令牌。所有的合同代码都可以在这里找到。既然合同已经准备好了,我们就开始吧。让我们部署它。,对吧?也许我们应该在流动操场上测试一下。当你到达那里,点按左侧边栏中的第一个帐户。用我们的契约代码替换样本契约中的所有代码,然后单击Deploy。如果一切顺利您应该在屏幕底部的日志窗口中看到该日志。

现在,我们准备将合同部署到本地运行的模拟器。在命令行上,立即运行:

。如果模拟器运行正确,并且flow.json文件配置正确,我们就可以部署契约了。只需运行这个命令:

如果一切顺利,您应该会看到这样的输出:

现在已经在Flowsimulator上启动了一个合同,但是我们想要铸造一个NFT令牌。

在本教程的第二篇文章中,我们将通过应用程序和用户界面使造币过程更加友好。为了看看投了什么。并展示了元数据如何与流上的NFT一起工作。我们将使用Cadence脚本和命令行。

在pinata-party项目的根目录下创建一个新目录。我们称之为交易。创建一个文件夹,在其中新建一个名为MintPinataParty.cdc的文件。

为了编写事务,您需要为NFT提供一个参考文件';首先是元数据。。为此,我们将通过Pinata向IPFS上传一个文件。在这个教程里,我会上传一个孩子在生日聚会上砸皮纳塔的视频。你可以上传任何你想要的视频文件。你真的可以上传任何你喜欢的资产文件。把它和你的NFT联系起来。本教程系列的第二篇文章将期待视频内容。一旦你准备好你的视频文件,上传到这里。当您上传文件时,您将获得一个IPFS散列(通常称为内容标识符或CID)。复制这个哈希值,因为我们会在造币的过程中用到它。

现在,在您的MintPinataParty.cdc文件中,添加以下内容:

这是一个非常简单的事务代码,很大程度上是由于Flow所做的工作,但是让';让我们看一看。首先,您会注意到顶部的import语句。如果您还记得,我们在部署合同时收到了一个帐户地址。。这里引用的就是这个。因此,用您部署的帐户地址替换0xf8d6e0586b0a20c7。

接下来,我们定义事务。在我们的事务中,我们要做的第一件事是定义两个引用变量。,receiverRef和minterRef。在这种情况下,我们既是NFT的接受者,也是挖掘者。这两个变量指的是我们在合同中创建的资源。如果执行事务的人无权访问资源,事务将会失败。

接下来,我们有一个准备函数。这个函数获取试图执行交易的人的帐户信息,并执行一些验证。它将尝试借用两个资源NFTMinter和NFTReceiver上的可用容量。。如果执行事务的人没有访问这些资源的权限,验证就不会通过,这就是事务失败的原因。

最后是执行函数。这个函数是为我们的NFT和演员NFT创建元数据。,然后在将NFT存入帐户之前关联元数据。如果你注意到了,我创建了一个元数据变量。在这个变量中,添加了一些关于token的信息。因为我们的令牌代表一个事件,也就是一个piata在聚会上被打破了。因为我们试图复制你在NBATopShot中看到的大部分内容,所以我在元数据中定义了一些统计数据。孩子的速度、角度和等级';在皮亚塔荡秋千。我只是觉得这些统计数据很有趣。。您可以用类似的方式为您的令牌定义任何有意义的信息。

您会注意到,我还在元数据中定义了一个uri属性。这将指向IPFS散列,它携带了我们与NFT相关的底层资产文件。在这种情况下它';这是皮纳塔被撞的真实视频。可以用之前上传文件后收到的哈希值替换。

我们使用ipfs://作为哈希的前缀有几个原因。这是IPFS文件的标识符。,您可以使用IPFS的桌面客户端和浏览器扩展。您也可以将其直接粘贴到Brave浏览器中(Brave浏览器现在提供对IPFS内容的原生支持)。

调用mintNFT函数创建令牌。。然后调用存款功能存入我们的账户。这也是我们传递元数据的地方。如果您还记得,我们在存款函数中定义了一个关联变量,并将元数据添加到关联的令牌id中。

最后我们只需要记录代币已经铸造并存入帐户的信息。

现在,我们几乎可以执行代码发送事务来转换NFT。但是首先,我们需要准备我们的账目。在项目根目录下的命令行中,创建一个新的签名私钥。

运行以下命令。

这将返回一个公钥和一个私钥。请始终保护好您的私钥。

我们将需要私钥来签署事务,因此我们可以将其粘贴到flow.json文件中。。我们还需要指定签名算法。以下是flow.json文件中帐户的内容:

如果您计划在github或任何远程git存储库中存储该项目的任何内容,请确保您没有';不包括私钥。。你可能想。gitignore你的整个flow.json虽然我们只使用本地仿真器,但是保护你的密钥是一个很好的做法。

现在您可以发送事务了,只需运行以下命令:

写的交易码文件和签名账号在flow.json中引用,如果一切顺利,应该会看到这个输出:

最后验证令牌是否在我们的账号中,获取元数据。做这个。我们需要编写一个非常简单的脚本,并从命令行调用它。

在项目的根目录下,创建一个名为scripts的新文件夹。在其中,创建一个名为CheckTokenMetadata.cdc的文件,补充以下内容:

这个脚本可以认为类似于在以太坊智能合约上调用只读方法。它们是免费的,只返回契约中的数据。

在脚本中,导入部署的合同地址。。然后定义一个主函数(这是脚本运行所需的函数名)。在这个函数中,我们定义了三个变量:

nftOwner:NFT的帐户。因为NFT是在部署合同的帐户中生成的所以在我们的例子中,这两个地址是相同的。不一定,要看你以后的合同设计。

能力:需要从部署的契约中借用的能力(或功能)。请记住,这些功能受访问控制。因此,如果您尝试借用的地址没有可用的功能,脚本将会失败。我们正在借用NFTReceiver资源的功能。

接收器:这个变量只是记录我们的能力。

现在我们可以调用(可用的)函数。在这种情况下,我们需要确保相关的地址确实收到了我们铸造的NFT,然后我们需要检查与令牌相关的元数据。

Let';让我们运行脚本,看看会得到什么。。在命令行上运行以下命令:

您应该会看到类似于元数据输出的输出。

恭喜恭喜!您成功创建了流智能协定,转换了令牌,并将元数据与令牌相关联。并将代币的底层数字资产存储在IPFS上。作为教程的第一部分,它';这还不错。

接下来,我们有一个关于构建前端React应用程序的教程,它允许您通过获取元数据和解析元数据来显示您的NFT。

本翻译由蚂蜂窝网络赞助。

来源:

以上是dadaQQ.com';的操作教程用流量和IPFS创建NFT。更多关于用流量和IPFS创造NFT的信息,请关注币大师其他相关文章!

本站提醒投资有风险,入市需谨慎。此内容不作为投资理财建议。

创建NFT合同,用流量和IPFS铸造代币文档下载: PDF DOC TXT
文章来源: 肖肖
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至2384272385@qq.com举报,一经查实,本站将立刻删除。