ERC20 中文版簡單總結即:代幣的標準接口。git
下面的標準容許在智能合約中代幣的標準API的實現。 該標準提供了轉帳代幣的基本功能,並容許批准代幣,以便其餘鏈上第三方可使用這些代幣。github
標準接口容許以太坊上的任一代幣能夠被其餘應用程序重用:從錢包轉到去中心化的交易所。安全
代幣微信
方法網絡
注意: 調用者必須處理 returns (bool success) 返回的 false 。調用者必定不能假設從不返回 false !app
name區塊鏈
返回代幣的名字 - 好比 "MyToken" 。Returns the name of the token - e.g. "MyToken".ui
可選的 - 該方法能夠用來改善可用性, 但接口及其餘合約必定不能指望這些值存在。(譯者注:即不能假設 name 必定能夠返回代幣名字)token
function name() view returns (string name)接口
symbol
返回代幣的標識符。 如 「HIX」。
可選的 - 該方法能夠用來改善可用性, 但接口及其餘合約必定不能指望這些值存在。(譯者注:即不能假設 name 必定能夠返回代幣名字)
function symbol() view returns (string symbol)
decimals
返回代幣使用的小數點位數 - 如 8 ,意思是代幣數量除以 100000000 以獲得表明用戶的最小單位。
可選的 - 該方法能夠用來改善可用性, 但接口及其餘合約必定不能指望這些值存在。(譯者注:即不能假設 name 必定能夠返回代幣名字)
function decimals() view returns (uint8 decimals)
totalSupply
返回所有的代幣供應量。Returns the total token supply.
function totalSupply() view returns (uint256 totalSupply)
balanceOf
返回 _owner 地址的帳戶餘額。
function balanceOf(address _owner) view returns (uint256 balance)
transfer
轉帳 _value 數量的代幣給地址 _to , 且必定會觸發 Transfer 事件。 若是 _from 帳戶餘額不足,則該方法應該 throw 。
注意 值爲0的轉帳必須當作正常轉帳處理且觸發 Transfer 事件。
function transfer(address _to, uint256 _value) returns (bool success)
transferFrom
從 _from 地址轉帳 _value 給地址 _to ,且必須觸發 Transfer 事件。
transferFrom 方法用於取款工做流,容許合約表明你來轉帳代幣。 好比這能夠用於容許合約代幣你來轉帳代幣,或以子貨幣來收取費用。 若是 _from 帳戶沒有有意的經過某種機制受權消息的發送者,則該方法應該 throw 。
注意 值爲0的轉帳必須當作正常轉帳處理且觸發 Transfer 事件。
function transferFrom(address _from, address _to, uint256 _value) returns (bool success)
approve
容許 _spender 從你的帳戶屢次取款,最大額度爲 _value 。若是該方法再次調用,會用 _value 從新當前的額度。
注意:爲了防止攻擊向量,如這個這裏所述 以及 這裏討論,客戶應該確保建立用戶接口,爲相同花費者設置其餘值的最大額度前,首先設置當前額度爲 0 。 儘管合約自己不該該強制如此,然而這是爲了容許向後兼容以前部署的合同。
function approve(address _spender, uint256 _value) returns (bool success)
allowance
返回 _spender 還被容許從 _owner 提款的額度。
function allowance(address _owner, address _spender) view returns (uint256 remaining)
Events
Transfer
代幣轉帳時必須觸發,包括價值爲0的轉帳。
建立新代幣的合約,在代幣建立時應該觸發 Transfer 事件,並將 _from 地址設爲 0x0 。
event Transfer(address indexed _from, address indexed _to, uint256 _value)
Approval
任何成功的調用 approve(address _spender, uint256 _value) 都必須觸發該事件。
event Approval(address indexed _owner, address indexed _spender, uint256 _value)
已經有許多 ERC20 兼容的代幣部署在以太坊網絡上。 不一樣的團隊編寫了不一樣的實現,這些團隊有不一樣的權衡:從節約 gas 到提升安全性。
可用的示例實現以下:
https://github.com/ConsenSys/Tokens/blob/master/contracts/eip20/EIP20.sol
再次調用"approve"前增長強制設爲0的實現:
https://github.com/Giveth/minime/blob/master/contracts/MiniMeToken.sol
與該標準有關的歷史連接:
**Vitalik Buterin的原始提議: **
**Reddit discussion: **
https://www.reddit.com/r/ethereum/comments/3n8fkn/lets_talk_about_the_coin_standard/
**Original Issue #20: **
https://github.com/ethereum/EIPs/issues/20
本文做者:HiBlock區塊鏈技術佈道羣-Bob
原文發佈於GitHub
原文地址:
https://github.com/bobjiang/EIPs/blob/master/EIPS-CN/eip-20.md
加微信baobaotalk_com,加入技術佈道羣
線下活動推薦