
原標題: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 的鑄造。
責任編輯: