摘要:NFT(Non-Fungible Tokens,非同質化代幣)是智能合約領域中最耀眼的星之一,是一種類似於ERC20 的代幣標準。如果說2020 年是DeFi 年,那麼至少2021 年的很大一部分都是屬於NFT 的。非同質化意味著它是獨一無二的,這與ERC20 代幣截然不同,後者都是同…
NFT(Non-Fungible Tokens,非同質化代幣)是智能合約領域中最耀眼的星之一,是一種類似於ERC20 的代幣標準。如果說2020 年是DeFi 年,那麼至少2021 年的很大一部分都是屬於NFT 的。
非同質化意味著它是獨一無二的,這與ERC20 代幣截然不同,後者都是同質化代幣。舉個同質化的例子,無論你用什麼美元鈔票,你的美元鈔票都將價值1美元。一元紙幣上的序列號可能不同,但這些紙幣是可以互換的,因為它們無論如何都是價值1美元。
這些NFT 可以通過編程來完成幾乎任何你想做的事情,就像普通的智能合約一樣,但它們具有鏈上加密的真實性,因為它們的部署歷史將隨著區塊鏈的存在而得到幾乎永久的保證。這解決了許多問題,特別是對於那些在藝術界摸爬滾打的人來說,NFT 所創造的數字稀缺性和真實性簡直就是靈丹妙藥。這也可以解決版稅的問題,創造數字地位的象徵,讓遊戲應用程序可以加強交互,等等。
NFT 的發展進度
首先要明確的是,NFT 具有無限的潛力。今年2月,Axie Infinity以888.25 ETH 的價格出售了9塊地。 (目前價值約391 萬美元)
NFT是由區塊鍊和智能合約的出現所碰撞出的全新的火花,而現在有大量的開發者和機構團隊正在其上勾线各種奇思妙想。
標準
正如上文所提到的,NFT 以ERC721 代幣標準為起點,它的語法與ERC20 相似,只是有一些調整。
為了使你的合同能被系統認定是一個NFT ,它所要做的就是遵循這個標準。我們把這個標準導入到我們的合約中,這樣我們就不必每次想做一個新的合約時都要重新造輪子。
NFT 有一個tokenURI 變量,我們將在一分鐘內討論,他們有一個tokenId 到其所有者的映射,每個token 有自己的”所有者”。這與ERC20 不同,後者只有一個地址與餘額的映射。 ERC721 仍然允許人們轉讓代幣,在代幣上設置權限等等。按照慣例,這是一個輕量級的標準,所以我們可以用它們建立任何我們想要的東西。
這裡是事情開始變得真正不同的地方—— Metadata(元數據)。當你進入OpenSea(一個頂級NFT 市場),你可以看到一堆圖片。那麼既然NFT 是在區塊鏈上,那麼他們的所有數據都應該在鏈上,對嗎?嗯,不盡然。
在鏈上存儲數據可能會非常昂貴,而且藝術品的文件體積往往並不會太小。以太坊和智能合約的開發者意識到,即使是上傳1 MB的圖片也會讓他們迅速破產,所以他們必須創造一個不必存儲大量數據,卻依舊能展示他們作品的途徑。
作為一種變通方法,大多數NFT 都有一個所謂的tokenURI 。這是一個全球唯一的標識符,用於NFT 的可視性領域。這使得給NFT 添加視覺效果更容易。 URI 是一個統一資源標識符,它可能是一個HTTPS API 調用,通過IPFS 的東西,或其他類型的唯一標識符。這個元數據看起來像這樣。
它們的JSON 文件結構是這樣的:
-
姓名
-
描述
-
圖片
-
屬性
這些文件通常存儲在API 或IPFS 上。
現在,你可能會突然蹦出一個疑慮,”等等……這意味著NFT 的可視化內容來自一個中心化存儲設施?這違背了我將它部署到區塊鏈上的最初目的!”
鏈上元數據VS 鏈外元數據
如果你想讓你的NFT 所有你能想像到的有趣的事情,它的鏈上屬性是必須的。舉幾個例子,如果你想給他們像口袋妖怪那樣的戰斗狀態,某種類型的稀有性統計,或者讓他們有鏈上加密的稀缺性。這些屬性必須是鏈上的。 (因為這些都需要可追溯,可證偽,公眾開放)
目前NFT 平台沒有很好的方法來讓鏈上的屬性可視化,所以你只需要用你鑄造的NFT 創建一個tokenURI 。
對於tokenURI ,最流行的方法之一是使用IPFS 來存儲你的數據。你會把你的數據上傳到那裡,然後使用pinning 服務來確保數據永遠留在那裡。我很期待智能合約平台和存儲端之間能有更多的交互性。
說實話,我一開始覺得NFT 很蠢。除此以外,我曾經還認為藝術是白痴玩的東西…… 但考慮到我喜歡音樂、電影和具有良好視覺效果的遊戲,我說那種話就很虛偽。 NFT 解決了藝術界在版稅和真實性方面長期以來所面臨的痛點。我們現在有一個去中心化的審計服務。如果你想使用某人的藝術作品,你可以在鏈上看到關於那件作品的一切。
Nyan 貓的原創作者以300 ETH的價格出售了其NFT 版本。這證明了,數字稀缺性是有價值的。
如果你創造了令人驚奇的東西,那麼它就有其獨特的價值。這就是為什麼我認為擁有Chainlink VRF( Chainlink 的隨機數生成服務) NFT 是件非常重要的事情,因為你可以創造出非常罕見的收藏品。我很期待有人在這些平台上製作一個口袋妖怪類型的遊戲。這些NFT將永遠存在下去。
現在有一堆NFT 項目的價值都在呈指數級飆升,而我們可以圍繞它們做一些特別的事情。
一個簡單的NFT合約
這是最簡單的玩轉NFT 合約的方式。其中包含了Truffle 、 Hardhat 和Brownie 的語法。我喜歡使用OpenZepplin 合約,因為結構非常完善,而且有我們通常需要的所有工具,可以直接開始工作。確保提前安裝好它們:
-
npm install @openzeppelin/contracts
我們創建一個帶有DOG 符號的代幣,名字是Dogie 。然後我們可以用createCollectible 函數來鑄造我們想要的DOG ,每次都會給我們存儲一個新的tokenId 。我們需要做的就是傳遞一個tokenURI ,它只是任何指向元數據JSON 格式的東西的URL/URI 。
進階版本的NFT合約
在這個NFT 合約中,我們使用Chainlink VRF 來給我們的NFT 提供隨機狀態。在這種情況下,我們正在使用隨機性來給我們的狗一個隨機的品種。當我們這次調用createCollectible 時,我們實際上是向Chainlink Oracle 發送了一個請求,以返回一個經過加密證明的隨機數。這樣,就不會有任何可能破壞遊戲公平性的“暗箱操作”行為發生。這個請求是異步的,我們必須等待Chainlink oracle 用隨機數進行第二次交易。
一旦Chainlink oracle 完成,它就會用它的隨機數調用fulfillRandomness 函數,這就是對NFT 進行開採。這些映射被用來確保最初調用createCollectible 函數的人可以成為NFT 的所有者。這就是我們如何開始製作具有難以置信的強大功能和真正稀缺性的動態NFT 。
總結:
創造NFT 並非一個難於登青天的事情,只需要簡單的代碼,引入適當的API 即可創造出屬於自己的NFT。但作為藝術衍生品,NFT 真正的價值依舊來源於點子、社區、風格、藝術創作品味等等,NFT 僅僅是從技術上解決了藝術品的諸多歷史遺留痛點,但它並未根本改變一個藝術品的價值產生方式。大家可以嘗試根據這個教程學習創作自己的NFT。
參考文章:How To Create NFTs With Solidity
作者:Patrick Collins
編譯整理:Chen Zou
本文來自0x新聞Bitpush.News,轉載須註明出處