目錄
- 什么是 NFT?
- ERC20 與 ERC721
- NFT 有什么用?
- NFT 的價值
- 如何制作 NFT
- 如何進行無限定制的 NFT
- 快速上手
- ERC721 代幣標準
- 什么是 NFT 元數(shù)據(jù)和 TokenURI?
- TokenURI
- 鏈下元數(shù)據(jù)與鏈上元數(shù)據(jù)
什么是 NFT?
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 與 ERC721
NFT 是類似于 ERC20 的區(qū)塊鏈token標準,如 AAVE、SNX 和 LINK(技術(shù)上為 ERC677)。ERC20 是“可替代”的代幣,意思是“可替換”或“可互換”。
例如,無論您使用什么美元紙幣,您的美元紙幣都將值 1 美元。美元鈔票上的序列號可能不同,但鈔票是可以互換的,無論如何它們都值 1 美元。
另一方面,NFT 是“不可替代的”,它們遵循自己的代幣標準 ERC721。例如,蒙娜麗莎是“不可替代的”。即使有人可以復(fù)制它,但永遠只有一個蒙娜麗莎。如果蒙娜麗莎是在區(qū)塊鏈上創(chuàng)建的,它將是 NFT。
NFT 有什么用?
NFT 通過將合約永久地部署在鏈上,讓創(chuàng)作者、藝術(shù)家、游戲設(shè)計師等創(chuàng)造價值。
你將永遠知道誰創(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)下紀錄,例如下面這幅名為“每天:前 5,000 天”的畫作售價為 6930 萬美元。
NFT也是在數(shù)字世界中創(chuàng)造藝術(shù)和了解智能合約創(chuàng)建的一種有趣、動態(tài)和引人入勝的方式。所以現(xiàn)在將教你制作 NFT 所需的一切知識。
如何制作 NFT
現(xiàn)在,制作 NFT 的最簡單方法就是前往 Opensea、Rarible 或 Mintible 等平臺,并按照他們的分步指南在他們的平臺上進行部署即可。
你可以 100% 走這條路,但是你可能會被平臺綁定。你無法實現(xiàn)無限的定制,或者真正利用 NFT 的任何優(yōu)勢。
如果你想用代碼來實現(xiàn),學(xué)習(xí)一些扎實的知識,并有能力以無限的創(chuàng)造力創(chuàng)造出一些東西,那么請繼續(xù)閱讀!
如何進行無限定制的 NFT
首先介紹NFT Brownie Mix。這是一個包含大量樣板代碼的工作倉庫。
https://github.com/PatrickAlphaC/nft-mix
先決條件
我們需要安裝一些東西才能開始:
- Python
- Nodejs 和 npm
- Metamask
如果您不熟悉 Metamask,您可以按照下面教程進行設(shè)置。
https://docs.chain.link/docs/install-metamask/
Rinkeby Testnet ETH 和 LINK
我們還將部署在 Rinkeby 以太坊測試鏈上!
測試鏈是測試我們的智能合約在現(xiàn)實世界中表現(xiàn)的好方法。我們需要 Rinkeby ETH 和 Rinkeby LINK,我們可以從 Chainlink 文檔中最新水龍頭的鏈接中免費獲得它們。
我們還需要將 rinkeby LINK 的token添加到metamask中,我們可以按照 LINK 文檔進行操作。
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-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 文件中,然后運行:
.env的示例應(yīng)該在你剛剛克隆的 repo 中,并注釋掉了環(huán)境變量。請確保取消注釋以使用它們!
您需要一個 WEB3_INFURA_PROJECT_ID和一個 PRIVATE_KEY 。WEB3_INFURA_PROJECT_ID 可以在注冊免費 Infura 帳戶時找到。這將為我們提供一種將交易發(fā)送到區(qū)塊鏈的方法。
我們還需要一個私鑰,您可以從您的 Metamask 中獲取。點擊 3 個小點,然后單擊帳戶詳細信息和導(dǎo)出私鑰。如果您投入現(xiàn)金進去,請不要與任何人分享此密鑰!
export
PRIVATE_KEY=YOUR_KEY_HERE
export
WEB3_INFURA_PROJECT_ID=YOUR_PROJECT_ID_HERE
現(xiàn)在我們可以部署我們的 NFT 合約并使用以下兩個命令創(chuàng)建我們的第一個收藏品。
brownie run scripts/simple_collectible/deploy_simple.py --network rinkeby
brownie run scripts/simple_collectible/create_collectible.py --network rinkeby
第一個腳本將我們的 NFT 合約部署到 Rinkeby 區(qū)塊鏈,第二個腳本創(chuàng)建了我們的第一個收藏品。
您剛剛部署了第一個智能合約!
它根本沒有什么作用,但別擔心——我將在本教程的高級部分向您展示如何在 OpenSea 上渲染它。首先,讓我們看看 ERC721 代幣標準。
ERC721 代幣標準
我們來看看我們剛剛部署的合約,在 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 繼承的方式。當我們部署一個合約時,構(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ù)當前的 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?
當創(chuàng)建智能合約和創(chuàng)建 NFT 時,人們很快意識到將大量數(shù)據(jù)部署到區(qū)塊鏈是非常昂貴的。小至 1 KB 的圖像的存儲成本很容易超過 100 萬美元。
這顯然是 NFT 的一個問題,因為擁有創(chuàng)意藝術(shù)意味著您必須將這些信息存儲在某個地方。他們還想要一種輕量級的方式來存儲有關(guān) NFT 的屬性——這就是 tokenURI 和元數(shù)據(jù)發(fā)揮作用的地方。
TokenURI
NFT 上的 tokenURI 是token“外觀”的唯一標識符。URI 可以是通過 HTTPS 的 API 調(diào)用、IPFS 哈希值或任何其他獨特的東西。
它們遵循顯示元數(shù)據(jù)的標準,如下所示:
這些顯示了 NFT 的外觀及其屬性。圖像部分指向 NFT 外觀的另一個 URI。這使得 Opensea、Rarible 和 Mintable 等 NFT 平臺可以輕松地在其平臺上呈現(xiàn) NFT,因為它們都在尋找這種元數(shù)據(jù)。
鏈下元數(shù)據(jù)與鏈上元數(shù)據(jù)
現(xiàn)在你可能會想“等等......如果元數(shù)據(jù)不在鏈上,這是否意味著我的 NFT 可能會在某個時候消失”?你是對的。
您認為鏈下元數(shù)據(jù)意味著您不能使用該元數(shù)據(jù)讓您的智能合約相互交互也是正確的。
這就是為什么我們要專注于鏈上元數(shù)據(jù),以便我們可以對 NFT 進行編程以相互交互。
但是,我們?nèi)匀恍枰溝略獢?shù)據(jù)的圖像部分,因為我們沒有一種很好的方法來在鏈上存儲大圖像。但是別擔心,我們?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 進階知識,這樣就可以看到我們用鏈上元數(shù)據(jù)實現(xiàn)的一些驚人功能,在 opeansea 上渲染 NFT,并讓我們的狗狗振作起來!
以上就是如何用用Python制作NFT區(qū)塊鏈作品的詳細內(nèi)容,更多關(guān)于Python制作NFT區(qū)塊鏈作品的資料請關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:- 詳解python實現(xiàn)簡單區(qū)塊鏈結(jié)構(gòu)
- python區(qū)塊及區(qū)塊鏈的開發(fā)詳解
- python簡單區(qū)塊鏈模擬詳解
- Python實現(xiàn)基于POS算法的區(qū)塊鏈
- Python實現(xiàn)類似比特幣的加密貨幣區(qū)塊鏈的創(chuàng)建與交易實例
- 使用Python從零開始擼一個區(qū)塊鏈
- Python從零開始創(chuàng)建區(qū)塊鏈
- 用不到50行的Python代碼構(gòu)建最小的區(qū)塊鏈
- Python學(xué)習(xí)入門之區(qū)塊鏈詳解