亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

當(dāng)前位置:主頁 > 區(qū)塊鏈 > NFT > 用Flow和IPFS創(chuàng)建NFT

用Flow和IPFS創(chuàng)建NFT的合約和鑄造代幣操作教程

2021-03-18 11:42:42 | 來源:比特范 | 作者:佚名
這篇文章主要介紹了用Flow和IPFS創(chuàng)建NFT的合約和鑄造代幣操作教程,F(xiàn)low區(qū)塊鏈早期的主要應(yīng)用之一是NBA 巔峰對決(NBA Top Shot)。我們要重新建立一個(gè)非?;镜腘FT鑄幣過程,然后在IPFS上回溯NFT元數(shù)據(jù)和標(biāo)的資產(chǎn)。需要的朋友可以參考下。

非同質(zhì)化代幣(NFT)市場正在進(jìn)入狂熱,回顧 NFT 早期的發(fā)展歷程,回憶CryptoKitties所暴露出挑戰(zhàn)是很有意思的。CryptoKitties 由Dapper Labs的團(tuán)隊(duì)打造,是讓以太坊第一次出現(xiàn)“大規(guī)模”使用的案例。

從那之后,NFT 就開始成長之路,Rarible、OpenSea、Foundation、Sorare等平臺(tái)紛紛涌現(xiàn)。這些平臺(tái)每月都有數(shù)百萬元的流量。盡管磕磕碰碰,但大部分依舊在以太坊區(qū)塊鏈上發(fā)生著。但 Dapper Labs 的團(tuán)隊(duì)在經(jīng)歷了 CryptoKitties 之后,著手建立一個(gè)新的通用的,很適合 NFT 使用場景區(qū)塊鏈。他們這樣做的目標(biāo)是想解決在以太坊上看到的許多 NFT 的問題,同時(shí)為該領(lǐng)域的開發(fā)者和收藏者提供更好的體驗(yàn)。他們的新區(qū)塊鏈Flow,已經(jīng)證明了自己能夠落地,并吸引一些大牌。,如 NBA、UFC、甚至 Dr. Seuss 都在使用 Flow。

我們最近寫了使用 IPFS 上保存標(biāo)的資產(chǎn)來創(chuàng)建 NFT,并且討論 NFT 領(lǐng)域的責(zé)任問題,以及 IPFS 如何提供幫助?,F(xiàn)在,這篇文章談?wù)勅绾卧?Flow 上創(chuàng)建 IPFS 支持的 NFT。Flow 區(qū)塊鏈早期的主要應(yīng)用之一是NBA 巔峰對決 (NBA Top Shot)。我們要重新建立一個(gè)非?;镜?NFT 鑄幣過程,然后在 IPFS 上回溯 NFT 元數(shù)據(jù)和標(biāo)的資產(chǎn)。

由于我們喜歡 piñatas,所以我們的 NFT 將不再是 NBA 精彩的視頻,而是一個(gè)可交易的 piñatas 視頻。

用Flow和IPFS創(chuàng)建NFT的合約和鑄造代幣操作教程

本教程有 3 篇文章

創(chuàng)建合約和鑄造代幣(本文是第一篇)

創(chuàng)建一個(gè)應(yīng)用程序,以查看通過該合約創(chuàng)建的 NFT。

創(chuàng)建一個(gè)市場,將 NFT 轉(zhuǎn)讓給他人,同時(shí)也轉(zhuǎn)移在 IPFS 上的標(biāo)的資產(chǎn)。

用Flow和IPFS創(chuàng)建NFT的合約和鑄造代幣操作教程

環(huán)境設(shè)置

我們需要安裝 Flow CLI。在Flow 的文檔中有一些很好的安裝說明:

macOS

brew install flow-cli

Linux

