1. 程式人生 > >區塊鏈100講:如何理解ERC20代幣合約

區塊鏈100講:如何理解ERC20代幣合約

image

前面我們大致介紹了幾種ERC協議,其中ERC20代幣合約可以說在發幣中算是聽到非常多的一個名詞了,說到發幣都會想到這個合約。本文我們就詳細介紹如何理解ERC20代幣合約。

ERC-20最初作為一種嘗試,旨在為以太坊(Ethereum)上的token合約提供一個特徵與介面的共同標準,並且,它現在已經被證明是非常成功的了。ERC-20有很多好處,包括允許錢包顯示數以百計不同token的賬戶餘額;建立一個交易工具,只需提供token合約的地址就可以將更多token列入表中。建立ERC-20相容token的好處很多,以至於在今天,很少有其他token合約用其他方式建立。

1

什麼是代幣(token)合約

目前依舊有“代幣(token)合約到底是什麼”的爭論。本質上來說,一個代幣合約就是一個包含了一個對賬戶地址及其餘額的對映的智慧合約。賬戶餘額表示一種由合約建立者定義的值:一個代幣合約也許使用餘額來表示物理物件,或是表示另一種貨幣價值,還可以表示持有人的名望。餘額的單位通常被稱為token。

image

代幣餘額的地址列表

當token從一個賬戶被轉移到另一個賬戶的時候,代幣合約更新兩個賬戶的餘額。例如,從 0x2299…3ab7 轉移到 0x1f59…3492 10個token將導致餘額列表如下圖所示進行更新:

image

從0x2299…3ab7 傳送10枚token給 0x1f59…3492;

變化部分用紅色標出

如果該token合約允許的話,改變token總體數量有兩種方案。token的總數可以通過鑄造新token來增加。舉個例子,鑄造出100個token到地址 0x4ba5…ae22 餘額變更如下圖所示:

image

鑄造100枚token給0x4ba5…ae22;

變化部分用紅色標出

也可以通過“銷燬”減少token總量,比如,0x4919…413d 銷燬50枚token將導致餘額如下方式變化:

image

銷燬 0x4919…413d 上的50枚token;

變化部分用紅色標出

銷燬token的另一種方式是將token傳送到一個未建立私鑰的地址,通常來說就是0地址。這會使得這些token不可用,在這方面,它與銷燬token有同樣的效果,但並沒有減少token的總數。比如, 0x93f1…1b09 用此種方式銷燬了50枚token將導致如下圖所示的餘額:

image

0x93f1…1b09 傳送50枚token到黑洞地址上;

變化部分用紅色標出

簡單的代幣合約在一個從地址到餘額的對映中儲存上述資訊。當更多複雜的情景出現時,比如分紅,替代性結構或者增補性結構往往更強一些。但是,不管操作上的細節的話,對外部可見的token餘額總是像上面的圖示那樣的。

2

ERC20代幣合約的定義

ERC20 合約是通過合約的地址以及可用的token總數來定義的,但通常還提供一些可選專案,也是為使用者提供更多細節。比如token的名字、符號、小數位等等。

在深入瞭解之前,必須明確一點:代幣合約沒有中心化的登記處,因此無法保證特定名字和符號的唯一性。一旦你建立了一個代幣合約,你應該申請將它加入公共站點,如Etherscan,MyEtherWallet 以及 CoinMarketCap。當然,確保符合網站上的說明,可以最大限度提高申請被接受的機會。

代幣合約的名字是代幣的完整名稱,比如“My token”。名字長度沒有限制,但是太長的話在某些錢包應用中可能顯示不完整,所以最好保持名字的簡潔。

代幣合約的符號是代幣的符號,比如“MYT”。大體相當於股票行情自動收錄機。儘管沒有長度限制,但通常都是三四個字元長度。

小數位這個概念通常容易混淆,通過解釋還是很容易理解的。小數位代表一個token的可分割程度,小數位可取值從0(完全不可分割)到18(幾乎是連續的),甚至還可以更高。技術上講,小數位的數字就是顯示在螢幕上小數點後面跟著的數字。存在小數位的意義在於以太坊不處理小數,將所有的數字價值都當做整數處理。

總髮行量是ERC20代幣合約最後定義的項,而且是唯一一個強制引數。儘管在ERC20標準中沒有明確規定,但是定義總髮行量十分簡單:總髮行量等於所有餘額的總和。總髮行量在上面的例子中已經給出,無須贅述。

本文作者:HiBlock區塊鏈技術佈道群-馮宇

原文釋出於簡書

加微信baobaotalk_com,加入技術佈道群

以下是我們的社群介紹,歡迎各種合作、交流、學習:)

image