ERC-20 代幣簡介
首頁
文章
ERC-20 代幣簡介

ERC-20 代幣簡介

中等
發佈時間 Jul 31, 2020更新時間 Dec 28, 2022
12m

目錄


前言

Vitalik Buterin 在 2014 年創立了以太坊,並定位為推出去中心化應用程式 (DApp) 的開源平台。由於 Buterin 認為比特幣協定缺乏靈活性,因此他在建立新區塊鏈時有許多動機皆源自於此。
自推出以來,以太坊區塊鏈深深吸引開發人員、企業及企業家,同時衍生出發展迅速的產業,用戶更因此推出智能合約和分散式應用程式。
在本文中,我們會探討 ERC-20 標準,這是建立 代幣時的重要框架。雖然是以太坊網路的專屬框架,但也啟發了其他區塊鏈標準,例如幣安鏈的 BEP-2


什麼是 ERC-20 標準?

在以太坊中,ERC 指的是以太坊評論請求。這些皆為概述以太坊程式化標準的技術文件。請勿與以太坊改進提案 (EIP) 混淆,這就像是比特幣的 BIP,可針對協定本身提出改善方案。另外,ERC 旨在建立可讓應用程式與合約輕鬆互動的慣例。

ERC-20 由 Vitalik Buterin 和 Fabian Vogelsteller 於 2015 年撰寫,提出了相對簡單的以太坊代幣格式。只要遵循大綱的內容,開發人員即可省下很多開發時間。相反地,他們可以建立廣泛用於此產業的基礎。

一旦建立了新的 ERC-20 代幣,他們就會自動與支援 ERC-20 標準(軟體錢包、 硬體錢包、 交易所等)的服務和軟體互相操作。

請注意,ERC-20 標準已發展成 EIP(特別是 EIP-20)。由於受到廣泛使用的緣故,因此在原始提案的幾年後演變為此情況。但是,即使多年後,名稱「ERC-20」仍然存在。


快速回顧以太坊代幣

不同於 ETH(以太坊的原生加密貨幣),ERC-20 代幣並非由帳戶持有。這些代幣只會存在於合約中,就像是自含型資料庫,更為代幣指定了規則(也就是名稱、幣種、可分割性),並保留將用戶餘額映射至其以太坊位址的清單。

若要移動代幣,用戶必須將交易傳送至合約,同時要求它在其他地方配置一些他們的餘額。例如,如果 Alice 想將 5,000 枚 BinanceAcademyToken 傳送給 Bob,她就會調用 BinanceAcademyToken 智能合約內部的功能,並要求如此操作。



看似定期的以太坊交易中含有她的調用,且該交易會支付 0 ETH 給代幣合約。該調用也會包含在交易的其他欄位中,並指出 Alice 希望進行的操作 – 在我們的情況下,也就是將代幣轉帳給 Bob。

雖然她並不是傳送以太幣,還是必須支付以其計價的手續費,以便將她的交易加入 區塊中。如果她未持有 ETH,轉帳代幣前就必須存入一些額度。
以下是上述內容在 Etherscan 的現實世界範例:某個人調用了 BUSD 合約。雖然 價值 欄位顯示已傳送 0ETH,但您還是看得到代幣已轉帳且手續費已付清。

既然已更新目前進度,那就進一步了解典型 ERC-20 合約的結構吧。 


ERC-20 代幣如何建立?



若要遵循 ERC-20,則您的合約必須包含六項強制函數:totalSupplybalanceOftransfertransferFromapproveallowance。此外,您還可以指定 namesymboldecimal 等可選函數。從這些函數的名稱看來,您應該知道它們的功用為何。如果不確定的話,別擔心 – 我們會一步步介紹。 

以下是出現在以太坊專門建立之 Solidity 語言的函數。


totalSupply

function totalSupply() public view returns (uint256)
當用戶調用時,上述函數會傳回合約持有之代幣的總供給量


balanceOf

function balanceOf(address _owner) public view returns (uint256 balance)
不同於 totalSupplybalanceOf 需要參數(位址)。調用時,則會傳回該位址代幣持有的餘額。請記住,以太坊網路上皆為公開帳戶,因此只要知道位址,即可查詢任何用戶的餘額。


transfer

function transfer(address _to, uint256 _value) public returns (bool success)
transfer 會巧妙地將代幣從一位用戶轉帳給另一位用戶。在這裡,您會提供欲傳送的位址及轉帳金額。
調用時,transfer 會觸發稱為事件 的項目(此情況為事件 transfer),基本上可要求區塊鏈在其中加入引用項目。


transferFrom

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
transferFrom 函數可作為替代 transfer 的實用函數,同時為去中心化應用程式啟用更多程式化的狀態。就像是 transfer,該函數用於移動代幣,但那些代幣不一定必須屬於調用合約的人員。 