sh -ci “$(curl -fsSL https://storage.googleapis.com/flow-cli/install.sh)"

Windows

iex “& { $(irm ‘https://storage.googleapis.com/flow-cli/install.ps1') }”

我們將在 IPFS 上存儲(chǔ)資產(chǎn)文件。我們使用Pinata來簡化操作, 可以在這里注冊一個(gè)免費(fèi)賬戶,獲取一個(gè)API 密鑰。在本教程的第二篇文章中會(huì)使用 Pinata API,但在本篇文章中我們使用 Pinata 網(wǎng)站。

我們還需要安裝 NodeJS 和一個(gè)文本編輯器,它可以幫助高亮顯示 Flow 智能合約(這是用一種叫做Cadence的語言編寫)代碼的語法。Visual Studio Code 有一個(gè)支持 Cadence 語法的插件。

讓我們?yōu)轫?xiàng)目創(chuàng)建一個(gè)目錄:

mkdir pinata-party

進(jìn)入該目錄,并初始化一個(gè)新的 flow 項(xiàng)目:

cd pinata-party

flow project init

現(xiàn)在,使用你最喜歡的代碼編輯器中打開項(xiàng)目(如果你使用 Visual Studio Code,可以安裝下 Cadence 插件),讓我們開始工作。

你會(huì)看到一個(gè)flow.json文件,我們很快就會(huì)用到它。首先,創(chuàng)建一個(gè)名為 cadence的文件夾。在該文件夾內(nèi),再添加一個(gè)名為 contracts的文件夾。最后,在 contracts文件夾中創(chuàng)建一個(gè)名為 PinataPartyContract.cdc的文件。

說明一下,我們現(xiàn)在所做的一切關(guān)于 Flow 區(qū)塊鏈的工作都將在模擬器上完成。但是,將一個(gè)項(xiàng)目部署到測試網(wǎng)或主網(wǎng),只需要更新flow.json文件中的配置這樣簡單。我們現(xiàn)在就把這個(gè)文件設(shè)置成模擬器環(huán)境,然后就可以開始寫我們的合約了。

更新flow.json中的合約對象,代碼如下:

"contracts": {

     "PinataPartyContract": "./cadence/contracts/PinataPartyContract.cdc"

}

然后,更新該文件中的 deployments對象,代碼如下:

"deployments": {

     "emulator": {

          "emulator-account": ["PinataPartyContract"]

     }

}

這是在告訴 Flow CLI 使用模擬器來部署我們的合約,它也在引用(在模擬器上)我們即將寫的合約 ...

合約

Flow 有一個(gè)關(guān)于創(chuàng)建 NFT 合約的出色教程。他是一個(gè)很好的參考,但是正如 Flow 自己指出的,他們還沒有解決 NFT 元數(shù)據(jù)的問題。他們希望在鏈上存儲(chǔ)元數(shù)據(jù)。這是個(gè)好主意,他們一定會(huì)想出一個(gè)合理的辦法來。然而,我們現(xiàn)在想要鑄造一些帶有元數(shù)據(jù)的代幣,并且我們想要關(guān)聯(lián)上對應(yīng)的媒體文件(標(biāo)的)。元數(shù)據(jù)只是其中一個(gè)組成部分。我們還需要指出代幣最終代表的媒體文件。

如果你熟悉以太坊區(qū)塊鏈上的 NFT,你可能會(huì)知道,許多代幣的標(biāo)的資產(chǎn)都存儲(chǔ)在傳統(tǒng)的云服務(wù)器上,這樣做是可以的,但又弊端。我們曾寫過關(guān)于IPFS內(nèi)容可尋址,以及在傳統(tǒng)云平臺(tái)上存儲(chǔ)區(qū)塊鏈數(shù)據(jù)的弊端,歸結(jié)起來主要有兩點(diǎn):

資產(chǎn)應(yīng)可核查

應(yīng)該很容易轉(zhuǎn)移維護(hù)責(zé)任

IPFS解決了這兩點(diǎn)。而 Pinata 則以一種簡單的方式將該內(nèi)容長期保存在 IPFS 上。這正是我們的 NFT 關(guān)聯(lián)的資料所需要的?我們要確保能夠證明擁有 NFT 的所有權(quán),并確保我們能控制對標(biāo)的資產(chǎn)(IPFS)--媒體文件或其他內(nèi)容,確保不是復(fù)制品。

考慮到這一點(diǎn),讓我們寫一份合約,它可以鑄造 NFT,將元數(shù)據(jù)關(guān)聯(lián)到 NFT,并確保元數(shù)據(jù)指向存儲(chǔ)在 IPFS 上的標(biāo)的資產(chǎn)。

打開PinataPartyContract.cdc,編寫一下代碼:

pub contract PinataPartyContract {

  pub resource NFT {

    pub let id: UInt64

    init(initID: UInt64) {

      self.id = initID

    }

  }

}

第一步是定義合約,后面會(huì)添加更多的內(nèi)容,但我們首先定義PinataPartyContract,并在其中創(chuàng)建一個(gè)resource。資源是存儲(chǔ)在用戶賬戶中并通過訪問控制措施進(jìn)行訪問。在這里,NFT資源最終用來代表 NFT 所擁有的東西。NFT 必須是唯一的,id屬性允許我們標(biāo)識代幣。

接下來,我們需要?jiǎng)?chuàng)建一個(gè)資源接口,我們將用它來定義哪些能力可以提供給其他人(即不是合約所有者)。

pub resource interface NFTReceiver {

  pub fun deposit(token: @NFT, metadata: )

  pub fun getIDs(): [UInt64]

  pub fun idExists(id: UInt64): Bool

  pub fun getMetadata(id: UInt64) : 

}

把這個(gè)代碼放在 NFT resource 代碼的下面。這個(gè)NFTReceiver資源接口用來定義對資源有訪問權(quán)的人,就可以調(diào)用以下方法:

deposit

getIDs

idExists

getMetadata

接下來,我們需要定義代幣收藏品( Colletion )接口。把它看成是存放用戶所有 NFT 的錢包。

pub resource Collection: NFTReceiver {

    pub var ownedNFT: @

    pub var metadataObjs: }

    init () {

        self.ownedNFT <- {}

        self.metadataObjs = {}

    }

    pub fun withdraw(withdrawID: UInt64): @NFT {

        let token <- self.ownedNFT.remove(key: withdrawID)!

        return <-token

    }

    pub fun deposit(token: @NFT, metadata: ) {

        self.ownedNFT[token.id] <-! token

    }

    pub fun idExists(id: UInt64): Bool {

        return self.ownedNFT[id] != nil

    }

    pub fun getIDs(): [UInt64] {

        return self.ownedNFT.keys

    }

    pub fun updateMetadata(id: UInt64, metadata: ) {

        self.metadataObjs[id] = metadata

    }

    pub fun getMetadata(id: UInt64):  {

        return self.metadataObjs[id]!

    }

    destroy() {

        destroy self.ownedNFT

    }

}

這個(gè)資源里有很多東西,說明一下。首先,有一個(gè)變量叫ownedNFT。這個(gè)是很直接的,它可以跟蹤用戶在這個(gè)合約中所有擁有的 NFT。

接下來,有一個(gè)變量叫metadataObjs。這個(gè)有點(diǎn)特殊,因?yàn)槲覀償U(kuò)展了 Flow NFT 合約功能,為每個(gè) NFT 存儲(chǔ)元數(shù)據(jù)的映射。這個(gè)變量將代幣 id 映射到其相關(guān)的元數(shù)據(jù)上,這意味著我們需要在設(shè)置代幣 id 之前,將其設(shè)置為元數(shù)據(jù)。

然后我們初始化變量。定義在 Flow 中的資源中的變量必需初始化。

最后,我們擁有了 NFT Collection 資源的所有可用函數(shù)。需要注意的是,并不是所有這些函數(shù)大家都可以調(diào)用。你還記得在前面,NFTReceiver資源接口中定義了任何人都可以訪問的函數(shù)。

我尤其想指出 deposit函數(shù)。正如我們擴(kuò)展了默認(rèn)的 Flow NFT 合約以包含 metadataObjs映射一樣,我們正在擴(kuò)展默認(rèn)的 deposit函數(shù),以接受額外的 metadata參數(shù)。為什么要在這里做這個(gè)?因?yàn)樾枰_保只有 token 的 minter 可以將該元數(shù)據(jù)添加到 token 中。為了保持這種私密性,將元數(shù)據(jù)的初始添加限制在鑄幣執(zhí)行中。

合約代碼就快完成了。因此,在 Collection資源的下面,添加以下內(nèi)容:

pub fun createEmptyCollection(): @Collection {

    return <- create Collection()

}

pub resource NFTMinter {

    pub var idCount: UInt64

    init() {

        self.idCount = 1

    }

    pub fun mintNFT(): @NFT {

        var newNFT <- create NFT(initID: self.idCount)

        self.idCount = self.idCount + 1 as UInt64

        return <-newNFT

    }

}

首先,我們有一個(gè)函數(shù),在調(diào)用時(shí)創(chuàng)建一個(gè)空的 NFT Collection。這就是第一次與合約進(jìn)行交互的用戶如何創(chuàng)建一個(gè)存儲(chǔ)位置,該位置映射到定義好的 Collection資源。

之后,我們再創(chuàng)建一個(gè)資源(resource)。它很重要的,因?yàn)闆]有它,我們就無法鑄造代幣。NFTMinter資源包括一個(gè)idCount,它是遞增的,以確保我們的 NFT 不會(huì)有重復(fù)的 id。它還有一個(gè)功能,用來創(chuàng)造 NFT。

在NFTMinter資源的下方,添加主合約初始化函數(shù);

init() {

      self.account.save(<-self.createEmptyCollection(), to: /storage/NFTCollection)

      self.account.link<&>(/public/NFTReceiver, target: /storage/NFTCollection)

      self.account.save(<-create NFTMinter(), to: /storage/NFTMinter)

}

這個(gè)初始化函數(shù)只有在合約部署時(shí)才會(huì)被調(diào)用。它有三個(gè)作用。

為收藏品(Collection)的部署者創(chuàng)建一個(gè)空的收藏品,這樣合約的所有者就可以從該合約中鑄造和擁有 NFT。

Collection資源發(fā)布在一個(gè)公共位置,并引用在一開始創(chuàng)建的NFTReceiver接口。通過這個(gè)方式告訴合約,在NFTReceiver上定義的函數(shù)可以被任何人調(diào)用。

NFTMinter資源被保存在賬戶存儲(chǔ)中,供合約的創(chuàng)建者使用。這意味著只有合約的創(chuàng)造者才能鑄造代幣。

合約全部代碼可在這里找到。

現(xiàn)在合約已經(jīng)準(zhǔn)備好了,讓我們來部署它,對嗎?我們也許應(yīng)該在Flow Playground上測試一下。到那里,點(diǎn)擊左側(cè)側(cè)欄的第一個(gè)賬號。將示例合約中的所有代碼替換為我們的合約代碼,然后點(diǎn)擊部署。如果一切順利,你應(yīng)該在屏幕底部的日志窗口中看到這樣的日志。

16:48:55 Deployment Deployed Contract To: 0x01

現(xiàn)在我們已經(jīng)準(zhǔn)備好將合約部署到本地運(yùn)行的模擬器上。在命令行中,運(yùn)行:

flow project start-emulator

現(xiàn)在,如果模擬器的運(yùn)行正確和flow.json文件的正確配置,我們可以部署合約。只需運(yùn)行這個(gè)命令:

flow project deploy

如果一切順利,你應(yīng)該看到這樣的輸出:

Deploying 1 contracts for accounts: emulator-accountPinataPartyContract -> 0xf8d6e0586b0a20c7

現(xiàn)在已經(jīng)在 Flow 模擬器上上線了一個(gè)合約,但我們想鑄造一個(gè) NFT 代幣。

鑄造 NFT

在教程的第二篇文章中,我們將通過一個(gè)應(yīng)用程序和用戶界面使鑄幣過程更加友好。為了看到所鑄造的內(nèi)容,并展示元數(shù)據(jù)如何在 Flow 上與 NFT 一起工作,我們將使用 Cadence 腳本和命令行。

在 pinata-party項(xiàng)目的根目錄下創(chuàng)建一個(gè)新的目錄,我們把它叫做 transactions。創(chuàng)建好文件夾,在里面創(chuàng)建一個(gè)名為MintPinataParty.cdc 的新文件。

為了編寫出交易,先需要提供給 NFT 的元數(shù)據(jù)一個(gè)引用文件。為此,我們將通過 Pinata 上傳一個(gè)文件到 IPFS。這個(gè)教程中,我將上傳一個(gè)孩子在生日派對上砸 pinata 的視頻。你可以上傳任何你想要的視頻文件。你真的可以上傳任何你喜歡的資產(chǎn)文件,并將其與你的 NFT 關(guān)聯(lián)起來,在本教程系列的第二篇文章將期待視頻內(nèi)容。一旦你準(zhǔn)備好你的視頻文件,在這里上傳。

當(dāng)你上傳文件后,你會(huì)得到一個(gè) IPFS 哈希(通常被稱為內(nèi)容標(biāo)識符或 CID)。復(fù)制這個(gè)哈希值,因?yàn)槲覀儗⒃阼T幣過程中使用它。

現(xiàn)在,在你的MintPinataParty.cdc文件中,添加以下內(nèi)容:

import PinataPartyContract from 0xf8d6e0586b0a20c7

transaction {

  let receiverRef: &

  let minterRef: &PinataPartyContract.NFTMinter

  prepare(acct: AuthAccount) {

      self.receiverRef = acct.getCapability<&>(/public/NFTReceiver)

          .borrow()

          ?? panic("Could not borrow receiver reference")

      self.minterRef = acct.borrow<&pinatapartycontract.nftminter>(from: /storage/NFTMinter)

          ?? panic("could not borrow minter reference")

  }

  execute {

      let metadata :  = {

          "name": "The Big Swing",

          "swing_velocity": "29",

          "swing_angle": "45",

          "rating": "5",

          "uri": "ipfs://QmRZdc3mAMXpv6Akz9Ekp1y4vDSjazTx2dCQRkxVy1yUj6"

      }

      let newNFT <- self.minterRef.mintNFT()

      self.receiverRef.deposit(token: <-newNFT, metadata: metadata)

      log("NFT Minted and deposited to Account 2's Collection")

  }

}

這是一個(gè)非常簡單的交易代碼,這在很大程度上要?dú)w功于 Flow 所做的工作,但讓我們來看看它。首先,你會(huì)注意到頂部的導(dǎo)入語句。如果你還記得,在部署合約時(shí),我們收到了一個(gè)賬戶地址。它就是這里引用的內(nèi)容。因此,將0xf8d6e0586b0a20c7替換為你部署的賬戶地址。

接下來我們對交易進(jìn)行定義。在我們的交易中,我們首先要做的是定義兩個(gè)參考變量,receiverRef和minterRef。在這種情況下,我們既是 NFT 的接收者,又是 NFT 的挖掘者。這兩個(gè)變量是引用我們在合約中創(chuàng)建的資源。如果執(zhí)行交易的人對資源沒有訪問權(quán),交易將失敗。

接下來,我們有一個(gè)prepare函數(shù)。該函數(shù)獲取試圖執(zhí)行交易的人的賬戶信息并進(jìn)行一些驗(yàn)證。它會(huì)嘗試 借用兩個(gè)資源 NFTMinter和 NFTReceiver上的可用能力。如果執(zhí)行交易的人沒有訪問這些資源的權(quán)限,驗(yàn)證無法通過,這就是交易會(huì)失敗的原因。

最后是execute函數(shù)。這個(gè)函數(shù)是為我們的 NFT 建立元數(shù)據(jù),鑄造 NFT,然后在將 NFT 存入賬戶之前關(guān)聯(lián)元數(shù)據(jù)。如果你注意到,我創(chuàng)建了一個(gè)元數(shù)據(jù)變量。在這個(gè)變量中,添加了一些關(guān)于 token 的信息。由于我們的代幣代表的是一個(gè)事件,即一個(gè) piñata 在派對上被打碎,并且因?yàn)槲覀冊噲D復(fù)制你在 NBA Top Shot 中看到的大部分內(nèi)容,所以我在元數(shù)據(jù)中定義了一些統(tǒng)計(jì)數(shù)據(jù)。孩子揮棒打 piñata 的速度,揮棒的角度和等級。我只是覺得這些統(tǒng)計(jì)數(shù)字有意思。你可以用類似的方式為你的代幣定義任何有意義的信息。

