溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么使用Python制作NFT區(qū)塊鏈作品

發(fā)布時(shí)間:2021-06-16 13:48:33 來源:億速云 閱讀:408 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹怎么使用Python制作NFT區(qū)塊鏈作品,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

目錄
  • 什么是 NFT?

  • ERC20 與 ERC721

  • NFT 有什么用?

  • NFT 的價(jià)值

  • 如何制作 NFT

  • 如何進(jìn)行無限定制的 NFT

  • 快速上手

  • ERC721 代幣標(biāo)準(zhǔn)

  • 什么是 NFT 元數(shù)據(jù)和 TokenURI?

  • TokenURI

  • 鏈下元數(shù)據(jù)與鏈上元數(shù)據(jù)

什么是 NFT?

NFT英文全稱為Non-Fungible Token,翻譯成中文就是:非同質(zhì)化代幣,具有不可分割、不可替代、獨(dú)一無二等特點(diǎn)。NFT由于其非同質(zhì)化、不可拆分的特性,使得它可以和現(xiàn)實(shí)世界中的一些商品綁定。換言之,其實(shí)就是發(fā)行在區(qū)塊鏈上的數(shù)字資產(chǎn),這個(gè)資產(chǎn)可以是游戲道具、數(shù)字藝術(shù)品、門票等,并且具有唯一性和不可復(fù)制性。由于NFT具備天然的收藏屬性和便于交易,加密藝術(shù)家們可以利用NFT創(chuàng)造出獨(dú)一無二的數(shù)字藝術(shù)品。

ERC20 與 ERC721

NFT 是類似于 ERC20 的區(qū)塊鏈token標(biāo)準(zhǔn),如 AAVE、SNX 和 LINK(技術(shù)上為 ERC677)。ERC20 是“可替代”的代幣,意思是“可替換”或“可互換”。

例如,無論您使用什么美元紙幣,您的美元紙幣都將值 1 美元。美元鈔票上的序列號(hào)可能不同,但鈔票是可以互換的,無論如何它們都值 1 美元。

另一方面,NFT 是“不可替代的”,它們遵循自己的代幣標(biāo)準(zhǔn) ERC721。例如,蒙娜麗莎是“不可替代的”。即使有人可以復(fù)制它,但永遠(yuǎn)只有一個(gè)蒙娜麗莎。如果蒙娜麗莎是在區(qū)塊鏈上創(chuàng)建的,它將是 NFT。

怎么使用Python制作NFT區(qū)塊鏈作品

NFT 有什么用?

NFT 通過將合約永久地部署在鏈上,讓創(chuàng)作者、藝術(shù)家、游戲設(shè)計(jì)師等創(chuàng)造價(jià)值。

你將永遠(yuǎn)知道誰創(chuàng)造了 NFT,誰擁有 NFT,它來自哪里等等,這種獨(dú)特性讓他們比傳統(tǒng)藝術(shù)更有價(jià)值。在傳統(tǒng)藝術(shù)中,理解什么是“假貨”可能很棘手,而鏈上的歷史很容易追溯。

由于智能合約和 NFT 是 100% 可編程的,NFT 還可以添加內(nèi)置的版稅和任何其他功能。補(bǔ)償藝術(shù)家一直是一個(gè)問題,因?yàn)橥ǔK囆g(shù)家的作品在沒有任何歸屬的情況下四處傳播。

越來越多的藝術(shù)家和工程師開始利用這一巨大的附加值,因?yàn)檫@最終成為藝術(shù)家獲得工作報(bào)酬的好方法。不僅如此,NFT 還是一種展示您的創(chuàng)造力并成為數(shù)字世界收藏家的有趣方式。

NFT 的價(jià)值

NFT 已經(jīng)走過了漫長的道路,我們不斷看到 NFT 的銷售額創(chuàng)下紀(jì)錄,例如下面這幅名為“每天:前 5,000 天”的畫作售價(jià)為 6930 萬美元。

怎么使用Python制作NFT區(qū)塊鏈作品

NFT也是在數(shù)字世界中創(chuàng)造藝術(shù)和了解智能合約創(chuàng)建的一種有趣、動(dòng)態(tài)和引人入勝的方式。所以現(xiàn)在將教你制作 NFT 所需的一切知識(shí)。

如何制作 NFT

現(xiàn)在,制作 NFT 的最簡單方法就是前往 Opensea、Rarible 或 Mintible 等平臺(tái),并按照他們的分步指南在他們的平臺(tái)上進(jìn)行部署即可。

你可以 100% 走這條路,但是你可能會(huì)被平臺(tái)綁定。你無法實(shí)現(xiàn)無限的定制,或者真正利用 NFT 的任何優(yōu)勢(shì)。

如果你想用代碼來實(shí)現(xiàn),學(xué)習(xí)一些扎實(shí)的知識(shí),并有能力以無限的創(chuàng)造力創(chuàng)造出一些東西,那么請(qǐng)繼續(xù)閱讀!

如何進(jìn)行無限定制的 NFT

首先介紹NFT Brownie Mix。這是一個(gè)包含大量樣板代碼的工作倉庫。

https://github.com/PatrickAlphaC/nft-mix

先決條件

我們需要安裝一些東西才能開始:

  • Python

  • Nodejs 和 npm

  • Metamask

如果您不熟悉 Metamask,您可以按照下面教程進(jìn)行設(shè)置。

https://docs.chain.link/docs/install-metamask/

Rinkeby Testnet ETH 和 LINK

我們還將部署在 Rinkeby 以太坊測(cè)試鏈上!

測(cè)試鏈?zhǔn)菧y(cè)試我們的智能合約在現(xiàn)實(shí)世界中表現(xiàn)的好方法。我們需要 Rinkeby ETH 和 Rinkeby LINK,我們可以從 Chainlink 文檔中最新水龍頭的鏈接中免費(fèi)獲得它們。

我們還需要將 rinkeby LINK 的token添加到metamask中,我們可以按照 LINK 文檔進(jìn)行操作。

https://docs.chain.link/docs/acquire-link/

注意一定要使用 Rinkeby 而不是 Ropsten。在使用像以太坊這樣的智能合約平臺(tái)時(shí),我們需要支付一點(diǎn) ETH,而從鏈下獲取數(shù)據(jù)時(shí),我們需要支付一點(diǎn) LINK。這就是我們需要獲取測(cè)試鏈上的LINK 和 ETH 的原因。

下面這件作品就是我們要部署到 OpenSea 的 NFT。

https://testnets.opensea.io/assets/0x8acb7ca932892eb83e4411b59309d44dddbc4cdf/0

怎么使用Python制作NFT區(qū)塊鏈作品

快速上手

git clone https:
//github.com/PatrickAlphaC/nft-mix

cd nft-mix

現(xiàn)在我們需要安裝 ganache-cli 和 eth-brownie。

pip install eth-brownie

npm install -g ganache-cli

現(xiàn)在我們可以設(shè)置我們的環(huán)境變量。如果您不熟悉環(huán)境變量,只需將它們添加到 .env 文件中,然后運(yùn)行:

source .env

.env的示例應(yīng)該在你剛剛克隆的 repo 中,并注釋掉了環(huán)境變量。請(qǐng)確保取消注釋以使用它們!

您需要一個(gè) WEB3_INFURA_PROJECT_ID和一個(gè) PRIVATE_KEY 。WEB3_INFURA_PROJECT_ID 可以在注冊(cè)免費(fèi) Infura 帳戶時(shí)找到。這將為我們提供一種將交易發(fā)送到區(qū)塊鏈的方法。

我們還需要一個(gè)私鑰,您可以從您的 Metamask 中獲取。點(diǎn)擊 3 個(gè)小點(diǎn),然后單擊帳戶詳細(xì)信息和導(dǎo)出私鑰。如果您投入現(xiàn)金進(jìn)去,請(qǐng)不要與任何人分享此密鑰!

export
 PRIVATE_KEY=YOUR_KEY_HERE

export
 WEB3_INFURA_PROJECT_ID=YOUR_PROJECT_ID_HERE

現(xiàn)在我們可以部署我們的 NFT 合約并使用以下兩個(gè)命令創(chuàng)建我們的第一個(gè)收藏品。

brownie run scripts/simple_collectible/deploy_simple.py --network rinkeby

brownie run scripts/simple_collectible/create_collectible.py --network rinkeby

第一個(gè)腳本將我們的 NFT 合約部署到 Rinkeby 區(qū)塊鏈,第二個(gè)腳本創(chuàng)建了我們的第一個(gè)收藏品。

您剛剛部署了第一個(gè)智能合約!

它根本沒有什么作用,但別擔(dān)心——我將在本教程的高級(jí)部分向您展示如何在 OpenSea 上渲染它。首先,讓我們看看 ERC721 代幣標(biāo)準(zhǔn)。

ERC721 代幣標(biāo)準(zhǔn)

我們來看看我們剛剛部署的合約,在 SimpleCollectible.sol 文件中。

怎么使用Python制作NFT區(qū)塊鏈作品

我們將 OpenZeplin 包用于 ERC721 token。導(dǎo)入的這個(gè)包允許我們使用典型 ERC721 token的所有功能。這定義了我們的代幣將具有的所有功能,例如 transfer——將代幣轉(zhuǎn)移給新用戶, safeMint——?jiǎng)?chuàng)建新代幣,等等。

您可以通過查看 OpenZepplin ERC721 代幣合約找到賦予我們合約的所有功能。我們的合約在下面一行繼承了這些功能:

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol

contract SimpleCollectible is ERC721 {

這就是 Solidity 繼承的方式。當(dāng)我們部署一個(gè)合約時(shí),構(gòu)造函數(shù)會(huì)被自動(dòng)調(diào)用,它需要一些參數(shù)。

怎么使用Python制作NFT區(qū)塊鏈作品

我們還使用了 ERC721 的構(gòu)造函數(shù),在我們的構(gòu)造函數(shù)中,我們只需要給它一個(gè)名稱和一個(gè)符號(hào)。在我們的例子中,它是“Dogie”和“DOG”。這意味著我們創(chuàng)建的每個(gè) NFT 都將是 Dogie/DOG 類型。

這就像每張口袋妖怪卡仍然是口袋妖怪,或者交易卡上的每個(gè)棒球運(yùn)動(dòng)員仍然是棒球運(yùn)動(dòng)員。每個(gè)棒球運(yùn)動(dòng)員都是獨(dú)一無二的,但他們?nèi)匀欢际前羟蜻\(yùn)動(dòng)員。我們只是使用 DOG 類型。

我們?cè)陧敳坑?tokenCounter 來計(jì)算我們創(chuàng)建了多少這種類型的 NFT。每個(gè)新token都會(huì)根據(jù)當(dāng)前的 tokenCounter 獲得一個(gè) tokenId。

實(shí)際上可以使用 createCollectible 函數(shù)創(chuàng)建 NFT。這就是我們?cè)?create_collectible.py 腳本中所寫的。

怎么使用Python制作NFT區(qū)塊鏈作品

_safeMint函數(shù)創(chuàng)建新的 NFT,并將其分配給調(diào)用 createdCollectible的人,也就是 msg.sender,并使用從 tokenCounter 派生的 newItemId。這就是我們?nèi)绾瓮ㄟ^檢查 tokenId的所有者來跟蹤誰擁有什么。

您會(huì)注意到我們還調(diào)用了 _setTokenURI。讓我們來看一下。

什么是 NFT 元數(shù)據(jù)和 TokenURI?

當(dāng)創(chuàng)建智能合約和創(chuàng)建 NFT 時(shí),人們很快意識(shí)到將大量數(shù)據(jù)部署到區(qū)塊鏈?zhǔn)欠浅0嘿F的。小至 1 KB 的圖像的存儲(chǔ)成本很容易超過 100 萬美元。

這顯然是 NFT 的一個(gè)問題,因?yàn)閾碛袆?chuàng)意藝術(shù)意味著您必須將這些信息存儲(chǔ)在某個(gè)地方。他們還想要一種輕量級(jí)的方式來存儲(chǔ)有關(guān) NFT 的屬性——這就是 tokenURI 和元數(shù)據(jù)發(fā)揮作用的地方。

TokenURI

NFT 上的 tokenURI 是token“外觀”的唯一標(biāo)識(shí)符。URI 可以是通過 HTTPS 的 API 調(diào)用、IPFS 哈希值或任何其他獨(dú)特的東西。

它們遵循顯示元數(shù)據(jù)的標(biāo)準(zhǔn),如下所示:

怎么使用Python制作NFT區(qū)塊鏈作品

這些顯示了 NFT 的外觀及其屬性。圖像部分指向 NFT 外觀的另一個(gè) URI。這使得 Opensea、Rarible 和 Mintable 等 NFT 平臺(tái)可以輕松地在其平臺(tái)上呈現(xiàn) NFT,因?yàn)樗鼈兌荚趯ふ疫@種元數(shù)據(jù)。

鏈下元數(shù)據(jù)與鏈上元數(shù)據(jù)

現(xiàn)在你可能會(huì)想“等等......如果元數(shù)據(jù)不在鏈上,這是否意味著我的 NFT 可能會(huì)在某個(gè)時(shí)候消失”?你是對(duì)的。

您認(rèn)為鏈下元數(shù)據(jù)意味著您不能使用該元數(shù)據(jù)讓您的智能合約相互交互也是正確的。

這就是為什么我們要專注于鏈上元數(shù)據(jù),以便我們可以對(duì) NFT 進(jìn)行編程以相互交互。

但是,我們?nèi)匀恍枰溝略獢?shù)據(jù)的圖像部分,因?yàn)槲覀儧]有一種很好的方法來在鏈上存儲(chǔ)大圖像。但是別擔(dān)心,我們?nèi)匀豢梢酝ㄟ^使用 IPFS 在去中心化網(wǎng)絡(luò)上免費(fèi)做到這一點(diǎn)。

這是來自 IPFS 的 imageURI示例,它顯示了在龍與地下城教程中創(chuàng)建的 ChainlinkElf。

https://blog.chain.link/build-deploy-and-sell-your-own-dynamic-nft/

怎么使用Python制作NFT區(qū)塊鏈作品

我們沒有為簡單的 NFT 設(shè)置 tokenURI,因?yàn)槲覀冎幌胝故疽粋€(gè)基本示例。

以上是“怎么使用Python制作NFT區(qū)塊鏈作品”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI