以太坊通證標準ERC系列

最著名的兩個以太坊通證標準是代幣標準ERC20和數字資產標準ERC721。在本文中,除了介紹這兩個流行的ERC以太坊標準,還將介紹其餘一些針對特定應用場景的ERC20改進標準:ERC22三、ERC621和ERC827。git

什麼是ERC?

ERC表明「Etuereum Request for Comment",這是Ethereum版的意見徵求稿 (RFC),RFC是由互聯網工程任務組制定的一個概念。 RFC中的備忘錄包含技術和組織注意事項。 對於ERC,意見徵求稿中包括一些關於以太坊網絡建設的技術指導。github

ERC是Ethereum開發者爲以太坊社區編寫的。 所以,ERC的建立流程中包括開發人員。 爲了建立一個以太坊平臺的標準,開發人員應當提交了一個以太坊改進方案(EIP), 改進方案中包括協議規範和合約標準。 一旦EIP被委員會批准並最終肯定,它就成爲ERC。 EIP的完整列表能夠在這裏找到。網絡

最終肯定的EIP爲以太坊開發者提供了一套可實施的標準。 這使得智能合約能夠遵循這些通用的接口標準來構建。app

ERC-20是整個加密社區中最爲人熟知的標準,在Ethereum平臺之上發佈的大多數通證(token)都使用它。函數

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提取限額_value的代幣
  • allowance(address _owner,address _spender):返回_spender可從_owner提款的代幣數量上限

以上函數將觸發如下事件:區塊鏈

  • transfer(address indexed _from,address indexed _to,uint256 _value):每次進行代幣轉帳時都會觸發
  • approval(address indexed _owner,address indexed _spender,uint256 _value):調用approve()方法將觸發該事件

ERC-20於2015年提出並於2017年9月正式實施。這是代幣標準化的一個很好的起點。 然而,開發者社區 已經注意到它存在一些缺陷和漏洞,此外,還有一些場景它不能很好的知足。所以陸續提出了其餘的ERC標準。ui

ERC-223

  • 狀態:打開
  • 建議日期:3/5/2017

開發人員Dexaran在一篇文章中詳細描述了ETC20不適合的兩種場景:加密

「在ERC20中執行交易有兩種方式:3d

  1. transfer函數。
  2. approve + transferFrom機制。

通證餘額只是通證合約中的一個變量。

通證的交易是合約內部變量的變化。 轉出帳戶的餘額將減小,轉入帳戶的餘額將增長。

交易發生時, transfer()函數不會通知轉入帳戶。 所以轉入帳戶將沒法識別傳入的交易! 我寫了一個例子,能夠展現這一致使未處理的交易和資金損失的過程 。

所以,若是接收帳戶是合約,那麼必須使用approve + transferFrom機制來發送通證。

若是接受帳戶是外部擁有賬戶,則必須經過transfer函數發送通證。 若是選擇了錯誤的機制,通證將卡在合約內(合約將不會識別交易),沒有辦法來提取這些卡殼的通證。「

他對這個問題提出的解決方案包含在ERC-223中 。 它與ERC-20標準很是類似,但解決了上述問題。當通證轉移到智能合約帳戶時,該合約的特殊函數tokenFallback() 容許接收方合約拒絕令牌或觸發進一步的操做。 大多數狀況下,這能夠用來代替approve()函數。

ERC-621

  • 狀態:打開
  • 建議日期:2017/5/1

ERC-621是ERC-20標準的擴展。 它增長了兩個額外的功能, increaseSupply和decreaseSupply 。這能夠增長和減小流通中的令牌供應。 ERC-20只容許單一的通證發放事件。 這將供應量限制在一個固定的不可改變的數目。 ERC-621建議totalSupply應當是可修改的。

ERC-721

  • 狀態:打開
  • 建議日期:9/22/2017

ERC-721與ERC-20和ERC-223都大不相同。 它描述了一個不可互換的通證。 這意味着每一個通證是徹底不一樣的,而且每一個通證對不一樣的用戶都有不一樣的價值。 理解這種通證的一個方法就是回憶CryptoKittes。 每個數字貓都是獨立的,其價值取決於其稀缺性和用戶的購買慾。

ERC-721令牌可用於任何交易所,但通證價值是「每一個通證的惟一性和稀缺性所決定的結果」。標準中規定的接口函數包括name、symbol、totalSupply、balanceOf、ownerOf、approve、takeOwnership 、 transfer 、tokenOfOwnerByIndex和tokenMetadata 。 它還定義了兩個事件: Transfer和Approval 。 Gerald Nash的 這篇文章很好地解釋了可互換性的概念。

ERC-827

  • 狀態:打開
  • 建議日期:1/12/2018

ERC-20標準的另外一個擴展是ERC-827。 它容許轉讓通證並容許持有人容許第三方使用通證。 以太坊上的通證能夠被其餘應用程序重複使用,這其中也包括錢包和交易所。 當須要支持第三方動態消費限額調整時這一點很是有用。

最重要的是,因爲ERC-827是ERC-20的延伸,它也與ERC-20兼容。

一些提議的接口函數包括:

  • transferFrom(address _from,address _to,uint256 _value,bytes _data) returns (bool success)
  • approve(address _spender,uint256 _value,bytes _data) returns (bool success)

若是你但願高效的學習以太坊DApp開發,能夠訪問匯智網提供的最熱門在線互動教程:

其餘更多內容也能夠訪問這個以太坊博客

相關文章
相關標籤/搜索