如何用用Python制作NFT區(qū)塊鏈作品
NFT英文全稱為Non-Fungible Token,翻譯成中文就是:非同質(zhì)化代幣,具有不可分割、不可替代、獨一無二等特點。NFT由于其非同質(zhì)化、不可拆分的特性,使得它可以和現(xiàn)實世界中的一些商品綁定。換言之,其實就是發(fā)行在區(qū)塊鏈上的數(shù)字資產(chǎn),這個資產(chǎn)可以是游戲道具、數(shù)字藝術(shù)品、門票等,并且具有唯一性和不可復(fù)制性。由于NFT具備天然的收藏屬性和便于交易,加密藝術(shù)家們可以利用NFT創(chuàng)造出獨一無二的數(shù)字藝術(shù)品。
ERC20 與 ERC721NFT 是類似于 ERC20 的區(qū)塊鏈token標(biāo)準(zhǔn),如 AAVE、SNX 和 LINK(技術(shù)上為 ERC677)。ERC20 是“可替代”的代幣,意思是“可替換”或“可互換”。
例如,無論您使用什么美元紙幣,您的美元紙幣都將值 1 美元。美元鈔票上的序列號可能不同,但鈔票是可以互換的,無論如何它們都值 1 美元。
另一方面,NFT 是“不可替代的”,它們遵循自己的代幣標(biāo)準(zhǔn) ERC721。例如,蒙娜麗莎是“不可替代的”。即使有人可以復(fù)制它,但永遠(yuǎn)只有一個蒙娜麗莎。如果蒙娜麗莎是在區(qū)塊鏈上創(chuàng)建的,它將是 NFT。
NFT 通過將合約永久地部署在鏈上,讓創(chuàng)作者、藝術(shù)家、游戲設(shè)計師等創(chuàng)造價值。
你將永遠(yuǎn)知道誰創(chuàng)造了 NFT,誰擁有 NFT,它來自哪里等等,這種獨特性讓他們比傳統(tǒng)藝術(shù)更有價值。在傳統(tǒng)藝術(shù)中,理解什么是“假貨”可能很棘手,而鏈上的歷史很容易追溯。
由于智能合約和 NFT 是 100% 可編程的,NFT 還可以添加內(nèi)置的版稅和任何其他功能。補償藝術(shù)家一直是一個問題,因為通常藝術(shù)家的作品在沒有任何歸屬的情況下四處傳播。
越來越多的藝術(shù)家和工程師開始利用這一巨大的附加值,因為這最終成為藝術(shù)家獲得工作報酬的好方法。不僅如此,NFT 還是一種展示您的創(chuàng)造力并成為數(shù)字世界收藏家的有趣方式。
NFT 的價值NFT 已經(jīng)走過了漫長的道路,我們不斷看到 NFT 的銷售額創(chuàng)下紀(jì)錄,例如下面這幅名為“每天:前 5,000 天”的畫作售價為 6930 萬美元。
NFT也是在數(shù)字世界中創(chuàng)造藝術(shù)和了解智能合約創(chuàng)建的一種有趣、動態(tài)和引人入勝的方式。所以現(xiàn)在將教你制作 NFT 所需的一切知識。
如何制作 NFT現(xiàn)在,制作 NFT 的最簡單方法就是前往 Opensea、Rarible 或 Mintible 等平臺,并按照他們的分步指南在他們的平臺上進(jìn)行部署即可。
你可以 100% 走這條路,但是你可能會被平臺綁定。你無法實現(xiàn)無限的定制,或者真正利用 NFT 的任何優(yōu)勢。
如果你想用代碼來實現(xiàn),學(xué)習(xí)一些扎實的知識,并有能力以無限的創(chuàng)造力創(chuàng)造出一些東西,那么請繼續(xù)閱讀!
如何進(jìn)行無限定制的 NFT首先介紹NFT Brownie Mix。這是一個包含大量樣板代碼的工作倉庫。
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 以太坊測試鏈上!
測試鏈?zhǔn)菧y試我們的智能合約在現(xiàn)實世界中表現(xiàn)的好方法。我們需要 Rinkeby ETH 和 Rinkeby LINK,我們可以從 Chainlink 文檔中最新水龍頭的鏈接中免費獲得它們。
我們還需要將 rinkeby LINK 的token添加到metamask中,我們可以按照 LINK 文檔進(jìn)行操作。
https://docs.chain.link/docs/acquire-link/
注意一定要使用 Rinkeby 而不是 Ropsten。在使用像以太坊這樣的智能合約平臺時,我們需要支付一點 ETH,而從鏈下獲取數(shù)據(jù)時,我們需要支付一點 LINK。這就是我們需要獲取測試鏈上的LINK 和 ETH 的原因。
下面這件作品就是我們要部署到 OpenSea 的 NFT。
https://testnets.opensea.io/assets/0x8acb7ca932892eb83e4411b59309d44dddbc4cdf/0
git clone https://github.com/PatrickAlphaC/nft-mixcd nft-mix
現(xiàn)在我們需要安裝 ganache-cli 和 eth-brownie。
pip install eth-brownienpm install -g ganache-cli
現(xiàn)在我們可以設(shè)置我們的環(huán)境變量。如果您不熟悉環(huán)境變量,只需將它們添加到 .env 文件中,然后運行:
source .env
.env的示例應(yīng)該在你剛剛克隆的 repo 中,并注釋掉了環(huán)境變量。請確保取消注釋以使用它們!
您需要一個 WEB3_INFURA_PROJECT_ID和一個 PRIVATE_KEY 。WEB3_INFURA_PROJECT_ID 可以在注冊免費 Infura 帳戶時找到。這將為我們提供一種將交易發(fā)送到區(qū)塊鏈的方法。
我們還需要一個私鑰,您可以從您的 Metamask 中獲取。點擊 3 個小點,然后單擊帳戶詳細(xì)信息和導(dǎo)出私鑰。如果您投入現(xiàn)金進(jìn)去,請不要與任何人分享此密鑰!
export PRIVATE_KEY=YOUR_KEY_HEREexport WEB3_INFURA_PROJECT_ID=YOUR_PROJECT_ID_HERE
現(xiàn)在我們可以部署我們的 NFT 合約并使用以下兩個命令創(chuàng)建我們的第一個收藏品。
brownie run scripts/simple_collectible/deploy_simple.py --network rinkebybrownie run scripts/simple_collectible/create_collectible.py --network rinkeby
第一個腳本將我們的 NFT 合約部署到 Rinkeby 區(qū)塊鏈,第二個腳本創(chuàng)建了我們的第一個收藏品。
您剛剛部署了第一個智能合約!
它根本沒有什么作用,但別擔(dān)心——我將在本教程的高級部分向您展示如何在 OpenSea 上渲染它。首先,讓我們看看 ERC721 代幣標(biāo)準(zhǔn)。
ERC721 代幣標(biāo)準(zhǔn)我們來看看我們剛剛部署的合約,在 SimpleCollectible.sol 文件中。
我們將 OpenZeplin 包用于 ERC721 token。導(dǎo)入的這個包允許我們使用典型 ERC721 token的所有功能。這定義了我們的代幣將具有的所有功能,例如 transfer——將代幣轉(zhuǎn)移給新用戶, safeMint——創(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òu)造函數(shù)會被自動調(diào)用,它需要一些參數(shù)。
我們還使用了 ERC721 的構(gòu)造函數(shù),在我們的構(gòu)造函數(shù)中,我們只需要給它一個名稱和一個符號。在我們的例子中,它是“Dogie”和“DOG”。這意味著我們創(chuàng)建的每個 NFT 都將是 Dogie/DOG 類型。
這就像每張口袋妖怪卡仍然是口袋妖怪,或者交易卡上的每個棒球運動員仍然是棒球運動員。每個棒球運動員都是獨一無二的,但他們?nèi)匀欢际前羟蜻\動員。我們只是使用 DOG 類型。
我們在頂部有 tokenCounter 來計算我們創(chuàng)建了多少這種類型的 NFT。每個新token都會根據(jù)當(dāng)前的 tokenCounter 獲得一個 tokenId。
實際上可以使用 createCollectible 函數(shù)創(chuàng)建 NFT。這就是我們在 create_collectible.py 腳本中所寫的。
_safeMint函數(shù)創(chuàng)建新的 NFT,并將其分配給調(diào)用 createdCollectible的人,也就是 msg.sender,并使用從 tokenCounter 派生的 newItemId。這就是我們?nèi)绾瓮ㄟ^檢查 tokenId的所有者來跟蹤誰擁有什么。
您會注意到我們還調(diào)用了 _setTokenURI。讓我們來看一下。
什么是 NFT 元數(shù)據(jù)和 TokenURI?當(dāng)創(chuàng)建智能合約和創(chuàng)建 NFT 時,人們很快意識到將大量數(shù)據(jù)部署到區(qū)塊鏈?zhǔn)欠浅0嘿F的。小至 1 KB 的圖像的存儲成本很容易超過 100 萬美元。
這顯然是 NFT 的一個問題,因為擁有創(chuàng)意藝術(shù)意味著您必須將這些信息存儲在某個地方。他們還想要一種輕量級的方式來存儲有關(guān) NFT 的屬性——這就是 tokenURI 和元數(shù)據(jù)發(fā)揮作用的地方。
TokenURINFT 上的 tokenURI 是token“外觀”的唯一標(biāo)識符。URI 可以是通過 HTTPS 的 API 調(diào)用、IPFS 哈希值或任何其他獨特的東西。
它們遵循顯示元數(shù)據(jù)的標(biāo)準(zhǔn),如下所示:
這些顯示了 NFT 的外觀及其屬性。圖像部分指向 NFT 外觀的另一個 URI。這使得 Opensea、Rarible 和 Mintable 等 NFT 平臺可以輕松地在其平臺上呈現(xiàn) NFT,因為它們都在尋找這種元數(shù)據(jù)。
鏈下元數(shù)據(jù)與鏈上元數(shù)據(jù)現(xiàn)在你可能會想“等等......如果元數(shù)據(jù)不在鏈上,這是否意味著我的 NFT 可能會在某個時候消失”?你是對的。
您認(rèn)為鏈下元數(shù)據(jù)意味著您不能使用該元數(shù)據(jù)讓您的智能合約相互交互也是正確的。
這就是為什么我們要專注于鏈上元數(shù)據(jù),以便我們可以對 NFT 進(jìn)行編程以相互交互。
但是,我們?nèi)匀恍枰溝略獢?shù)據(jù)的圖像部分,因為我們沒有一種很好的方法來在鏈上存儲大圖像。但是別擔(dān)心,我們?nèi)匀豢梢酝ㄟ^使用 IPFS 在去中心化網(wǎng)絡(luò)上免費做到這一點。
這是來自 IPFS 的 imageURI示例,它顯示了在龍與地下城教程中創(chuàng)建的 ChainlinkElf。
https://blog.chain.link/build-deploy-and-sell-your-own-dynamic-nft/
我們沒有為簡單的 NFT 設(shè)置 tokenURI,因為我們只想展示一個基本示例。
下一篇將講解 NFT 進(jìn)階知識,這樣就可以看到我們用鏈上元數(shù)據(jù)實現(xiàn)的一些驚人功能,在 opeansea 上渲染 NFT,并讓我們的狗狗振作起來!
以上就是如何用用Python制作NFT區(qū)塊鏈作品的詳細(xì)內(nèi)容,更多關(guān)于Python制作NFT區(qū)塊鏈作品的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
