原标题:2022年开发 NFT 商城系统 市场技术主要功能部署
2022年开发 NFT 商城系统 市场技术主要功能部署
我们创建合约、铸造代币、构建应用程序以查看通过该合约生成的 NFT 以及创建市场以将 NFT 转移给其他用户的示例。 让我们从合约的创建和代币铸造开始。
设置工具
在您的系统上安装 Flow CLI。根据不同的操作系统,有不同的命令用于安装 CLI。
例如,要在 macOS 上安装 Flow CLI,请使用以下命令:
冲泡安装流-cli
在 Windows 上: iex “ { $ ( irm 'https://storage.googleapis.com/flow-cli/install.ps1 ') }”
在 Linux 上: sh -ci “$ ( curl -fsSL https://storage.googleapis.com/flow-cli/install.sh )”
资产文件将存储在 IPFS 上。在这个例子中,我们将使用 Pinata 来存储文件。您可以在此处注册免费帐户并获取 API 密钥。 安装 NodeJS 和文本编辑器以突出显示 Flow 智能合约代码也很重要。
第二步是使用命令为项目创建目录: mkdir 皮纳塔派对 初始化一个新的流程项目并将其更改为该目录: cd pinata-party
现在,在代码编辑器中打开项目,让我们开始工作。首先,创建一个名为 cadence 的文件夹。在该文件夹中添加另一个名 为 contracts 的 文件夹。最后,在名为 PinataPartyContract.cdc 的合同文件夹中创建一个文件。
在继续之前,有必要指出我们对 Flow 区块链平台所做的一切。为模拟器环境设置文件,然后我们就可以开始编写合约了。 我们需要使用以下代码更新 flow.json 中的合约对象:
“合同”:{ “PinataPartyContract”:“./cadence/contracts/PinataPartyContract. 疾控中心” }
使用以下代码更新该文件中的部署对象: “部署”:{ “模拟器”:{ “模拟器帐户”:[ “PinataPartyContract” ] }}它将使 Flow CLI 能够使用模拟器来部署我们的合约。该代码还引用了我们即将编写的帐户和合约。
合约
我们需要创建用于铸造 NFT 的合约,将元数据与 NFT 相关联,并确保元数据指向存储在 IPFS 上的基础资产。
打开 PinataPartyContract.cdc 并执行以下代码:
酒吧合同 PinataPartyContract { 发布资源 NFT { 酒吧让 id: UInt64 初始化(初始化 ID:UInt64 ){ 自己。id = initID }}}
第一步是定义合同。让我们从定义 PinataPartyContract 开始并在其中创建一个资源。资源是保存在用户帐户中的项目,可 通过访问控制措施访问。NFT 需要可识别,并且 id 属性允许您识别令牌。
然后,创建一个资源接口来定义哪些功能可供其他人使用。
发布资源接口 NFTReceiver { pub fun 存款(令牌:@NFT,元数据:{ String : String }) pub fun getIDs () : [ UInt64 ] pub fun idExists ( id: UInt64 ) : Bool pub fun getMetadata ( id: UInt64 ) : { String : String } }
将上述代码放在 NFT 资源代码下方。NFTReceiver 资源接口表示资源可以调用以下方法:
· 获取 ID · 身份存在 · 订金 · 获取元数据
然后,我们必须定义令牌收集接口。将其视为存储所有用户的 NFT 的钱包。
发布资源集合:NFTReceiver { pub varownedNFTs: @ { UInt64: NFT } pub var metadataObjs: { UInt64: { String : String }} 初始化(){ 自己。拥有的 NFT - {} 自己。元数据对象= {} }酒吧乐趣撤回(撤回 ID :UInt64 ):@NFT { 让令牌 - 自我。拥有的 NFT 。删除(键:withdrawID )! 返回 -token }pub fun deposit ( token: @NFT, metadata: { String : String }) { 自己。元数据对象[令牌。id ] = 元数据 自己。拥有 NFTs [令牌。身份证] - !令牌 }pub fun idExists ( id: UInt64 ) : Bool { 回归自我。拥有 NFTs [ id ] != nil }发布乐趣 getIDs () : [ UInt64 ] {
回归自我。拥有的 NFT 。钥匙 }pub fun updateMetadata ( id: UInt64, metadata: { String: String }) { 自己。metadataObjs [ id ] = 元数据 }pub fun getMetadata ( id: UInt64 ) : { String : String } { 回归自我。元数据对象[ id ] ! }销毁(){ 毁灭自我。拥有的 NFT }}
变量 ownNFTs 跟踪用户可以从接触者拥有的所有 NFT。一个名为 metadataObjs 的变量是独一无二的,因为我们正在扩 展 Flow NFT 合约功能以存储每个 NFT 的元数据映射。 它将令牌 id 映射到其相关的元数据,这意味着在我们设置之前需要令牌 id。变量被初始化以在 Flow 中的资源中定义它们。
最后,我们将拥有 NFT 集合资源所需的所有可用功能。默认 NFT 合约被扩展为包含 metadataObjs 映射的方式,我们将 扩展默认存款函数以采用额外的元数据参数。这样做是为了确保只有令牌铸币者才能将元数据添加到令牌中。我们将最初添加 的元数据限制在铸币执行中,以保持其私密性。在 Collection 资源下添加以下代码:
酒吧乐趣 createEmptyCollection () : @Collection { return - 创建集合() }发布资源 NFTMinter { pub var idCount:UInt64 初始化(){ 自己。idCount = 1 }酒吧乐趣 mintNFT () : @NFT { var newNFT - 创建 NFT ( initID: self.idCount ) 自己。idCount = 自我。idCount + 1 作为 UInt64 返回 -newNFT }}
首先,我们将有一个函数在调用时创建一个空的 NFT 集合。与合约交互的用户将拥有一个映射定义的 Collection 资源的存 储位置。 之后我们将再创建一个资源。没有它,我们就无法铸造代币。NFTMinter 包含一个每次都会增加的 idCount,以确保我们没 有 NFT 的重复 id。它还包含创建 NFT 的功能。 在 NFTMinter 资源下方添加主合约初始化程序:
初始化(){ 自己。帐户。保存( -self。createEmptyCollection () ,以便:/存储/ NFTCollection ) 自己。帐户。链接 { NFTReceiver } ( /public/NFTReceiver,target:/storage/NFTCollection ) 自己。帐户。保存( -create NFTMinter () ,以便:/存储/ NFTMinter ) }
初始化函数仅在部署合约时调用。它执行三件事:
· 为集合部署者创建一个空集合,以便所有者合约可以从合约中创建和拥有 NFT。
· NFTMinter 资源存储在合约创建者的帐户存储中。这意味着只有合约创建者才能铸造代币。
· Collection 资源参考开头创建的 NFTReceiver 接口发布在公共位置。这就是我们告诉合约任何人都可以调用 NFTReceiver 上定义的函数的方式。 一旦我们准备好合同,让我们部署它。
在部署之前:
在 Flow Playground 上进行测试。
转到 Flow Playground 并单击左侧边栏中的第一个帐户。
将所有代码替换为合约代码,然后单击部署。
如果一切顺利,您应该在屏幕底部查看日志: 16:48:55 部署 部署合约至:0x01 现在是时候将合约部署到本地运行的模拟器了,请运行以下命令: 流程项目启动模拟器 运行模拟器并配置 flow.json 文件后,可以使用以下命令部署合约: 流程项目部署 如果一切顺利,您应该查看如下输出: 为账户部署 1 个合约:emulator-account PinataPartyContract → 0xf8d6e0586b0a20c7
现在,我们将转向 NFT 的铸造。
责任编辑: