跳到正文

ERC-20

ERC-20 是以太坊同質化代幣的標準介面。瞭解餘額、轉帳、額度和授權如何運作,以及這項標準不保證哪些事項。

更新於

僅供教育用途,不構成投資建議。投資可能導致損失。

直接答案

ERC-20 是以太坊上同質化代幣合約的標準介面。錢包、交易所和去中心化應用程式可以使用相同的呼叫來讀取供應量或餘額、轉移代幣,以及授權另一個地址在限定額度內支出。同質化是指同一代幣的等量單位可相互替代。

核心介面包括:

  • 用於讀取供應量和帳戶餘額的 totalSupplybalanceOf
  • 用於轉出呼叫者代幣的 transfer
  • 用於設定和讀取支出方額度的 approveallowance
  • 用於在額度內從所有者餘額中支出的 transferFrom;以及
  • 用於記錄轉帳和授權的 TransferApproval 事件。

這項標準定義的是互通性,而不是資產品質。符合 ERC-20 並不保證供應量固定、市場價值公允、能夠贖回、具有流動性、管理安全,甚至不保證各種實作的行為完全一致。

運作方式

ERC-20 餘額是代幣合約狀態中與某個地址關聯的一筆記錄。錢包只是顯示該狀態,並不持有單獨的代幣檔案。當 transfer(to, amount) 成功時,合約會減少呼叫者的餘額、增加接收方的餘額,並發出 Transfer 事件。使用者通常以 ETH 支付網路 Gas。如果執行回滾,代幣狀態變更會被撤銷,但已經消耗的 Gas 不會全額退還。

委託支出使用額度。呼叫 approve(spender, amount) 會設定該支出方可以從呼叫者餘額中使用的金額。隨後,支出方可以呼叫 transferFrom(owner, to, amount),而 allowance(owner, spender) 會顯示剩餘額度。一項授權只屬於一個網路上一份代幣合約中的一組所有者與支出方,並非對錢包內全部資產的許可。

再次呼叫 approve 會覆寫原有額度。EIP-20 規範提醒使用者介面,在把現有額度改為另一個非零值之前,先將其設為 0;否則,交易排序可能使支出方同時使用新舊兩個額度。把額度設為 0 可以阻止該所有者、支出方與代幣組合未來的 transferFrom 呼叫,但不能追回已經轉出的代幣。

在 EIP-20 中,namesymboldecimals 是可選的中繼資料方法。decimals 影響顯示單位,不影響合約中的整數記帳。這項標準也不規定代幣如何鑄造或銷毀、轉帳能否暫停或課稅、地址能否被凍結,或代理邏輯能否升級。這些行為必須透過已部署程式碼、目前實作和管理權限來核查。

範例

假設一個錢包持有 1,000 單位的 ERC-20 代幣,使用者想透過去中心化交易所路由器兌換其中 100 單位。使用者先提交 approve(router, 100)。如果成功,路由器就可以呼叫 transferFrom(user, pool, 100);全部支出後,通常的剩餘額度為 0。授權交易和兌換交易是兩項獨立的鏈上操作,因此可能各自需要 Gas,也可能分別失敗。

批准可設定的最大值可以避免反覆授權,但如果路由器、其升級權限或用於取得授權的介面遭到入侵,就會有更大金額在更長時間內處於風險中。限定額度可以縮小這種風險曝險,但無法消除智慧合約、代幣價格、流動性或交易風險。

風險

  • 合約或網路錯誤: 名稱、符號和圖示都可以仿冒;請核實目標網路上的合約地址。
  • 額度過高: 惡意或遭到入侵的支出方可能使用尚未用完的額度,直至批准上限。
  • 非標準行為: 一些廣泛使用的代幣不會完全按預期傳回值,另一些則會收取轉帳費、對餘額進行重定基準、封鎖地址或暫停轉帳。
  • 管理控制: 鑄造、凍結、升級或其他特權操作可能在使用者取得代幣後改變其風險。
  • 轉帳無法追回: 將代幣傳送到錯誤地址或無法處理代幣的合約,可能導致資產無法找回。

ERC-20 標準化降低了整合阻力,但不會消除合約、發行方、託管、市場或操作風險。簽署前,請檢查網路、代幣合約、支出方地址、授權金額和交易呼叫。

常見誤解

誤解 1:標示 ERC-20 就能證明代幣合法可靠

任何人都可以用熟悉的名稱或符號部署合約。這個標籤只表明其介面聲稱符合標準。應先核實合約地址,再分別評估程式碼、權限、發行方、流動性和市場。

誤解 2:授權會立即轉出獲批額度內的代幣

approve 通常只會變更額度,本身並不會把代幣轉給支出方。之後的 transferFrom 呼叫才會移動代幣。不過,尚未使用的額度是一項實際權限,在被用完、取代或設為 0 之前可能一直有效。

誤解 3:所有 ERC-20 代幣的行為都相同

這項標準只規定最低限度的通用介面。它不要求採用某種供應政策,也不禁止費用、暫停、黑名單、重定基準或可升級性。整合方必須根據實際實作處理,而不能只依賴 ERC-20 標籤。

相關主題

來源

導覽

搜尋知識庫...