以太坊ERC標準簡介:ERC20/ERC721/ERC223/ERC621/ERC827

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

若是你但願立刻開始學習以太坊DApp開發,能夠訪問匯智網提供的出色的在線互動教程:github

什麼是ERC?

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

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

最終肯定的EIP爲以太坊開發者提供了一套可實施的標準。 這使得智能合約能夠遵循這些通用的接口標準來構建。 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提款的代幣數量上限

以上函數將觸發如下事件:ui

  • 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標準。加密

ERC-223

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

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

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

  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)

原文連接:以太坊通證標準簡介:ERC20,/ERC721/ERC223/ERC621/ERC827

相關文章
相關標籤/搜索