區塊鏈100講:ERC20 中文版

image

1

摘要

ERC20 中文版簡單總結即:代幣的標準接口。git

下面的標準容許在智能合約中代幣的標準API的實現。 該標準提供了轉帳代幣的基本功能,並容許批准代幣,以便其餘鏈上第三方可使用這些代幣。github

2

動機

標準接口容許以太坊上的任一代幣能夠被其餘應用程序重用:從錢包轉到去中心化的交易所。安全

3

規範

代幣微信

方法網絡

注意: 調用者必須處理 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)

4

實現

已經有許多 ERC20 兼容的代幣部署在以太坊網絡上。 不一樣的團隊編寫了不一樣的實現,這些團隊有不一樣的權衡:從節約 gas 到提升安全性。

可用的示例實現以下:

https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC20/StandardToken.sol

https://github.com/ConsenSys/Tokens/blob/master/contracts/eip20/EIP20.sol

再次調用"approve"前增長強制設爲0的實現:

https://github.com/Giveth/minime/blob/master/contracts/MiniMeToken.sol

5

歷史

與該標準有關的歷史連接:

**Vitalik Buterin的原始提議: **

https://github.com/ethereum/wiki/wiki/Standardized_Contract_APIs/499c882f3ec123537fc2fccd57eaa29e6032fe4a

**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,加入技術佈道羣

線下活動推薦

技術工坊|解密區塊鏈DApp的代碼邏輯,從請求到數據存儲都要經歷什麼?(上海)

技術沙龍|利用IPFS,去中心化存儲如何讓錢包更安全?(南京)

image

image

相關文章
相關標籤/搜索