你會(huì)注意到,我還在元數(shù)據(jù)中定義了一個(gè)uri屬性。這將指向 IPFS 哈希,它承載著我們與 NFT 相關(guān)的標(biāo)的資產(chǎn)文件。在這種情況下,它是 piñata 被擊中的真實(shí)視頻。你可以用你之前上傳文件后收到的哈希值來替換。

我們用ipfs://作為哈希的前綴,有幾個(gè)原因。這是 IPFS 上文件的標(biāo)識符,可以使用 IPFS 的桌面客戶端和瀏覽器擴(kuò)展。也可以直接粘貼到 Brave 瀏覽器中(Brave 瀏覽器現(xiàn)在提供了對 IPFS 內(nèi)容的原生支持)。

調(diào)用 mintNFT函數(shù)來創(chuàng)建代幣。然后調(diào)用deposit函數(shù)將其存入我們的賬戶。這也是我們傳遞元數(shù)據(jù)的地方。如果你還記得,我們在 deposit函數(shù)中定義了一個(gè)關(guān)聯(lián)變量,將元數(shù)據(jù)添加到關(guān)聯(lián)的 token id 中。

最后,我們只需要日志記錄代幣已被鑄造和存入賬戶的信息。

現(xiàn)在我們差不多可以執(zhí)行代碼發(fā)送交易鑄造 NFT 了。但首先,我們需要準(zhǔn)備好我們的賬戶。在項(xiàng)目根目錄下的命令行中,創(chuàng)建一個(gè)新的簽名私鑰。

運(yùn)行以下命令。

flow keys generate

這將返回你一個(gè)公鑰和一個(gè)私鑰, 請始終保護(hù)好你的私鑰。

我們將需要私鑰來簽署交易,所以我們可以把它粘貼到flow.json文件中。我們還需要指定簽名算法。下面是flow.json文件中的accounts 的內(nèi)容:

"accounts": {

  "emulator-account": {

     "address": "YOUR ACCOUNT ADDRESS",

     "privateKey": "YOUR PRIVATE KEY",

     "chain": "flow-emulator",

     "sigAlgorithm": "ECDSA_P256",

     "hashAlgorithm": "SHA3_256"

  }

},

如果你打算在 github 或任何遠(yuǎn)程 git 倉庫上存儲(chǔ)這個(gè)項(xiàng)目的任何內(nèi)容,請確保你不包含私鑰。你可能想.gitignore你的整個(gè)flow.json。盡管我們只是使用本地模擬器,但保護(hù)你的密鑰是個(gè)好做法。

現(xiàn)在可以發(fā)送交易,簡單的運(yùn)行這個(gè)命令:

flow transactions send --code ./transactions/MintPinataParty.cdc --signer emulator-account

在flow.json中引用編寫的交易代碼文件和簽名賬戶。如果一切順利,你應(yīng)該看到這樣的輸出:

Getting information for account with address 0xf8d6e0586b0a20c7 ...

Submitting transaction with ID 4a79102747a450f65b6aab06a77161af196c3f7151b2400b3b3d09ade3b69823 ...

Successfully submitted transaction with ID 4a79102747a450f65b6aab06a77161af196c3f7151b2400b3b3d09ade3b69823

最后,驗(yàn)證 token 是否在我們的賬戶中,并獲取元數(shù)據(jù)。做到這一點(diǎn),我們要寫一個(gè)非常簡單的腳本,并從命令行調(diào)用它。

在項(xiàng)目根目錄,創(chuàng)建一個(gè)名為 scripts的新文件夾。在里面,創(chuàng)建一個(gè)名為CheckTokenMetadata.cdc的文件。在該文件中,添加以下內(nèi)容:

import PinataPartyContract from 0xf8d6e0586b0a20c7

pub fun main() :  {

    let nftOwner = getAccount(0xf8d6e0586b0a20c7)

    // log("NFT Owner")

    let capability = nftOwner.getCapability<&>(/public/NFTReceiver)

    let receiverRef = capability.borrow()

        ?? panic("Could not borrow the receiver reference")

    return receiverRef.getMetadata(id: 1)

}