換句話說,您可以授權某個人 – 或另一份合約 – 代表自己轉帳資金。可能用例包括:支付基於申購的服務,且您不想為此每天/每週/每月手動傳送付款。相反地,您會讓程式幫您完成所有操作。

此函數會觸發與 transfer 相同的事件。


approve

function approve(address _spender, uint256 _value) public returns (bool success)
從可程式化角度來看,approve 是另一個實用的函數。透過此函數,您可以限制智能合約從您餘額提現的代幣數量。若沒有此函數,您就會面臨合約失效(或遭利用) 並竊取您所有資金的風險。
讓我們再次以申購模型為例。假設您有大量的 BinanceAcademyToken,也想設定串流 DApp 的每週定期付款。您日以繼夜研究了 幣安學院的內容,因此您不想每週又耗費時間手動建立交易。
您有大量的 BinanceAcademyToken 餘額,且遠遠超過支付申購的必要金額。若要防止 DApp 全數耗盡,您可以透過 approve 設定限制。假設您的申購成本每週會扣除 1 枚 BinanceAcademyToken。如果您為 20 枚代幣的核准價值設定上限,即可在 5 個月內自動支付申購項目。

在最壞的情況下,如果 DApp 嘗試提現您所有資金或發現漏洞,您就只會損失 20 枚代幣。這可能不太理想,但絕對比損失所有的持有貨幣更有吸引力。

調用時,approve 會觸發 approval 事件。就像是 transfer 事件,其會將資料寫入區塊鏈。


allowance 

function allowance(address _owner, address _spender) public view returns (uint256 remaining)
allowance 可以與 approve 一起使用。當您獲得管理代幣的合約權限時,您可能會使用此函數來查看還能夠提現的代幣數量。例如,如果您申購時用掉了 20 枚核准代幣中的 12 枚,調用 allowance 函數應該會傳回 8 的總額。


可選函數

先前討論的函數具有強制性。另一方面,不需要加入 namesymboldecimal,但這些函數可以讓您的 ERC-20 合約更流暢。分別來說的話,這些可供您新增人類可讀的名稱、設定幣種(即 ETH、BTC、BNB(幣安幣)),以及指定代幣會由多少個小數位分割。例如,比起代表財產所有權的代幣,如果是作為貨幣的代幣,盡量分割會更有幫助。


如需查看現實合約中這些元素的情況,請檢視 GitHub 的這個範例


ERC-20 代幣有什麼功用?



只要結合上述所有函數,我們就會得到 ERC-20 合約,接著可查詢 總供給量、檢查餘額、轉帳資金,以及授予其他 DApp 為我們管理代幣的權限。

大部分針對 ERC-20 代幣提出的申訴皆與其靈活性有關。設定慣例並不會限制發展,因此各方得以實行其他功能,並設定特定參數來符合自己的需求。


穩定幣

穩定幣 (與法幣掛鉤的代幣)通常會採用 ERC-20 代幣標準。其中一項範例就是稍早引用的 BUSD 合約交易,且大多數主流穩定幣也有提供此格式。

如果是典型的法幣支援穩定幣,發行者會持有歐元、美元等儲備金。接著,他們會為儲備金中的每個單位發行代幣。這意味著如果收益池妥善保管了 10,000 美元,發行者即可建立 10,000 枚代幣,且每次可贖回 1 元。

從技術上來說,您可以非常輕鬆地在以太坊中實行。發行者只會推出包含 10,000 枚代幣的合約。接著,他們會將其分發給用戶,並承諾他們稍後能以一定數量的法幣贖回代幣。 

用戶可以使用代幣完成很多事情 – 他們可以買入商品和服務,或是用於 DApp 中。或者,他們能夠要求發行者立即交換代幣。在這種情況下,發行者會銷毀傳回的代幣 (使其無法使用)並從他們的儲備金提現正確金額的法幣。

如上所述,治理此系統的合約相對來說非常簡化。但是,推出穩定幣需要處理很多外部因素,例如物流、合規性等。


證券型代幣

證券型代幣類似於穩定幣。就合約層級來說,兩者以相同方法運作時甚至完全一樣,差別在於發行者的層級。證券型代幣代表證券,例如股票、債券或實體資產。一般來說(雖然不一定如此),其會授予持有者某種企業或商品的權益。


功能型代幣

功能型代幣可能是現今最常見的代幣類型。不同於前兩項發行代幣,它們並沒有接受任何支援。如果資產支援代幣是航空公司的股份,那麼功能型代幣就像是飛行常客獎勵計劃:提供功能但不具備外在價值。功能型代幣可用於大量用例:遊戲中的貨幣、去中心化應用程式的燃料、會員積分等豐富內容。



您可以挖掘 ERC-20 代幣嗎?

您可以挖掘以太幣 (ETH),但無法挖掘代幣 – 建立新代幣時,我們會說已鑄造代幣。當合約發行時,開發人員即會根據他們的計劃和路線圖分配供給量。
一般來說,操作時會透過首次代幣發行 (ICO)、首次交易所發行 (IEO) 或證券型代幣發行 (STO) 完成。您可能會遇到各種縮寫詞,但這些概念都相當類似。投資者會將以太幣傳送至合約位址,然後收到新代幣的回報。收集到資金後,即會用於資助該專案的進一步發展。用戶預期能夠使用他們的代幣(立即或稍後使用),或是在專案發展起來後轉售來獲得收益。

代幣不需要自動分配。許多群眾募資活動可讓用戶使用多種不同的數位貨幣付款(例如 BNB(幣安幣)、BTC、ETH 及 USDT)。接著會將各自餘額分配給用戶提供的位址。


ERC-20 代幣的優點和缺點

ERC-20 代幣的優點

同質化

ERC-20 為同質化代幣 – 每單位皆可互相交換。如果您持有 BinanceAcademyToken,那麼無論是哪種特定代幣都沒關係。您可以交易其他人的代幣,且兩者具備相同的功能,就像現金或黃金一樣。

如果您的代幣是為了作為某種貨幣,這就是很理想的情況。您不會希望個別單位的特徵很明顯,因為這會因此變為非同質化,且比起其他代幣,部分代幣會變得更有價值 – 或更沒有價值,使用時的目的也會受到損害。


靈活性

如先前區段探討的內容所述,ERC-20 代幣的自訂性很高,並可推出各種應用程式的特製版本。例如,它們可以用於遊戲貨幣、會員積分計劃、 數位收藏品,甚至是代表藝術或財產權。


普及性

在加密貨幣產業中,ERC-20 的普及性就是吸引人將其作為藍圖的原因。市場上有太多交易所、錢包及智能合約皆相容於新發行的代幣。而且,開發人員支援和文件也非常豐富。 


ERC-20 代幣的缺點

可擴展性

與許多加密貨幣網路一樣,以太坊還是有發展中的困難。按照目前的形式,這並未妥善擴展 – 嘗試在尖峰時間傳送交易時,即會導致高額手續費和延遲情況。如果您發行 ERC-20 代幣時遇到網路堵塞的情況,其可用性就會受到影響。

這並非以太坊專屬的問題,而是在安全分散式系統中必須有的權衡取捨。社群計劃在向以太坊 2.0 轉移過程中解決這些問題,其中會實行以太坊等離子體 (Plasma)以太坊 Casper 等升級內容。
深入了解區塊鏈可擴展性:側鏈和支付管道中的可擴展性問題。 


詐騙

雖然技術本身不成問題,但就某些方面來說,發行代幣的便利性也算是一項缺點。我們可以輕而易舉地建立簡單的 ERC-20 代幣,意味著任何人都辦得到 – 無論好壞。

因此,您應該謹慎選擇投資的項目。市場上有很多偽裝成區塊鏈專案的金字塔和龐氏騙局。  投資前自行研究一番,接著自己判斷這是不是合法的機會。

 

ERC-20、ERC-1155、ERC-223、ERC-721 – 差異在哪裡?

ERC-20 為第一個(也是目前為止最受歡迎的)以太坊代幣標準,但並非唯一的標準。多年來誕生了許多其他的標準,包括提出 ERC-20 改善方案,或是嘗試共同達成不同的目標。

有些較少見的標準會用於非同質化代幣 (NFT)。有時候,只要持有不同屬性的獨特代幣,對您用例的幫助其實很大。如果您想將獨一無二的藝術品、遊戲資產等項目代幣化,這些合約類型之一可能更有吸引力。
例如,ERC-721 標準用於紅極一時的謎戀貓 DApp。這類合約為用戶提供了 API 來鑄造專屬的非同質化代幣,以及編碼中繼資料 (影像、說明等)。

ERC-1155 標準可視為 ERC-721 和 ERC-20 的改良方案,其概述了在相同合約中支援同質化和非同質化兩種代幣類型的標準。

ERC-223 或 ERC-621 等其他選項則是為了改善可用性。前者落實了安全保障,以免出現意外的代幣轉帳情況。後者則新增了額外函數,藉此增減貸幣供給量。

如需了解更多的 NFT 主題,請務必查看加密貨幣收藏品和非同質化代幣 (NFT) 的指南


總結

ERC-20 標準已主導加密貨幣資產世界多年,且我們不難看出原因何在。透過相對輕鬆的可用性,任何人皆可部署簡易合約來符合廣泛的用例(功能型代幣、穩定幣等)。但是,ERC-20 的確缺乏一些其他標準所賦予的功能。後續的合約類型是不是會取而代之,我們可以繼續觀察下去。