以太坊智能合約開(kāi)發(fā)指南2(理解ERC-20代幣合約)

ERC-20的目標(biāo)是為以太坊上的代幣合約(token contract)提供一組特征與接口的通用標(biāo)準(zhǔn)。通用的標(biāo)準(zhǔn)有很多好處,比如允許錢(qián)包顯示數(shù)以百計(jì)的不同代幣的賬戶(hù)余額額;代幣交易所,只需要知道代幣合約的地址就可以將其列入交易列表中。事實(shí)上,ERC-20已經(jīng)成為目前創(chuàng)建代幣合約的標(biāo)準(zhǔn)。

代幣合約(token contract)是什么?

代幣合約就是一個(gè)包含了賬戶(hù)地址(address)到余額(balance)映射(mapping)的智能合約(smart contract).賬戶(hù)余額表示合約創(chuàng)建者定義的某種權(quán)益,可以是物理實(shí)體,也可以是另一種貨幣,甚至可以是持有人的信用。
變更代幣的總供給(totalSupply)有兩種方式:

  • 鑄造新的代幣來(lái)增加
  • 銷(xiāo)毀現(xiàn)有代幣來(lái)減少,銷(xiāo)毀代幣可以將代幣發(fā)送到一個(gè)未創(chuàng)建私鑰的地址(一般使用0地址)

定義一個(gè)ERC-20代幣合約

一個(gè)ERC-20合約通過(guò)地址和總供給(totalSupply)來(lái)定義,通常還提供一些非必須(optional)的東西,為用戶(hù)提供更多細(xì)節(jié)。包括名字(name),標(biāo)識(shí)(symbol),小數(shù)位(decimals)

  • 名字(name) 是代幣合約的完整名稱(chēng),例如"My Token"。但是為了在一些錢(qián)包應(yīng)用中能顯示完全(可能會(huì)被截?cái)囡@示),這個(gè)名字最好短一點(diǎn)。
  • 標(biāo)識(shí)符(symbol) 是代幣合約的標(biāo)識(shí)符號(hào),比如"MYT"。通常3到4個(gè)字母。
  • 小數(shù)位(decimals) 的存在是因?yàn)橐蕴徊惶幚硇?shù),為了在合約處理的最小單位和用戶(hù)顯示單位之間進(jìn)行轉(zhuǎn)化。例如一個(gè)物理黃金所有權(quán)的代幣合約,合約需要處理的最小單位為克,而用戶(hù)表示的單位是千克,那么小數(shù)位(decimals)設(shè)置為3,即10^3克等于1千克。小數(shù)位的取值規(guī)則為:
    1. 如果代幣合約表示的是不可切分的物體,則取值為0
    2. 如果表示的是一個(gè)有特定小數(shù)位的物體,那么取值就是那個(gè)小數(shù)位
    3. 如果上述兩者都不是,設(shè)置為18
  • 總供給(totalSupply)是定義一個(gè)ERC-20合約需要的最后一個(gè)參數(shù),也是唯一的強(qiáng)制參數(shù)??偣┙o等于所有余額之和。

