如何用用Python制作NFT區塊鏈作品

什麼是 NFT?

NFT英文全稱為Non-Fungible Token,翻譯成中文就是:非同質化代幣,具有不可分割、不可替代、獨一無二等特點。NFT由於其非同質化、不可拆分的特性,使得它可以和現實世界中的一些商品綁定。換言之,其實就是發行在區塊鏈上的數字資產,這個資產可以是遊戲道具、數字藝術品、門票等,並且具有唯一性和不可復制性。由於NFT具備天然的收藏屬性和便於交易,加密藝術傢們可以利用NFT創造出獨一無二的數字藝術品。

ERC20 與 ERC721

NFT 是類似於 ERC20 的區塊鏈token標準,如 AAVE、SNX 和 LINK(技術上為 ERC677)。ERC20 是“可替代”的代幣,意思是“可替換”或“可互換”。

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

另一方面,NFT 是“不可替代的”,它們遵循自己的代幣標準 ERC721。例如,蒙娜麗莎是“不可替代的”。即使有人可以復制它,但永遠隻有一個蒙娜麗莎。如果蒙娜麗莎是在區塊鏈上創建的,它將是 NFT。

NFT 有什麼用?

NFT 通過將合約永久地部署在鏈上,讓創作者、藝術傢、遊戲設計師等創造價值。

你將永遠知道誰創造瞭 NFT,誰擁有 NFT,它來自哪裡等等,這種獨特性讓他們比傳統藝術更有價值。在傳統藝術中,理解什麼是“假貨”可能很棘手,而鏈上的歷史很容易追溯。

由於智能合約和 NFT 是 100% 可編程的,NFT 還可以添加內置的版稅和任何其他功能。補償藝術傢一直是一個問題,因為通常藝術傢的作品在沒有任何歸屬的情況下四處傳播。

越來越多的藝術傢和工程師開始利用這一巨大的附加值,因為這最終成為藝術傢獲得工作報酬的好方法。不僅如此,NFT 還是一種展示您的創造力並成為數字世界收藏傢的有趣方式。

NFT 的價值

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

NFT也是在數字世界中創造藝術和瞭解智能合約創建的一種有趣、動態和引人入勝的方式。所以現在將教你制作 NFT 所需的一切知識。

如何制作 NFT

現在,制作 NFT 的最簡單方法就是前往 Opensea、Rarible 或 Mintible 等平臺,並按照他們的分步指南在他們的平臺上進行部署即可。

你可以 100% 走這條路,但是你可能會被平臺綁定。你無法實現無限的定制,或者真正利用 NFT 的任何優勢。

如果你想用代碼來實現,學習一些紮實的知識,並有能力以無限的創造力創造出一些東西,那麼請繼續閱讀!

如何進行無限定制的 NFT

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

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

先決條件

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

  • Python
  • Nodejs 和 npm
  • Metamask

如果您不熟悉 Metamask,您可以按照下面教程進行設置。

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

Rinkeby Testnet ETH 和 LINK

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

測試鏈是測試我們的智能合約在現實世界中表現的好方法。我們需要 Rinkeby ETH 和 Rinkeby LINK,我們可以從 Chainlink 文檔中最新水龍頭的鏈接中免費獲得它們。

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

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

註意一定要使用 Rinkeby 而不是 Ropsten。在使用像以太坊這樣的智能合約平臺時,我們需要支付一點 ETH,而從鏈下獲取數據時,我們需要支付一點 LINK。這就是我們需要獲取測試鏈上的LINK 和 ETH 的原因。

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

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

快速上手

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

cd nft-mix

現在我們需要安裝 ganache-cli 和 eth-brownie。

pip install eth-brownie

npm install -g ganache-cli

現在我們可以設置我們的環境變量。如果您不熟悉環境變量,隻需將它們添加到 .env 文件中,然後運行:

source .env

.env的示例應該在你剛剛克隆的 repo 中,並註釋掉瞭環境變量。請確保取消註釋以使用它們!

您需要一個 WEB3_INFURA_PROJECT_ID和一個 PRIVATE_KEY 。WEB3_INFURA_PROJECT_ID 可以在註冊免費 Infura 帳戶時找到。這將為我們提供一種將交易發送到區塊鏈的方法。

我們還需要一個私鑰,您可以從您的 Metamask 中獲取。點擊 3 個小點,然後單擊帳戶詳細信息和導出私鑰。如果您投入現金進去,請不要與任何人分享此密鑰!

export
 PRIVATE_KEY=YOUR_KEY_HERE

export
 WEB3_INFURA_PROJECT_ID=YOUR_PROJECT_ID_HERE

現在我們可以部署我們的 NFT 合約並使用以下兩個命令創建我們的第一個收藏品。

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

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

第一個腳本將我們的 NFT 合約部署到 Rinkeby 區塊鏈,第二個腳本創建瞭我們的第一個收藏品。

您剛剛部署瞭第一個智能合約!

它根本沒有什麼作用,但別擔心——我將在本教程的高級部分向您展示如何在 OpenSea 上渲染它。首先,讓我們看看 ERC721 代幣標準。

ERC721 代幣標準

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

我們將 OpenZeplin 包用於 ERC721 token。導入的這個包允許我們使用典型 ERC721 token的所有功能。這定義瞭我們的代幣將具有的所有功能,例如 transfer——將代幣轉移給新用戶, safeMint——創建新代幣,等等。

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

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

contract SimpleCollectible is ERC721 {

這就是 Solidity 繼承的方式。當我們部署一個合約時,構造函數會被自動調用,它需要一些參數。

我們還使用瞭 ERC721 的構造函數,在我們的構造函數中,我們隻需要給它一個名稱和一個符號。在我們的例子中,它是“Dogie”和“DOG”。這意味著我們創建的每個 NFT 都將是 Dogie/DOG 類型。

這就像每張口袋妖怪卡仍然是口袋妖怪,或者交易卡上的每個棒球運動員仍然是棒球運動員。每個棒球運動員都是獨一無二的,但他們仍然都是棒球運動員。我們隻是使用 DOG 類型。

我們在頂部有 tokenCounter 來計算我們創建瞭多少這種類型的 NFT。每個新token都會根據當前的 tokenCounter 獲得一個 tokenId。

實際上可以使用 createCollectible 函數創建 NFT。這就是我們在 create_collectible.py 腳本中所寫的。

_safeMint函數創建新的 NFT,並將其分配給調用 createdCollectible的人,也就是 msg.sender,並使用從 tokenCounter 派生的 newItemId。這就是我們如何通過檢查 tokenId的所有者來跟蹤誰擁有什麼。

您會註意到我們還調用瞭 _setTokenURI。讓我們來看一下。

什麼是 NFT 元數據和 TokenURI?

當創建智能合約和創建 NFT 時,人們很快意識到將大量數據部署到區塊鏈是非常昂貴的。小至 1 KB 的圖像的存儲成本很容易超過 100 萬美元。

這顯然是 NFT 的一個問題,因為擁有創意藝術意味著您必須將這些信息存儲在某個地方。他們還想要一種輕量級的方式來存儲有關 NFT 的屬性——這就是 tokenURI 和元數據發揮作用的地方。

TokenURI

NFT 上的 tokenURI 是token“外觀”的唯一標識符。URI 可以是通過 HTTPS 的 API 調用、IPFS 哈希值或任何其他獨特的東西。

它們遵循顯示元數據的標準,如下所示:

這些顯示瞭 NFT 的外觀及其屬性。圖像部分指向 NFT 外觀的另一個 URI。這使得 Opensea、Rarible 和 Mintable 等 NFT 平臺可以輕松地在其平臺上呈現 NFT,因為它們都在尋找這種元數據。

鏈下元數據與鏈上元數據

現在你可能會想“等等……如果元數據不在鏈上,這是否意味著我的 NFT 可能會在某個時候消失”?你是對的。

您認為鏈下元數據意味著您不能使用該元數據讓您的智能合約相互交互也是正確的。

這就是為什麼我們要專註於鏈上元數據,以便我們可以對 NFT 進行編程以相互交互。

但是,我們仍然需要鏈下元數據的圖像部分,因為我們沒有一種很好的方法來在鏈上存儲大圖像。但是別擔心,我們仍然可以通過使用 IPFS 在去中心化網絡上免費做到這一點。

這是來自 IPFS 的 imageURI示例,它顯示瞭在龍與地下城教程中創建的 ChainlinkElf。

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

我們沒有為簡單的 NFT 設置 tokenURI,因為我們隻想展示一個基本示例。

下一篇將講解 NFT 進階知識,這樣就可以看到我們用鏈上元數據實現的一些驚人功能,在 opeansea 上渲染 NFT,並讓我們的狗狗振作起來!

以上就是如何用用Python制作NFT區塊鏈作品的詳細內容,更多關於Python制作NFT區塊鏈作品的資料請關註WalkonNet其它相關文章!

推薦閱讀: