ERC是以太坊的意見徵求稿(RFC)版本,由互聯網工程任務組設計。
安全應該是區塊鏈現在最棘手的問題,而安全問題中,尤其是智能合約漏洞氾濫成災,如何避免這些漏洞?或許我們應該瞭解一下智能合約所遵循的ERC標準。
本文作者 Lauren Stephanian 來自美國紐約,全球知名區塊鏈投資基金 Pantera Capital 投資副總、作家,她以專業投資人的視角對區塊鏈前沿技術有自己獨到的理解。
這篇文章中,她介紹到ERC標準是由以太坊開發人員編寫,開發人員在基於這些標準構建智能合約。其中,她詳細介紹了加密社區中最為流行的ERC-20標準,此外,還介紹了ERC-223、ERC-621、ERC-721、ERC-827這幾個ERC標準。
讓我們跟隨 Lauren Stephanian 瞭解一下這些ERC標準。
什麼是ERC?
ERC(Ethereum Request for Comment)是以太坊的意見徵求稿(RFC)版本,由互聯網工程任務組設計。RFC中包含了以太坊的技術和組織說明,ERC則包含一些以太坊網絡構建技術指南。
ERC是誰編寫的?
ERC標準是由以太坊開發人員為以太坊社區編寫的。他們為了給以太坊平臺創建標準,提交了以太坊改進建議( EIP )——包括協議規範和合同標準。如果EIP被委員會批准並最終確定,它就成為了一個ERC。
EIP的完整列表請參閱:
https://github.com/ethereum/EIPs
ERC有什麼作用?
這些被委員會批准確定的EIP,為以太坊開發人員提供了一套可行的ERC標準。由於EIP的接口是開放的,所以開發人員可以基於這些標準之上構建智能合約。其中ERC-20是整個加密社區中最流行的標準,以太坊平臺上的所有通證都使用這一標準。下面我們就來了解什麼是ERC-20標準,以及其他的一些ERC標準。
ERC-20
ERC-20標準包括以下方法:
totalSupply():返回通證的總供應量。
balanceOf(address _owner):_owner賬戶的賬戶餘額。
transfer(address _to, uint256 _value):發送數量為_value的通證到地址_to,觸發Transfer事件。
transferFrom(address _from, address _to, uint256 _value):從地址_from發送數量為_value的通證到地址_to,觸發Transfer事件。
approve(address _spender, uint256 _value):允許_spender提取一定數量的金額。
allowance(address _owner, address _spender):返回允許_spender從_owner提取的金額。
以上這些方法將會觸發以下事件:
transfer(address indexed _from, address indexed _to, uint256 _value):當token被轉移時則會觸發。
approval(address indexed _owner, addressindexed _spender, uint256 _value):成功調用approve方法後則會觸發。
ERC-20標準於2015年被提出,並於2017年9月正式確定,這是通證標準化的一個很好的開始。但是,社區中的一些開發人員指出,這個標準存在缺陷和漏洞。另外,有些用例的確需要使用不同的標準,下面介紹一些其他的ERC標準。
ERC-223
狀態:打開
提出日期:2017年5月3日
開發人員Dexaran詳細描述了ERC-223標準適用的兩種場景:
在ERC20通證標準中執行交易有兩種方式:
1.transfer方法。
2.approve + transferFrom 機制。
通證餘額只是通證合約中的一個變量。
通證的交易在合同中的表現是變量的變化:轉出賬戶的餘額將減少,接收賬戶的餘額將增多。
交易發生時, transfer方法不會通知接收賬戶,接受賬戶也將無法識別傳入交易!下面是我寫的一個例子,來展示導致交易未處理和資金損失的過程 。
如果接收賬戶接受到的是合約,用戶必須使用approve +transferFrom 機制來轉移通證;如果接收賬戶是外部帳戶地址,用戶必須通過 transfer方法轉移通證;如果選擇了錯誤的方法,通證將被卡在合約中(合約將不會識別交易),那麼,我們將無法提取這些被卡住的通證。
Dexaran提出的ERC-223標準就解決了這一問題,而且,它與ERC-20標準非常相似。當通證轉移到智能合約時,該合約的一個特殊方法tokenFallback將允許接收合約、拒絕通證或觸發進一步的操作。在大多數情況下,tokenFallback方法可以用來代替approve方法。
ERC-621
狀態:打開
提出日期:2017年5月1日
ERC-621標準是ERC-20通證標準的擴展。該標準增加了兩個額外的方法:increaseSupply 和decreaseSupply,能夠增加和降低流通中的代幣供應量。而ERC-20標準僅允許單個通證發放事件,這就限制了一個固定的不可更改的供應量。而ERC-621標準則建議totalSupply是可以修改的。
ERC-721
狀態:打開
提出日期: 2017年9月22日
ERC-721標準與ERC-20標準、ERC-23標準非常不同,它描述了一種不可互換的通證。這就意味著每個通證各不相同,並且每個通證對不同的用戶具有不同的值。比如以太貓(CryptoKittes):每個數字貓都是一個獨立存在的商品,其價值取決於該種類的稀有性和用戶的喜好。
ERC-721通證標準可以在任何一個交易中使用,但通證的價值則是“與每個通證相關聯的唯一性和稀缺性的結果”。該標準的函數包括name, symbol, totalSupply, balanceOf, ownerOf ,approve , takeOwnership , transfer , tokenOfOwnerByIndex, tokenMetadata。
ERC-721標準還定義了兩個事件:Transfer和Approval。Gerald Nash(傑拉爾德·納什)的文章就很好地解釋了可互換性這一概念。
GeraldNash文章:剖析ERC721
鏈接:https://medium.com/crypto-currently/the-anatomy-of-erc721-e9db77abfc24
ERC-827
狀態:打開
提出日期:2018年12月1日
ERC-20標準的另一個擴展是ERC-827標準,它允許用戶轉移通證,持有者也能允許第三方使用通證。以太坊上的通證可以被其他應用程序重用,這其中也包括錢包和交換機。在需要支持第三方動態消費限額調整時,這一點非常有用。另外,最重要的一點是,由於它是ERC-20標準的擴展,所以它也跟ERC-20標準兼容。
該標準中的一些方法如下所示:
transferFrom(address_from, address _to, uint256 _value, bytes _data) returns (bool success)
function approve(address_spender, uint256 _value, bytes _data) returns (bool success)
以上便是幾個比較知名ERC標準的介紹。
原文鏈接:
https://medium.freecodecamp.org/lets-talk-about-the-ethereum-token-standards-you-need-to-know-8af9fcb7e54b
資源
Gerald Nash(傑拉爾德·納什)所著的《對ERC721的解剖》
文章鏈接:
https://medium.com/crypto-currently/the-anatomy-of-erc721-e9db77abfc24
Leonid Beder(列昂尼德·比德爾)所著的《新ERC223令牌》
文章鏈接:
https://medium.com/kinfoundation/the-new-erc223-token-standard-8dddbf1a5909
Lucas K(盧卡斯·奇)所著的《ERC標準能否推動以太坊向前發展?ERC-20,ERC-223,ERC-721》
文章鏈接:
https://medium.com/wepower/erc-standards-to-move-ethereum-forward-erc-20-erc-223-erc-721-e1712456449d
Jim McDonald(吉姆·麥克唐納)所著的《解讀ERC-20令牌合同》
文章鏈接:
https://medium.com/@jgm.orinoco/understanding-erc-20-token-contracts-a809a7310aa5
Dexaran所著的《通證開發人員的魅力》
文章鏈接:
https://www.reddit.com/r/Ubiq/comments/6uhl19/an_appeal_to_token_developers_erc20_token/
Github平臺上的ERC827
鏈接:
https://github.com/ethereum/EIPs/issues/827
閱讀更多 幣圈小能手 的文章