這個(gè)腳本可以被認(rèn)為是類似于以太坊智能合約上調(diào)用只讀方法。它們是免費(fèi)的,只返回合約中的數(shù)據(jù)。

在腳本中,導(dǎo)入部署的合約地址。然后定義一個(gè) main函數(shù)(這是腳本運(yùn)行所需的函數(shù)名)。在這個(gè)函數(shù)里面,我們定義了三個(gè)變量:

nftOwner:擁有 NFT 的賬戶。由于使用部署了合約的賬戶中鑄造了 NFT,所以在我們的例子中,這兩個(gè)地址是一樣的。這一點(diǎn)不一定,要看你將來的合約設(shè)計(jì)。

capability:需要從部署的合約中 借用的能力(或功能)。請記住,這些能力是受訪問控制的,所以如果一個(gè)能力對試圖借用它的地址不可用,腳本就會(huì)失敗。我們正在從NFTReceiver資源中借用能力。

receiverRef:這個(gè)變量只是簡單地記錄我們的能力。

現(xiàn)在,我們可以調(diào)用(可用的)函數(shù)。在這種情況下,我們要確保相關(guān)地址確實(shí)已經(jīng)收到了我們鑄造的 NFT,然后我們要查看與代幣相關(guān)的元數(shù)據(jù)。

讓我們運(yùn)行的腳本,看看得到了什么。在命令行中運(yùn)行以下內(nèi)容:

flow scripts execute ./scripts/CheckTokenMetadata.cdc

你應(yīng)該會(huì)看到元數(shù)據(jù)輸出的類似這樣的輸出。

{"name": "The Big Swing", "swing_velocity": "29", "swing_angle": "45", "rating": "5", "uri": "ipfs://QmRZdc3mAMXpv6Akz9Ekp1y4vDSjazTx2dCQRkxVy1yUj6"}

恭喜你!你成功創(chuàng)建了一個(gè) Flow 智能合約,鑄造了一個(gè)代幣,并將元數(shù)據(jù)關(guān)聯(lián)到該代幣,并將該代幣的底層數(shù)字資產(chǎn)存儲(chǔ)在 IPFS 上。作為教程的第一部分,還算不錯(cuò)。

接下來,我們有一個(gè)關(guān)于構(gòu)建前端 React 應(yīng)用的教程,通過獲取元數(shù)據(jù)和解析元數(shù)據(jù),讓你顯示你的 NFT。

本翻譯由Cell Network贊助支持。

來源:

https://medium.com/pinata/how-to-create-nfts-like-nba-top-shot-with-flow-and-ipfs-701296944bf

以上就是用Flow和IPFS創(chuàng)建NFT的操作教程的詳細(xì)內(nèi)容,更多關(guān)于用Flow和IPFS創(chuàng)建NFT的資料請關(guān)注腳本之家其它相關(guān)文章!

聲明:文章內(nèi)容不代表本站觀點(diǎn)及立場,不構(gòu)成本平臺(tái)任何投資建議。本文內(nèi)容僅供參考,風(fēng)險(xiǎn)自擔(dān)!

你可能感興趣的文章

幣圈快訊

  • 美SEC發(fā)布證券代幣化聲明

    2025-07-10 01:02
    ChainCatcher消息,據(jù)美SEC發(fā)布關(guān)于證券代幣化聲明,表示區(qū)塊鏈技術(shù)為以「代幣化」形式發(fā)行和交易證券開辟了新的模式。代幣化有可能促進(jìn)資本形成,并提升投資者將其資產(chǎn)用作抵押品的能力。受這些可能性的吸引,越來越多的新興參與者和傳統(tǒng)機(jī)構(gòu)正在積極擁抱鏈上產(chǎn)品。然而,盡管區(qū)塊鏈技術(shù)極具潛力,它并不具備「魔法」來改變基礎(chǔ)資產(chǎn)的本質(zhì)。被代幣化的證券依然是證券。因此,市場參與者在交易此類工具時(shí),必須認(rèn)真考量并遵守聯(lián)邦證券法的相關(guān)規(guī)定。 有時(shí),發(fā)行方會(huì)對自身證券進(jìn)行代幣化。購買此類第三方代幣的投資者可能面臨一些特有風(fēng)險(xiǎn),例如對手方風(fēng)險(xiǎn)。代幣化證券的發(fā)行方還必須考慮在聯(lián)邦證券法下的信息披露義務(wù),并可參考美國證監(jiān)會(huì)公司財(cái)務(wù)部近期發(fā)布的相關(guān)員工聲明。 同時(shí),那些發(fā)行、購買及交易代幣化證券的市場參與者,也應(yīng)考慮這些證券的屬性及其所引發(fā)的證券法合規(guī)問題。雖然基于區(qū)塊鏈的代幣化是一項(xiàng)新興技術(shù),但「發(fā)行代表證券權(quán)利的金融工具」這一行為本身并不新穎。無論是在鏈上還是鏈下發(fā)行此類工具,適用的法律要求都是相同的。因此,市場參與者在設(shè)計(jì)其代幣化產(chǎn)品方案時(shí),應(yīng)考慮與美國證監(jiān)會(huì)(SEC)及其工作人員進(jìn)行溝通,我們愿意與市場參與者合作,制定合理的豁免機(jī)制,并推動(dòng)規(guī)則現(xiàn)代化。
  • LondonBTCCompanyLimited正籌集100萬至500萬英鎊,部分將用于增持比特幣

    2025-07-10 00:57
    ChainCatcher消息,據(jù)市場消息,LondonBTCCompanyLimited(原名VinanzLimited)正在籌集100萬至500萬英鎊(最高約合680萬美元)資金,其中部分將用于增持比特幣。
  • 慢霧:GMX遭攻擊核心原因系GMXv1全局空頭均價(jià)可被操控,GLP價(jià)格遭惡意抬高套利

    2025-07-10 00:54
    ChainCatcher消息,據(jù)慢霧CISO@im23pds發(fā)推表示,「GMX被攻擊的根本原因是GMXv1在處理空頭頭寸時(shí)會(huì)立即更新全局空頭平局價(jià)格,而這個(gè)全局平局價(jià)格將直接影響總資產(chǎn)規(guī)模(AUM)的計(jì)算,進(jìn)而導(dǎo)致GLP代幣價(jià)格被操控。 攻擊者利用這個(gè)設(shè)計(jì)缺陷通過Keeper在執(zhí)行訂單時(shí)會(huì)啟用timelock.enableLeverage的特性(創(chuàng)建大額空單的必要條件),通過重入的方式成功創(chuàng)建大額空頭頭寸操縱全局平均價(jià)格,以在單筆交易中人為抬高GLP價(jià)格并通過贖回操作獲利。
  • 分析:特朗普關(guān)于美聯(lián)儲(chǔ)需要降息的觀點(diǎn)是正確的

    2025-07-10 00:51
    金色財(cái)經(jīng)報(bào)道,投資銀行PiperSandler表示,美國總統(tǒng)特朗普關(guān)于美聯(lián)儲(chǔ)需要降息的觀點(diǎn)是正確的。
  • OpenAI開放語言模型即將問世

    2025-07-10 00:47
    ChainCatcher消息,據(jù)美國科技媒體TheVerge報(bào)道,微軟(MSFT.O)與OpenAI的復(fù)雜關(guān)系即將迎來戲劇性轉(zhuǎn)折。就在雙方重新協(xié)商合同以允許OpenAI重組為營利性公司之際,OpenAI正準(zhǔn)備發(fā)布一款開放語言模型,這可能進(jìn)一步加劇兩家公司的裂痕。 知情人士透露,薩姆·奧爾特曼領(lǐng)導(dǎo)的這家AI實(shí)驗(yàn)室即將在下周發(fā)布開放權(quán)重模型,該模型不僅會(huì)登陸OpenAI和微軟Azure服務(wù)器,還將向其他云服務(wù)商開放。與OpenAI通常采用的封閉權(quán)重模式不同,此次公開的權(quán)重參數(shù)(一種訓(xùn)練參數(shù))將向公眾開放,這種開放性意味著企業(yè)和政府能夠自主部署該模型。(金十)
  • 查看更多