区块链100讲:ERC20 中文版
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
1
摘要
ERC20 中文版簡單總結(jié)即:代幣的標(biāo)準(zhǔn)接口。
下面的標(biāo)準(zhǔn)允許在智能合約中代幣的標(biāo)準(zhǔn)API的實(shí)現(xiàn)。 該標(biāo)準(zhǔn)提供了轉(zhuǎn)賬代幣的基本功能,并允許批準(zhǔn)代幣,以便其他鏈上第三方可以使用這些代幣。
2
動(dòng)機(jī)
標(biāo)準(zhǔn)接口允許以太坊上的任一代幣可以被其他應(yīng)用程序重用:從錢包轉(zhuǎn)到去中心化的交易所。
3
規(guī)范
代幣
方法
注意: 調(diào)用者必須處理?returns (bool success)?返回的?false?。調(diào)用者一定不能假設(shè)從不返回?false?!
name
返回代幣的名字 - 比如?"MyToken"?。Returns the name of the token - e.g.?"MyToken".
可選的 - 該方法可以用來改善可用性, 但接口及其他合約一定不能期望這些值存在。(譯者注:即不能假設(shè) name 一定可以返回代幣名字)
function name() view returns (string name)
symbol
返回代幣的標(biāo)識符。 如 “HIX”。
可選的 - 該方法可以用來改善可用性, 但接口及其他合約一定不能期望這些值存在。(譯者注:即不能假設(shè) name 一定可以返回代幣名字)
function symbol() view returns (string symbol)
decimals
返回代幣使用的小數(shù)點(diǎn)位數(shù) - 如?8?,意思是代幣數(shù)量除以?100000000?以得到代表用戶的最小單位。
可選的 - 該方法可以用來改善可用性, 但接口及其他合約一定不能期望這些值存在。(譯者注:即不能假設(shè) name 一定可以返回代幣名字)
function decimals() view returns (uint8 decimals)
totalSupply
返回全部的代幣供應(yīng)量。Returns the total token supply.
function totalSupply() view returns (uint256 totalSupply)
balanceOf
返回?_owner?地址的賬戶余額。
function balanceOf(address _owner) view returns (uint256 balance)
transfer
轉(zhuǎn)賬?_value?數(shù)量的代幣給地址?_to?, 且一定會觸發(fā)?Transfer?事件。 如果?_from?賬戶余額不足,則該方法應(yīng)該?throw?。
注意?值為0的轉(zhuǎn)賬必須當(dāng)做正常轉(zhuǎn)賬處理且觸發(fā)?Transfer?事件。
function transfer(address _to, uint256 _value) returns (bool success)
transferFrom
從?_from?地址轉(zhuǎn)賬?_value?給地址?_to?,且必須觸發(fā)?Transfer?事件。
transferFrom?方法用于取款工作流,允許合約代表你來轉(zhuǎn)賬代幣。 比如這可以用于允許合約代幣你來轉(zhuǎn)賬代幣,或以子貨幣來收取費(fèi)用。 如果?_from?賬戶沒有有意的通過某種機(jī)制授權(quán)消息的發(fā)送者,則該方法應(yīng)該?throw?。
注意?值為0的轉(zhuǎn)賬必須當(dāng)做正常轉(zhuǎn)賬處理且觸發(fā)?Transfer?事件。
function transferFrom(address _from, address _to, uint256 _value) returns (bool success)
approve
允許?_spender?從你的賬戶多次取款,最大額度為?_value?。如果該方法再次調(diào)用,會用?_value?重新當(dāng)前的額度。
注意:為了防止攻擊向量,如這個(gè)這里所述?以及?這里討論,客戶應(yīng)該確保創(chuàng)建用戶接口,為相同花費(fèi)者設(shè)置其他值的最大額度前,首先設(shè)置當(dāng)前額度為?0?。 盡管合約本身不應(yīng)該強(qiáng)制如此,然而這是為了允許向后兼容之前部署的合同。
function approve(address _spender, uint256 _value) returns (bool success)
allowance
返回?_spender?還被允許從?_owner?提款的額度。
function allowance(address _owner, address _spender) view returns (uint256 remaining)
Events
Transfer
代幣轉(zhuǎn)賬時(shí)必須觸發(fā),包括價(jià)值為0的轉(zhuǎn)賬。
創(chuàng)建新代幣的合約,在代幣創(chuàng)建時(shí)應(yīng)該觸發(fā) Transfer 事件,并將?_from?地址設(shè)為?0x0?。
event Transfer(address indexed _from, address indexed _to, uint256 _value)
Approval
任何成功的調(diào)用?approve(address _spender, uint256 _value)?都必須觸發(fā)該事件。
event Approval(address indexed _owner, address indexed _spender, uint256 _value)
4
實(shí)現(xiàn)
已經(jīng)有許多 ERC20 兼容的代幣部署在以太坊網(wǎng)絡(luò)上。 不同的團(tuán)隊(duì)編寫了不同的實(shí)現(xiàn),這些團(tuán)隊(duì)有不同的權(quán)衡:從節(jié)約 gas 到提高安全性。
可用的示例實(shí)現(xiàn)如下:
https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC20/StandardToken.sol
https://github.com/ConsenSys/Tokens/blob/master/contracts/eip20/EIP20.sol
再次調(diào)用"approve"前增加強(qiáng)制設(shè)為0的實(shí)現(xiàn):
https://github.com/Giveth/minime/blob/master/contracts/MiniMeToken.sol
5
歷史
與該標(biāo)準(zhǔn)有關(guān)的歷史鏈接:
**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區(qū)塊鏈技術(shù)布道群-Bob
原文發(fā)布于GitHub
原文地址:
https://github.com/bobjiang/EIPs/blob/master/EIPS-CN/eip-20.md
加微信baobaotalk_com,加入技術(shù)布道群
線下活動(dòng)推薦
技術(shù)工坊|解密區(qū)塊鏈DApp的代碼邏輯,從請求到數(shù)據(jù)存儲都要經(jīng)歷什么?(上海)
技術(shù)沙龍|利用IPFS,去中心化存儲如何讓錢包更安全?(南京)
轉(zhuǎn)載于:https://my.oschina.net/u/3782027/blog/1837407
總結(jié)
以上是生活随笔為你收集整理的区块链100讲:ERC20 中文版的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Requests+正则爬取猫眼电影TOP
- 下一篇: Android测试中被测应用挂了怎么办?