一個(gè)ERC-20代幣合約的功能

  • balance() 函數(shù)提供查詢(xún)給定地址持有代幣的數(shù)量。任何人都可以查詢(xún),正如所有數(shù)據(jù)在區(qū)塊鏈上都是公開(kāi)的。
  • transfer() 函數(shù)將調(diào)用者地址的代幣轉(zhuǎn)移指定數(shù)量到指定地址。系統(tǒng)不會(huì)對(duì)目的地址做驗(yàn)證(也無(wú)法驗(yàn)證),所以如果將代幣發(fā)送到一個(gè)沒(méi)有擁有者的地址上,那代幣就遺失了。
    transfer() 的使用有局限性,它只能由函數(shù)調(diào)用者來(lái)指定代幣的轉(zhuǎn)移,不能由合約按預(yù)定算法進(jìn)行代幣轉(zhuǎn)移。而approve()和transforFrom()配合使用則可以完成這個(gè)目標(biāo)。
  • approve() 函數(shù)允許調(diào)用者給另一個(gè)地址(通常是一個(gè)智能合約)授信一定額度代幣,稱(chēng)之為配額(allowence),在這個(gè)額度內(nèi),指定地址(智能合約)可以支出調(diào)用者的賬戶(hù)代幣。
  • transferFrom() 調(diào)用者在配額(allowence)范圍內(nèi),從一個(gè)地址(_from)將代幣轉(zhuǎn)移到另外一個(gè)地址(_to)。
  • allowance() 函數(shù)提供查詢(xún)擁有者地址(_owner)配額給消費(fèi)者地址(_spender)的金額。
    1. 注意:任何人都可以查詢(xún)到所有的配額情況,正如所有信息在區(qū)塊鏈上都是公開(kāi)的。
    2. 另外,配額(allowance)是軟性的,即單獨(dú)或者累積的配額可以超過(guò)這個(gè)地址上的余額。余額的驗(yàn)證需要在transferFrom函數(shù)或者其它根據(jù)配額進(jìn)行支付的函數(shù)中進(jìn)行。

ERC-20代幣合約中的事件

ERC-20定義了在合約中的操作,兩類(lèi)事件是必須要被觸發(fā)的。

  • 第一類(lèi)事件是Transfer(),這個(gè)事件將放出從一個(gè)地址轉(zhuǎn)移到另一個(gè)地址的代幣轉(zhuǎn)移細(xì)節(jié)。
  • 第二類(lèi)事件是Approval(),這個(gè)事件將放出一個(gè)地址許可另外一個(gè)地址轉(zhuǎn)移代幣配額的細(xì)節(jié)。
  • 這些細(xì)節(jié)可以讓外部應(yīng)用(Dapp)跟蹤地址余額和配額的變更,而無(wú)需查詢(xún)區(qū)塊鏈。
  • 鑄造代幣會(huì)發(fā)出一個(gè)源地址(_from)為0的Transfer()事件。
  • 銷(xiāo)毀代幣時(shí),沒(méi)有事件發(fā)出。因此,ERC-20代幣合約通常使用transfer()函數(shù)發(fā)出代幣到0地址來(lái)銷(xiāo)毀代幣,

參考文檔 https://medium.com/@jgm.orinoco/understanding-erc-20-token-contracts-a809a7310aa5

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文翻譯自:https://github.com/ConsenSys/smart-contract-best-pr...
    tolak閱讀 5,269評(píng)論 4 21
  • 比特幣只是一個(gè)更廣泛的生態(tài)系統(tǒng)的一個(gè)組成部分(雖然是重要的一個(gè)),通常與之非常相似的貨幣稱(chēng)為代幣。在本章中,我們將...
    Nutbox_Lab閱讀 2,512評(píng)論 0 7
  • 這幾天帶著小苗又來(lái)北京了,從山東趕回湖南,又從湖南來(lái)北京小住,過(guò)陣子又要回山東。謝天謝地,他是一個(gè)經(jīng)得起折騰的小孩...
    貝殼在攀巖閱讀 225評(píng)論 0 0
  • 1、 前幾天,一位學(xué)生家長(zhǎng)在我辦公室外面的走廊上來(lái)回轉(zhuǎn)悠。我問(wèn)她找誰(shuí),她說(shuō)找孩子的班主任,班主任正在上課中,她在等...
    蘇長(zhǎng)兵閱讀 298評(píng)論 0 1
  • 什么是暗戀? 簡(jiǎn)單來(lái)說(shuō),暗戀就是沒(méi)有說(shuō)出口的喜歡。 暗戀是在古時(shí)候就有的一種情愫,也就是所謂的單相思。相思是痛苦的...
    半得華暉閱讀 495評(píng)論 0 1

友情鏈接更多精彩內(nèi)容