随着非同质代币NFT市场进入疯狂,回顾相对早期的NFT并记住cryptokitties面临的挑战是有趣的。dapper实验室团队构建的平台是第一个潜在大规模采用的真实例子,也是以太坊区块链上第一个真正的压力。
此后,随着快速、Open海、基金会和SARARE等平台的出现,NFT蓬勃发展。这些平台每月都有数百万美元流入。尽管早期有一些困难,但大多数都发生在以太坊区块链上。然而,在经历了cryptokitties之后,dapper实验室的团队开始构建新块的公链,这也非常适合NFT用例。这样做的目的是解决在以太坊中遇到的许多NFT问题,并为该领域的开发人员和收集器提供更好的体验。他们的新区块链流已经证明自己能够获得一些可见性。NBA、UFC甚至苏斯博士都在使用flow。
我们最近写了一篇关于在IPFs上创建具有内置资产支持的NFT的文章,并讨论了NFT领域的职责,以及我们认为IPFs可以提供的帮助。现在是讨论如何在IPFs支持的流上创建NFT的时候了。流区块链的主要早期应用是NBA**投篮。我们将创建一个非常基本的转换NFT过程的副本,然后在IPFs上备份NFT元数据和资产。
因为我们喜欢皮尼亚塔而不是NBA的精彩视频,我们的NFT将重点放在可交易的皮尼亚塔在聚会上被销毁的视频。
本教程由三部分组成
创建合同和代币。
创建一个应用程序来查看通过此合同创建的NFT。
创建一个市场,将NFT转让给其他人,并将NFT的基础资产转让给知识产权基金
让我们从第一个教程开始。
设置
我们需要安装flow cli。flow文档中有一些很好的安装说明,但我会将它们**到这里:
IOS系统
brew安装流cli
Linux操作系统
sh-ci“$(卷曲-fsSLhttps://storage.googleapis.com/flow-cli/install.sh)quot;
Windows系统
iex“{$(irm)”https://storage.googleapis.com/flow cli/install.ps1#39;) }”
我们将在IPFs上存储资产文件。为了简化操作,我们可以使用Pinata。你可以在这里注册一个免费帐户,并在这里获得一个API密钥。
我们还需要安装node和文本编辑器来帮助突出显示flow智能合约代码(用cadence编写)的语法。你可以在这里安装node。VisualStudio代码具有支持cadence的扩展。
让我们创建一个目录来记录我们的项目。
皮纳塔党
切换到目录并初始化新的流项目:
cd pinata party
flow项目初始
现在在您喜爱的代码编辑器中打开项目(同样,如果您使用的是visualstudio代码,请使用cadence扩展)并开始工作。
你会看到的流.on文件,我们很快就会用的。首先,创建一个名为cadence的文件夹。在此文件夹中,添加另一个名为contracts的文件夹。**,在contracts文件夹中,创建PinataPartyContract.cdc网站我不确定。
在我们继续之前,必须指出,从现在开始,我们对流区块链所做的一切都将在模拟器上完成。但是,将项目部署到测试网络或主网络就像一个更新流.on文件中的配置设置同样简单。现在将文件设置为模拟器环境,然后我们就可以开始编写合同了。
更新流.on合同标的如下:
quot;合同quot;:{
私人合同quot;:quot;./cadence/contracts/PinataPartyContract.cdcquot;版本
}
然后,更新文件中的部署对象,如下所示:
quot;部署A66035:{
仿真quot;:{
仿真账户quot;:[quot;私人合同quot;]
}
}
这告诉flow cli使用仿真器来部署我们的契约,它还引用了帐户(在仿真器上)和我们将要编写的契约。事实上
我们开始写这份合同吧。
合同
Flow提供了一个关于创建NFT合同的**教程。这是一个很好的参考点,但正如flow所指出的,它们并没有解决NFT元数据问题。他们希望在链上存储元数据。这是个好主意,他们肯定会想出一个合乎逻辑的办法。但是,我们现在想要用元数据强制转换一些代币,并且我们想要与NFT相关联的媒体文件。元数据只是一个组件。我们还需要指出代币最终代表的媒体。
如果您熟悉以太坊区块链上的NFT,您可能知道这些代币背后的许多资产都存储在传统数据存储和云托管提供商中。没关系,除非不是。我们过去写过内容寻址的天才,以及在传统云平台上与区块链相邻存储数据的缺点。归结起来有两点
资产应该是可核查的
维护责任的转移应该很容易
IPFs解决了这两个问题。Pinata然后以一种简单的方式将内容分层,并将其固定在IPFs上很长一段时间。这就是我们想要支持NFT的媒体所需要的,对吧?我们希望确保我们能够证明所有权(NFT),提供有关NFT的数据,并确保我们能够控制基础资产(IPF),而不是一些副本。
打开PinataPartyContract.cdc网站我们开始工作吧。
第一步是确定我们的合同。我们将添加更多内容,但让我们从定制pinatapartycontract并在其中创建资源开始。资源是存储在用户帐户中的项目,可以通过访问控制措施进行访问。在这种情况下,NFT资源最终由用来表示NFT的对象所拥有。NFT必须是唯一可识别的。ID属性使我们能够识别代币。
接下来,我们需要创建一个资源接口,用于定义哪些功能对其他人可用(例如,不是合同所有者的人)
把它直接放在NFT资源代码下面。此nftreceiver资源接口表示任何可以访问我们定义的资源的人都可以调用以下方法:
存款
获取ID
理想主义者
获取元数据
接下来,我们需要定义代币收集接口。它可以被看作是一个钱包来存放所有用户的NFT。
这个资源中有很多内容,但很快就会有意义。首先,我们有一个名为ownednfts的变量。很简单。它跟踪合同中用户拥有的所有NFT。
接下来,我们有一个名为metadataob的变量。这有点独特,因为我们扩展了flow NFT contract函数来存储每个NFT的元数据映射。此变量将代币ID映射到其关联的元数据,这意味着在设置代币ID之前需要该代币ID。
然后,初始化变量。这是流资源中定义的变量所必需的。
**,我们提供了NFT收集资源的所有功能。请注意,并非所有这些功能都可用。如果您还记得,我们定义了任何人都可以在nftreceiver资源接口中访问的函数。
我想指出存款功能。正如我们扩展默认的flow NFT契约以包含元数据ob映射一样,我们还扩展了默认的deposit函数以获取额外的元数据参数。我们为什么要这样做?我们需要确保只有代币的创建者才能向代币添加元数据。为了维护这种隐私,我们将初始元数据添加限制为强制执行。
我们几乎完成了合同代码。因此,在集合资源的正下方,添加以下内容:
首先,我们有一个函数,在调用时创建一个空的NFT集合。这就是第一次与我们的契约交互的用户如何创建映射到我们定义的资源存储位置的存储位置。
之后,我们创建另一个资源。这很重要,因为没有它,我们就无法制造代币。nftminter资源包括一个idcount,以确保我们的NFT永远不会有重复的id。它还具有实际创建NFT的功能。
在nftminter资源下,添加主合同初始值设定项
此初始化函数仅在部署协定时调用。它有三个功能:
1为集合的部署者创建一个空集合,以便契约的所有者可以从契约中创建并拥有NFT。
2在公共场所发布集合资源,并引用我们在开始时创建的nftreceiver接口。这就是我们告诉nftreceiver契约中定义的函数可以被任何人调用的方式。
3Nftminter资源存储在帐户存储中,供合同创建者使用。这意味着只有契约的创建者才能制造代币。
完整的合同可以在这里找到。
现在我们已经准备好合同了,让我们部署它,对吗?我们应该在操场上测试一下。看那里,点击左栏的第一个帐号。用我们的合同代码替换示例合同中的所有代码,然后单击deploy。如果一切顺利,您应该在屏幕底部的日志窗口中看到以下日志:
16:48:55部署部署合同到:0x01
现在,我们已经准备好将契约部署到本地运行的模拟器。Nbsp;在命令中,运行以下命令:
流项目启动模拟器
现在,它在我们的模拟器中运行并且配置正确流.on对于文档,我们可以部署契约。只需运行以下命令:
流程项目部署
如果一切顺利,您将看到以下输出:
为帐户部署1个协定:emulator accountPinataPartyContract-gt;0xf8d6e0586b0a20c7
现在,我们有一个流动模拟器的合同,但我们想铸造一个代币。让我们以这个主题结束这篇文章。
铸造NFT
在本教程的第二篇文章中,我们将重点介绍如何通过应用程序和用户界面使铸造过程更加友好。为了更好地理解和展示元数据如何在流上与NFT一起使用,我们将使用cadence脚本和命令操作。
让我们在pinataparty项目的根目录中创建一个新目录,并将其称为transactions。创建文件夹后,创建一个名为mintpinatparty的新文件。疾病控制中心在里面。
为了编写事务,我们需要引用提供给NFT的元数据中的一个文件。为此,我们将通过Pinata向IPFs上传一个文件。在本教程中,由于我们的NFT主要关注派对上被砸碎的PI NIA-ATA的可交易视频,您可以上传一个孩子在生日派对上敲打PI NIA-ATA的视频。你可以上传任何你需要的视频文件。您可以上传所需的任何资产文件,并将其与NFT关联,但本教程系列的第二篇文章将提供视频内容。一旦你准备好了视频文件,请上传到这里。
上传文件后,系统将提供一个IPFs散列(通常称为content identifier或CID)。**这个散列,因为我们将在铸造过程中使用它。
现在,在你的MintPinataParty.cdc公司文件中,添加以下内容:
这是一个非常简单的交易,很大程度上要感谢flow简化了工作,使事情变得更容易,但是让我们来看看它。首先,您将注意到顶部的import语句。如果你还记得,当我们部署合同时,我们收到了一个帐户。这就是我们需要提及的。因此,用部署时的帐户地址替换0xf8d6e0586b0a20c7。
接下来我们定义事务。这里发生的一切都与我们计划执行的交易有关。
我们在事务中要做的第一件事是定义两个引用变量,receiverref和mininterref。在这种情况下,我们既是NFT的接受者也是执行者。这两个变量指的是我们在合同中创建的资源。如果执行事务的人没有访问资源的权限,事务将失败。
接下来,我们有一个prepare函数。此函数获取试图执行事务的人员的帐户信息,并执行一些验证。我们尝试“借用”已定义的nftminter和nftreceiver资源上可用的函数。如果执行事务的人员无法访问这些资源,则事务失败。
**,我们有了execute函数。在这个函数中,我们为NFT构建元数据,转换NFT,然后在将NFT存入我们的帐户之前关联元数据。如果你注意到了,我创建了一个元数据变量。在这个变量中,我添加了一些关于代币的信息。由于我们的代币表示一个事件,其中一个PI NIA ATA在一个聚会上被破坏,并且我们试图**您在NBA top shot中看到的大部分内容,因此我在元数据中定义了一些统计信息。孩子挥杆击球的速度、角度和水平。我只是觉得数据很有趣。但是,您可以用类似的方式为您的代币输入任何有意义的信息。
您会注意到,我还在元数据中定义了一个URI属性。这指向承载与NFT关联的资产文件的IPFs散列。在这种情况下,是皮涅塔的实际视频被击中。您可以用上载文件后收到的哈希值替换哈希值
在散列之前添加IPFs://有几个原因。这是对IPFs上文件的正确引用,可以与IPFs的桌面客户端和浏览器扩展一起使用。由于brave browser为IPFs内容提供本机支持,因此我们也可以将其直接粘贴到brave browser中。
我们调用mintnft函数来铸造标记。然后我们必须调用存款函数将其存入我们的帐户。这就是我们传递元数据的地方。如果您还记得的话,我们在deposit函数中定义了一个变量关联,它将元数据添加到关联的代币ID中。
**,我们只需要取消事实上,代币已伪造和存放。
现在,我们几乎准备好发送交易和演员NFT。但首先,我们需要准备我们的账目。在项目的根文件夹中,从命令行创建一个新的要签名的私钥。
执行以下命令:
流键生成
这将为您提供一个公钥和一个私钥。**始终保护您的私钥**
我们需要一个私钥来签署交易,这样我们就可以将它粘贴到我们的流.on文件。我们还需要指定签名算法。这是您的帐户流.on文档现在应如下所示:
quot;账户quot;:{
;quot;emulator-accountquot;:{
;quot;地址quot;:quot;您的账户地址quot;,
;quot;privateKeyquot;:quot;您的私钥quot;,
;quot;chainquot;:quot;flow-emulatorquot;,
;quot;sigAlgorithmquot;:quot;ECDSAP256quot;,
hashalgorithmquot;:quot;SHA3u256quot;
},
如果计划将此项目的任何内容存储在GitHub或任何远程git存储库中,请确保未包含私钥。你可能想。它忽略了你的全部流.on. 虽然我们只使用本地仿真器,但保护密钥是一种很好的做法。
既然我们已经更新了这些信息,我们就可以发送交易了。这只需运行以下命令:
流事务发送-代码/事务/MintPinataParty.cdc公司–签名者仿真器帐户
我们从流.on请参阅我们的交易文件和签字人账户。如果一切顺利,您将看到以下输出:
正在获取地址为0xf8d6e0586b0a20c7的帐户的信息…正在提交ID为4a79102747a450f65b6aab06a77161af196c3f7151b2400b3b3d09ade3b69823的事务…已成功提交ID为4a79102747a450f65b6aab06a77161af196c3f7151b2400b3d09ade3b69823的事务
现在,我们需要做的**一件事是验证代币是否在我们的帐户中并获取元数据。为此,我们将编写一个非常简单的脚本,并从命令行调用它。
在项目的根目录中,创建一个名为scripts的新文件夹。在其中,创建一个CheckTokenMetadata.cdc我不确定。在文件中,添加以下内容:
这个脚本可以用一种类似于使用以太坊智能合约的只读方法来考虑。他们是免费的,只是从合同中返回数据。
;
在我们的脚本中,我们从部署的地址导入契约。然后我们定义一个主函数(这是运行脚本所需的函数的名称)。在这个函数中,我们定义了三个变量:
;
NFT所有者:这只是NFT的一个帐户。我们从部署契约的帐户创建了NFT,因此在我们的示例中,根据将来的契约设计,这可能并不总是正确的。
功能:我们需要从部署的合同中“借用”可用的功能。请记住,这些函数是访问控制的,因此如果函数不能被借用其地址的尝试使用,脚本将失败。我们借用了nftreceiver资源的功能。
Receiverref:这个变量只是获取我们的功能并告诉脚本从部署的契约中借用它。
现在我们可以调用(available)函数。在本例中,我们希望确保所讨论的地址确实接收到我们的cast NFT,然后我们希望看到与代币关联的元数据。
让我们运行我们的脚本,看看我们得到了什么。在命令行上,执行以下命令:
执行流脚本。/scripts/CheckTokenMetadata.cdc
对于元数据输出,您将看到类似于以下内容的输出:
{quot;名称quot;:quot;大回转6035、quot;回转速度quot;:quot;29quot;、quot;回转角度quot;:quot;45quot;、quot;额定值quot;:quot;5quot;、quot;URquot;:quot;ipfs://QmRZdc3mAMXpv6Akz9Ekp1y4vDSjazTx2dCQRkxVy1yUj6quot;}
祝贺 你!您已成功创建流智能合约、伪造代币、将元数据与代币关联,并将代币的底层数字资产存储在IPFs上。对教程的第一部分来说还不错。
接下来,我们将提供一个关于构建前端react应用程序的教程,该应用程序将允许您通过获取元数据并对其进行解析来显示NFT。
文章标题:如何使用flow和IPFs创建类似NBA顶级投篮的NFT
文章链接:https://www.btchangqing.cn/207844.html
更新时间:2021年06月12日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。