Ethereum Token - ERC20之外

本篇會介紹erc20之外,還有哪些正在被討論中的token標準


目前在ethereum上的token大概分兩類 - FT & NFT,是Fungible TokenNon-Fungible Token的縮寫,以字面上來說,就是可替代跟不可替代,聽起來很很抽象,我自己的解讀是錢跟資產(這個詞也不夠精確)。
可替代的就是錢,你的台幣100跟我的台幣100是一樣的,可以互換的,但是我房子或是車子是獨一無二的,你的房子可能跟我的是等價的,不過地點、樓層就是不同,因此是獨一無二的。所以可以想成錢就是FT,而房子就是NFT。


FT的代表就是ERC20,同系列的有ERC223ERC621ERC777ERC827,都是想補足ERC20不足的部分,但各有各的原因,所以都還沒成為標準。
NFT代表就是ERC721,著名的crypto kitty。
也有想把兩個混一起的提案,大部分都先merge到ERC1155這個提案做討論,最後會提一下

ERC20

主要提供三個function,分成兩種組合
- transfer
  很直覺,就是直接轉token
- approvetransferFrom
  先透過approve設定允許轉給對方多少,例如:A有100個token,A允許B動用10個、C動用10個,但是這個時候還沒把token轉出。如果B是惡意的合約,頂多就只能轉走A 10個token。
  接著呼叫tranferFrom,把允許動用的數量轉出,以上面例子,就是B會把允許的10個轉走
其他細節可以參考ERC20Ethereum Taipei Meetup文章有詳細介紹

ERC223 2017-03-05

ERC20 提供的是token交易最基本的介面,在一般帳號之間轉換,是沒什麼問題。但是如果接受端是合約,而且合約沒有處理token的功能,這些token就永遠提不出來了,ERC223就是想解決這個問題。
ERC223提出,若接受端是合約,就必須支援tokenFallback這個function,如果不支援,就取消交易。聽起來滿理想的,不過在細節規範的部分有瑕疵,我直接引用Ethereum Taipei Meetup文章中的文字,作者解釋地相當清楚
但ERC223遇到的主要問題之一是代幣接收方的Fallback函式(這裏是指合約本身的Fallback函式,不是另外自訂的Fallback函式如tokenFallback等)有可能會導致預期外的結果 — 在代幣交易的過程中,如果接收方不支援(即沒有實作)tokenFallback函式,程式會轉而觸發Fallback函式,這時如果接收方也沒有實作Fallback函式,則呼叫tokenFallback得到的回傳值會是false;但如果接收方的合約裡有實作Fallback函式且能順利執行完的話,則呼叫tokenFallback得到的回傳值會是true,讓發送方誤以為成功執行tokenFallback,造成false positive的結果。
也因此ERC223沒有成為標準,大部分人也就不知道有過這段歷史了

ERC621 2017-05-01

ERC20的延伸增加兩個介面,可以增加/減少token的總發行量(increaseSupply / decreaseSupply)
不過,社群上部分人似乎覺得,這種設計不必要,ERC20也沒有禁止增加或減少,可以由開發者自行定義,不需要當作標準。(當然可以增減token總量,對市場也不是好的方式)

ERC777 2017-11-20

這邊先跳過ERC721,把FT的先介紹完
ERC777有幾個重點
1. 有最小交易單位(function granularity,且不能更改)
2. 希望把transfer改成send,避免跟原本ERC20衝突
3. 可以把token授權給第三方做操作,對於交易所來說,會是比較方便的
4. 交易雙方都支援使用合約,這部分是我想要討論的

第4點token的轉移可以讓自己的合約被通知,對於應用來說是很方便的,不過在ERC777是選用EIP820作為合約的溝通標準,但是EIP820還不是標準,也是現在的問題之一
簡單講一下EIP820就是建立一個合約,合約裡可以讓任何人(對! 任何人,不只是合約)來註冊你這個位址支援哪些介面,並且查詢(ERC820是ERC165的延伸),不過這個EIP的爭議還有點大,但是ERC777贊同的聲音還滿多的,所以這個提案到底會如何,繼續觀察。


ERC827 2018-01-11

ERC20的延伸,可以把token授權給第三方做操作,對於交易所來說,會是方便的一個提案。
不過提案中有,有使用call這個function,然而這很容易造成安全上的漏洞(fallback的攻擊),而社群上也因此不太贊同在標準裡有使用CUSTOM_CALL的方式,不過也還在討論中,最終不確定會不會修改或是要怎麼修改。


ERC721 2018-01-24

ERC721對於token來說是全新的概念,一個token可以代表的是一隻貓、一張棒球卡、一個遊戲中的寶物。至於介面的部分,不外乎是transfer,approve等,細節就不多談了。然後支援ERC721的合約,都要實作ERC165



篇幅意外地有點長....
最後簡單說一下ERC1155
ERC1155一個多月前提出的(2018-06-17),把NFT跟FT打包一起。
想解決太多重複代碼的問題(每個token的合約相似度極高),還有可以多種token同時交易(batchTransfer,但有人說這太花gas了),所以可以在同一個交易裡讓FT(錢)直接換NFT(多種資產、武器),不需要透過中介(可以atomic swap)。

留言

這個網誌中的熱門文章

瑞士滑雪分享2 - 策馬特

What's New in Ethereum Serenity (2.0)

動手實做零知識 - circom