前言
在上一篇文章中,我們先提了以太坊的基礎協議,還有 EIP 與 ERC 是甚麼,那這一篇文章我們就來更深度解析在區塊鏈的世界中最常見的三種代幣協議 ERC-20 、 ERC-721 、 ERC-1155 吧,這當中包含現在最紅的 NFT ,我們在較早的時候曾經從應用層面去嘗試理解甚麼是 NFT ,那在這篇就會是更進階的,讓你更瞭解 NFT 背後的代幣協議是如何被定義出來的。
一、ERC-20 代幣 | Fungible Token
所謂的 ERC-20 就是一般會在交易所看到的代幣,又稱為 Fungible Token 同質化代幣,這種代幣就像是新台幣與美元那樣,你的1000元鈔票與我的1000元鈔票基本上是一樣的,就算我們今天交換了彼此的鈔票,它的價值也不會有變化,我們仍然可以用不同的鈔票去超商購買1000元等值的商品。
在區塊鏈的世界中發行的代幣,通常最小單位不會是1顆代幣,例如以太坊中的通用貨幣以太幣的最小單位稱為「wei」,它代表的價值是10的負18次方顆以太幣,也就是說一顆以太幣可以被分割為 1,000,000,000,000,000,000 wei ,這就像美元底下還有一美分的硬幣,它的價值是0.01美元,所以一美元可以被分割為100美分。
ERC-20 最重要的觀念大概是要知道,當代幣需要被轉移時,都要告訴智能合約「誰 (From)」要轉帳「多少錢 (Value)」「給誰 (To)」這三個參數。
二、ERC-721 代幣 | Non-Fungible Token, NFT
沒錯!ERC-721 就是傳說中的 NFT ,中文是非同質化代幣,我們之前只從應用面介紹過它,然而它也是一種代幣協議,我們看到的這些 NFT 本質上還是一個代幣,與 ERC-20 不同之處在於每個代幣在生成時都會被賦予一個獨一無二的 ID,就因為這個 ID 不同,導致每個 NFT 雖然都是出自同一個合約之中,價值卻不相同的情況,就好像學校的制服一樣,起初販賣的時候可以被當作 ERC-20 同質化代幣的概念,每一件制服都是一樣的,不過當這些制服分發到學生手上後,他們就必須在上面刻上自己的學生編號,自此之後每一件衣服都是 ERC-721 非同質化代幣的概念,你的制服與我的制服不再相同,甚至如果是學校風雲人物的制服,搞不好價值會比其他同學的制服還要高,這就是非同質化代幣的概念。
不管在最重要的 轉帳交易(Transfer) 或 授權(Approval) 等 Event 與 ERC-20 最大的差別就是都要多帶一個 ID 的參數,這個 ID 就像上面舉製服的例子一般,你要知道自己的 NFT 編號為多少,在轉帳時告訴智能合約「誰 (From)」要把手上 「ID 編號多少的 NFT (tokenId)」 轉帳「給誰 (To)」,這個例子可以清楚的看到不需要告訴智能合約要轉出多少個 NFT 了,因為不需要填入「Value」的參數,換句話說一次只能轉出一個 NFT。
三、ERC-1155 代幣 | Multi-Token (Semi-Fungible Token)
自從非同質化代幣開始運作後,開始有人發現如果我要同時鑄造幾千幾萬份 NFT 的話,使用 ERC-721 就要跟著呼叫智能合約幾千幾萬次,每一次的使用都算是一筆鏈上交易,而這麼多筆交易在以太坊上轉帳可不便宜,一個新的 NFT 專案光是鑄造費就燒光光了。
如果是常見的 PFP (Profile Picture)或具有通行證賦能之類的 NFT 可能硬著頭皮還是鑄造的出來,但要如果你是玩過遊戲的就會知道,通常遊戲在遊玩過程中玩家通常會無止境的產出與消耗遊戲道具,這樣看來區塊鏈遊戲相關的開發商如果要走遊戲道具去中心化這條路,讓這些遊玩過程中可以被無止境產出與銷毀的遊戲道具上鏈,自行負擔會是相當大的成本,轉嫁給玩家的話恐怕玩家們都玩不起離開了…
於是在這樣的情況下,出現了 ERC-1155 代幣,它是可以一次性鑄造一堆一模一樣的代幣,但又保有 ID 的概念,這樣講蠻抽象的,這裡用一般法幣舉個例子應該就會很清楚,新台幣最常見的面額有 1、5、10、20、50 元的硬幣,在 ERC-1155 裡面,我們可以定義 ID 為 1 的代幣為一元硬幣、ID 為 2 的代幣為五元硬幣、ID 為 3 的代幣為十元硬幣以此類推,當央行想要鑄造一萬顆一元硬幣時,就只要對呼叫智能合約鑄造 ID 為 1 的代幣一萬個,這樣的呼叫方式就類似於鑄造 ERC-20 代幣,可以一次將所需要的代幣數量鑄造出來,不用像 ERC-721 那樣一個一個鑄造,但同時同一個合約底下又可以透過不同 ID 的切換,鑄造出不同的代幣出來,我想這就是為甚麼 ERC-1155 代幣會被稱為 Multi-Token 或 Semi-Fungible Token (半同質化代幣)了吧。
實際要轉帳 ERC-1155 代幣時,需要告訴智能合約「誰 (From)」要把手上「多少個 (Value)」「ID 編號為多少的 NFT (tokenId)」轉帳「給誰 (To)」,從這個例子就可以明顯的看出本質上 ERC-1155 代幣與 ERC-721、ERC-20 的差別在於,每個操作動作同時會有 ID 又有 Value 的概念,要注意它還增加了「Batch」的觀念,可以將不同 ID 不同數量的 NFT 打包在一起發送,這大大地減輕了轉帳交易的手續費負擔。
四、如何大略看懂 EIP 官方文檔的內容
基本上對於智能合約開發者而言,我們最需要注意的是它有哪些 Event 以及哪些 Function,以及後面應該代入的參數是甚麼。
1. Event 就是我們一定要有的東西,那會是該代幣協議大家都應該要有的基本功能,例如在 ERC-20 裡面,Event 分為 Transfer 與 Approval。
Transfer 不難理解,就是代幣轉帳功能。
Approval 則是簽署,對於有用過錢包的人就會知道當你要去使用一些去中心化應用程式(Dapps)時,錢包都會跳出來請你簽署東西,這個就是在做 Approval 的動作,當你批准了某個 Dapp 時,表示你的錢包已經授予該 Dapp 自由檢索你這個錢包地址的權限,甚至是能夠隨意匯出你的錢的權限,這就是為甚麼我們會聽到有人的熱錢包又被駭了,通常不是該熱錢包不安全,而是使用者隨便的批准了某些不懷好意的智能合約,讓它可以隨意使用我們的財產。
2. Function 則通常是一些開發者可自由選擇要不要加入的基本功能,每個 Function 的規格都是訂好的,例如在 ERC-20 之中,呼叫 decimals() 會回傳這個代幣最小的單位、呼叫 totalSupply() 會回傳這個代幣目前的總供應量、balanceOf(錢包地址)可以查詢某錢包裡面有多少顆這個智能合約的代幣等等。
3. 這些 Event 或 Function 後面要代入的參數是甚麼?
前面或多或少都有提到 From To Value 之類的東西,那個其實也寫在官方文檔中了,我們用 ERC-20 的 Transfer event 作為例子:
event Transfer(address indexed _from, address indexed _to, uint256 _value)
括弧內的東西看起來就相當直覺,當我們需要使用 Transfer 的時候會需要代入三個參數,_from、_to、_value,from 就是誰、 to 就是要給誰、value 就是給多少錢。而前面會是它的資料形態,像 from 跟 to 就都要填一個地址 (Address),而 value 是填一個不含負數的整數 (uint)。
這部分可能牽涉一些困難的程式設計,希望這樣的拆解方式會稍微讓你對於這些 EIP 文檔有更進一步的瞭解,理解這些大家講好的規範,會讓我們在使用時更加瞭解它是怎麼運作的,這樣在使用一些去中心化的服務時,就可以自行去判斷它寫的內容是不是壞壞的,能讓自己避開危險在幣圈可是很重要的生存之道呢。
廣告專區
科技隨筆即將進入新企劃了,在進到新企劃之前,如果你是科技隨筆忠實讀者但卻還沒有領到免費的 ITC 代幣空投,趕快去看看之前空投獎勵的文章,看看如何領取吧,下一次空投時間會在四月底到五月初之間 (三月以前留言的人都已經發放了哦)。
現在要領取的話,剩下兩個管道了:
再次提醒:以上這些名額額滿後活動即結束,暫時不會再添加新的免費代幣空投名額了!下次發放代幣時間會在四月底五月初,人工發放時間比較不即時敬請見諒。
延伸閱讀
最後,謝謝你在百忙之中願意抽空來花時間來看我的文章,如果還喜歡這些內容的話希望能獲得你的追蹤及小額贊助支持,讓我更有繼續寫下去的動力,也歡迎
點此連結在其他平台找到我。
下次見嚕 o((>ω< ))o~