ERC20

ERC20 指的是用編號 ERC20 的以太坊智能合約技術發行的數位資產類別。是個無論在幣圈或鏈圈都會經常聽到的詞語,常見說法有,「ERC20 貨幣」或是「相容 ERC20(幣)的虛擬錢包」等。

目前全球有大約三萬五千種不同的數位資產被發行出來,而其中大約有 99.99 %(非官方統計)比例的數位資產,都是屬於 ERC20 發行出來的(更新:目前已有基於 EOS 鏈以及基於 Tron 的 TRC20 等多種類型資產出現)。

如果要將 ERC20 類型數位資產存放到錢包,就必須確保錢包支援 ERC20 的代幣資產。

編號第 20 號的以太坊(提案)請求討論

ERC(英文:Ethereum Request for Comment)從英文全名直譯,是「以太坊(提案)請求討論」,有點類似開發者社群成員可以自由向整個開發社群提出提案討論的請求;ERC20,也就是編號第 20 號的以太坊(提案)請求討論。

講白話,就是功能需求提出和投票討論。像我們每次在 iPhone 發表會前,都會在社群論壇裡面提出「想要螢幕大一點」「想要有真正的"飛行"模式」,對吧?只是 Apple 每次都不一定會答應我們而已。

那 ERC 和 EIP 到底又有什麼不一樣?

ERC20 被創建前,先被提出的其實是 EIP20,也就是編號第 20 的以太坊改進提案(英文:Ethereum Improvement Proposals),一旦大家認為這是個好的提案,需要進一步討論時,就會開啟相應的 ERC 編號討論,如 ERC20。最後在多次的討論與實作後,大家都認為這個改進提案已經被完成,並可以正式成為 Ethereum 的一部分時,就會在 EIP 的頁面最後,做下修改結論,並結案。

ERC20 數位資產的要素

根據目前的實作和討論,EIP20 / ERC20 這種數位資產的共同要素必須符合以下條件:

  1. TotalSupply [總代幣發行量]

  2. BalanceOf (address _owner) constant returns (uint256 balance)[“owner”戶口結餘]

  3. transfer(address _to, uint256 _value) returns (bool success) [傳送 _value 數量的代幣到 _to錢包地址]

  4. transferFrom(address _from, address _to, uint256 _value) returns (bool success)[從address _from傳送 _value 數量的代幣到 _to錢包地址]

  5. approve(address _spender, uint256 _value) returns (bool success) [容許_spender_owner錢包中不限次數地提取代幣,直到達到訂下的 _value 數量。如果此指令被更新,新的 _value 限額會取替舊的限額]

  6. allowance (address *_owner*, address *_spender*) constant returns (uint256 remaining) [匯報 _spender 尚可從 _owner錢包提取的代幣數量]

只要透過以太坊智能合約所建立的以太坊貨幣,符合以上條件(帶有這些資訊)者,就稱為 ERC20 代幣,並且可通行於任何相容 ERC20(技術代碼)的智能錢包、網站應用、交易所等等

看不太懂對吧?沒關係,其實總歸來說,每一個 ERC 條款的提出,進而到確立為 EIP,就像是整個社群共同在為以太坊區塊網路源源不絕地創建一個又一個新「產品」,這個產品可能是某個解決方案,也可能是某一個新產品類別,新的產品類別,有一定的元件和要素組合。

擴充功能提案

舉電信領域為例,我們可以創建網路規範或傳輸規則作為新產品,如「3G網路」「4G LTE」;也可以創建一種工具類別作為新產品,譬如說「智慧型手機」,而智慧型手機這種產品,會有共通要素,如:觸控螢幕、上網功能、攝像鏡頭,等等。而如果智慧型手機被普遍使用了,電信產業就會持續開發出相容於「智慧型手機的」軟體、優化基地台、配件等等。

ERC20 就像剛剛例子裡的智慧型手機 - 一種新的手機樣式,它是以太坊區塊鏈的產品 - 一種新的數位資產的形式。因為被廣於使用,所以近來幾乎所有的以太坊區塊鏈應用、服務等,都圍繞著這個 ERC20 來運行。所以只要你一踏入鏈圈,甚至在幣圈,都會經常聽到 ERC20 錢包、ERC20 以太坊去中心化交易所 等等會,如果你不懂 ERC20,就難以在鏈圈裡頭和人對話了!

為何不是 EIP20 而是 ERC20 呢?

這大概就很多人不知道了。根據考察,原先以太坊開發社群裡只有 EIP,也就是「以太坊改進提議」,但許多開發者提出了改進提議後,發現多半需要很多社群意見討論才能定案,但在 EIP 頁面裡頭討論,會導致頁面內容過長過於混亂。因此就有社群用戶提出 ERC 的概念,該意見參考自 1969 年以來,由網際網路工程任務組(IETF)發布的一系列備忘錄,名稱就是徵求意見稿(英語:Request For Comments,縮寫為RFC)目的是徵求更多討論,待討論完備以後,再把結論寫在該編號的意見討論頁的最後一條。定案後,那整個定案後的版本就會移回去寫入到 Final-EIP(提議結論)。

以太坊參考了這個流程,共同建立了這個以太坊規範:

  1. 如果有意見想提出修正建議,可以到 EIPs 頁面提出問題(Issue)

  2. 如果被接受至 EIP,就會確立這個 EIP 的編號

  3. 大家會先在 ERC 裡頭討論該 EIP 的設計

  4. 從討論到最終定案的過程會被記錄在 EIC 頁面裡頭

  5. 最終被移至 EIPs 確定下來,作為 Final- EIP

據當時提出 ERC 作法的用戶 "ethers" 的原始提議,最終應該還有一個階段叫做 ESD(Ethereum Standards) 但至今卻還未有任何一個 ESD 被產生。也許是因為原始提案有提到 "some ERCs could be ESDs" 亦即「有些 ERC 被定案後就可以作為 ESD 了」。這或許也是為何 ERC20 明明已被全世界開發者使用了,卻還(依據名稱)算是「Request for Comment」,像是還正在被討論似的,不是已經被確立為 EIP20 了嗎?為何大家還是叫它 ERC20? 或許是開發著們依據最原始的提案,覺得叫做 ERC ,會更接近 ESD 吧!誰知道呢?