根據 Coinist 數據顯示,2017 年全年的 ICO 融資規模達到 38 億美元。 大部分主流 ICO 代幣都是基於以太坊(Ethereum)平台開發,ICO 熱潮也支撐著以太幣價格從 2017年1月1日的 8 美元漲到最近的 886 美元,總市值超過 800 億美元。
具體以太坊取得如此成績的原因有很多,其中最重要的一個就是 ERC20 協議。
以太坊平台於 2015 年正式公開運行。 幾乎同時,以太坊開發者 Fabian Vogelsteller 和 Vitalik Buterin 等人開始製定 ERC20 協議。 制定 ERC20 協議目的是:提供代幣合約的基本架構,允許代幣被第三方合約使用,從而使得以太坊的任意一種代幣都可以在其他應用(錢包,交易所等)中使用。 有了ERC20 協議,人們不需要重複開發代幣基礎功能,極大降低代幣開發的門檻,讓開發者可以將代幣應用到更多領域,發起更多ICO 項目;由於不同ERC20 代幣都兼容 ERC20 協議,這樣兩個ERC20 代幣之間就能夠進行交易,使得用戶對持有代幣更有信心。
ERC20 協議在發布之後已經取得了很多成功:它被絕大多數以太坊錢包支持;成百上千的ERC20 代幣被創造出來,其中有些代幣的價值甚至高於一些加密貨幣;大部分的加密 貨幣交易所都支持交易ERC20 代幣。 ERC20 協議因此也成為加密貨幣世界中最成功的標準之一。
類似 HTTP 定義互聯網信息交換標準一樣,ERC20 協議定義一個代幣智能合約需要實現方法和事件。 ERC20 並不是一個技術,軟件或者代碼,它是一個技術標準。
ERC20 協議包含完成代幣交易需要實現的一些方法。 其中包含代幣交易,查詢代幣餘額,代幣總供應量等。 智能合約代碼如下:
其中必須實現的方法和事件包括:
-
totalSupply:查詢代幣總供應量
-
balanceOf:查詢特定地址的餘額
-
allowance:查詢能夠從地址 _owner 提出的代幣數量
-
transfer:從地址 _owner 轉移代幣到地址 _to,必須觸發 Transfer 事件
-
approve:允許 _spender 從當前地址多次提幣,總量為 _value
-
transferFrom:從地址 _from 轉移代幣到地址 _to,必須觸發 Transfer 事件。 這個方法是用於提幣流程,能給予開發者實現自定義行為
-
Transfer 事件:在代幣轉移中觸發,轉移數量為 0 時也必須觸發該事件
-
Approval 事件:成功調用 approve 時觸發
其他可選實現的方法有:
-
name:返回代幣名
-
symbol:返回代幣符號
-
decimals:返回代幣使用的位數,用於餘額顯示
02
—
舉栗
我們可以通過下邊的模擬交易流程,理解 ERC20 協議是如何工作的。
具體假定代幣合約中有兩個用戶 Alice和Bob——兩個名人
查詢代幣餘額
用 balanceOf 查詢兩個用戶賬戶餘額:
tokenContact.balanceOf(0x0000000000000000000000000000000000000001);結果為:100
tokenContact.balanceOf(0x0000000000000000000000000000000000000002);結果為:200
發送代幣
假定 Alice 想發送 10 個代幣給 Bob,那麼 Alice 需要執行
tokenContract.transfer(0x0000000000000000000000000000000000000002, 10);
這會修改 balances 數據,寫入
再次查詢餘額:
tokenContact.balanceOf(0x0000000000000000000000000000000000000001);結果為:90
tokenContact.balanceOf(0x0000000000000000000000000000000000000002);結果為:210
approve 和 transferFrom 示例
假如 Alice 想授權 Bob 從自己這裡可以提取 30 個代幣,,Alice 需要執行:
tokenContract.approve(0x0000000000000000000000000000000000000002, 30);
這會在 allowed 映射表中寫入數據:
tokenContract.allowed[0x0000000000000000000000000000000000000001][0x0000000000000000000000000000000000000002] = 30;
當 Bob 想提幣時,Bob 需要執行(注意提幣額度超過 Alice 授權時會導致錯誤):
tokenContract.transferFrom(0x0000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000002, 20;
此時查詢餘額:
tokenContact.balanceOf(0x0000000000000000000000000000000000000001);結果為:70
tokenContact.balanceOf(0x0000000000000000000000000000000000000002);結果為:230
這時 allowed 映射表被寫入新數據:
tokenContract.allowed[0x0000000000000000000000000000000000000001][0x0000000000000000000000000000000000000002] = 10;
03
—
總結
從以上模擬交易中可以看出:ERC20 協議本質上是一個智能合約接口,規定了開發者的代幣合約中必須實現的基本功能,按照ERC20 協議就能夠完成一個簡單的代幣合約,降低代幣 開發的技術難度;不同的ERC20 代幣都兼容ERC20 協議,因此只要交易所支持ERC20 協議就能夠支持多種ERC20 代幣,讓幣間交易也成為可能。
ERC20 協議,一方面讓開發者能夠用代幣衡量更多資產價值,發起更多ICO 項目;另一方面讓交易所很容易兼容ERC20 代幣,人們更願意也更方便購入ERC20 代幣,大量 的ICO 項目就會擁有更多的參與者。 這些都讓以太坊平台的生態系統豐富起來。 僅僅是開發工具鏈方面,以太坊平台就出現了很多開發框架、DApp 部署平台等,進一步提高開發效率。
在如今繁多的區塊鏈項目中,以太坊毫無疑問擁有最完備的生態系統支撐其 800 億美元的估值,這一切都離不開幕後功臣 — ERC20 協議。