Ethereum Token — ERC20之外

Kimi Wu
Kimi Wu
Aug 6, 2018 · 5 min read

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

目前在ethereum上的token大概分兩類 — FT & NFT,是Fungible Token跟Non-Fungible Token的縮寫,以字面上來說,就是可替代跟不可替代,聽起來很很抽象,我自己的解讀是錢跟資產(這個詞也不夠精確)。

可替代的就是錢,你的台幣100跟我的台幣100是一樣的,可以互換的,但是我房子或是車子是獨一無二的,你的房子可能跟我的是等價的,不過地點、樓層就是不同,因此是獨一無二的。所以可以想成錢就是FT,而房子就是NFT。

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

ERC20

主要提供三個function,分成兩種組合
- transfer :很直覺,就是直接轉token
- approve 跟 transferFrom:
先透過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,如果不支援,就取消交易。聽起來滿理想的,不過在細節規範的部分有瑕疵。假設接受方合約沒有實作tokenFallback,但是有實作一般的fallback函式,則呼叫端會收到成功(true)的結果,因此會造成誤判的狀況。(解釋一下流程,在smart contract中,若呼叫一個沒有實作的函式,則會呼叫fallback函式(如果有實作fallback的話),若fallback都正常執行沒有錯誤,則呼叫端收到的回傳值會是true。因此在上面的例子,呼叫端會誤以為tokenFallback執行是成功的,但其實是接受端的fallback執行成功)

也因此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)。
不過這個提案還很新,到底有沒有機會成為標準,看來還有很長的路…


Originally published at kimiwublog.blogspot.com.

Taipei Ethereum Meetup

台北以太坊社群專欄

Kimi Wu

Written by

Kimi Wu

A blockchain developer

Taipei Ethereum Meetup

台北以太坊社群專欄

More From Medium

More on Ethereum from Taipei Ethereum Meetup

More on Blockchain from Taipei Ethereum Meetup

More on Ethereum from Taipei Ethereum Meetup

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade