買幣
行情
現貨
合約BTC
理財
活動中心
福利中心
更多
0 費狂歡節
ERC-777: 什麼是 ERC-777?ERC-777 是 Ethereum 的同質化加密資產代幣標準,在基本代幣模型中加入轉帳鉤子、操作者權限、交易資料,以及更安全的合約接收者檢查。與 ERC-20 相同,它代表可互換的單位;同一代幣的每個單位都具有相同價值與特性。官方的ERC-777 規格是已完成 Ethereum Request for Comments 流程的標準,旨在改善同質化代幣與錢包、智能合約之間的ERC-777: 什麼是 ERC-777?ERC-777 是 Ethereum 的同質化加密資產代幣標準,在基本代幣模型中加入轉帳鉤子、操作者權限、交易資料,以及更安全的合約接收者檢查。與 ERC-20 相同,它代表可互換的單位;同一代幣的每個單位都具有相同價值與特性。官方的ERC-777 規格是已完成 Ethereum Request for Comments 流程的標準,旨在改善同質化代幣與錢包、智能合約之間的

ERC-777

2026/10/13 15:31
#Advanced
Humanity
H$0.05523-1.91%
SynFutures
F$0.00313+4.09%
PX
PX$0.0108-5.26%
以太幣
ETH$2,380.07-1.19%
Data Network
DATA$0.1541+4.47%

什麼是 ERC-777?

ERC-777 是 Ethereum 的同質化加密資產代幣標準,在基本代幣模型中加入轉帳鉤子、操作者權限、交易資料,以及更安全的合約接收者檢查。

與 ERC-20 相同,它代表可互換的單位;同一代幣的每個單位都具有相同價值與特性。

官方的ERC-777 規格是已完成 Ethereum Request for Comments 流程的標準,旨在改善同質化代幣與錢包、智能合約之間的互動方式。

其主要功能包括

send
函式、寄件者與接收者鉤子、授權操作者、內建銷毀函式,以及可選擇附加至代幣移轉的資料。

ERC-777 的設計目標是向下相容 ERC-20,讓單一代幣合約可以同時支援兩種介面。

然而,相較於 ERC-20,ERC-777 的採用程度有限,原因是其回呼行為與對 ERC-1820 的依賴提高了整合複雜度,也可能帶來嚴重的重入風險。

ERC-777 仍是有效標準嗎?

ERC-777 仍列於 Ethereum Improvement Proposal 官方儲存庫的 Final 標準中。

Final 狀態表示規格已完成 EIP 標準化流程,但不代表它已廣泛採用、仍受到程式庫積極支援,或適合所有新代幣。

某個主要智能合約程式庫在 4.9 版將 ERC-777 實作標記為棄用,並在 5.0 版移除該實作。

目前的 OpenZeppelin Contracts 變更紀錄記載了實作支援終止的情況,相關標準介面則仍可使用。

此程式庫決策並未取消 ERC-777,也未改變其 Final 狀態。

但這表示開發者不應期待該程式庫目前的版本仍提供持續維護的 ERC-777 代幣實作。

現有 ERC-777 合約仍可依據已部署的程式碼運作,但新的整合應審慎評估其回呼行為、相依項目、稽核情況與生態系支援。

ERC-777 為什麼誕生?

ERC-777 的設計目的是解決基本 ERC-20 轉帳在易用性與安全性方面的若干限制。

ERC-20 轉帳至合約時,不要求接收合約確認或處理代幣。

若合約沒有可用於找回或記錄代幣的函式,代幣可能因此受困。

ERC-20 應用程式也常使用兩步驟流程:使用者先授權支出者,再由支出者呼叫

transferFrom
。

ERC-777 引入

send
,讓代幣可以附帶資料進行轉帳,並在同一筆交易中通知相容的接收者。

它也引入操作者,作為帳戶或合約代表持有人移動代幣的具名授權機制。

此標準旨在讓同質化代幣的行為更接近 ETH 原生轉帳,同時讓寄件者與接收者能以程式設定代幣移轉規則。

ERC-777 的運作方式

ERC-777 合約會儲存代幣餘額與總供應量,並提供標準化函式,用於傳送、銷毀與委派代幣控制權。

傳送代幣時,合約會透過 ERC-1820 檢查寄件者是否已註冊寄件者鉤子。

若有寄件者鉤子,代幣合約會在變更餘額前呼叫該鉤子。

接著,代幣合約會減少寄件者餘額,並增加接收者餘額。

更新餘額後,合約會檢查接收者是否已註冊接收者鉤子,並在必要時呼叫該鉤子。

鉤子可以接受移轉、執行額外邏輯,或回退整筆交易。

由於操作具有原子性,若必要鉤子回退,通常會取消代幣移轉以及該筆交易中的所有相關狀態變更。

ERC-777 核心函式

ERC-777 介面包含代幣中繼資料、餘額、最小單位、操作者、轉帳與銷毀相關函式。

name
、
symbol
、
totalSupply
與
balanceOf
函式提供 ERC-20 代幣常見的資訊。

granularity
函式會回報可鑄造、傳送或銷毀的最小不可分割數量。

defaultOperators
函式會回傳預設獲得所有持有人授權的操作者,但每位持有人仍有權撤銷其權限。

isOperatorFor
函式會檢查某個地址是否可作為特定持有人的操作者。

authorizeOperator
與
revokeOperator
函式可讓持有人管理操作者權限。

send
與
operatorSend
函式可移動代幣;
burn
與
operatorBurn
則會永久減少供應量。

send
函式

send
函式讓持有人可直接將代幣傳送至另一個地址,並附加名為
data
的位元組欄位。

附加資料可用於描述付款、應用程式操作、參考編號,或接收系統可理解的其他資訊。

此函式會依 ERC-777 規則觸發已註冊的寄件者與接收者鉤子。

若接收者是合約,原生 ERC-777

send
必須在該合約尚未透過 ERC-1820 註冊 ERC-777 接收者實作時回退。

此接收者檢查旨在降低代幣意外傳送至無法處理代幣的合約的風險。

這並不能證明已註冊的接收者誠實、安全或在財務上可靠。

operatorSend
函式

operatorSend
函式允許已獲授權的操作者將持有人的代幣移至接收者。

操作者必須已依代幣的操作者規則取得該持有人的授權。

持有人提供的

data
與操作者提供的
operatorData
都可以隨移轉一併傳送。

標準化的

Sent
事件會記錄操作者地址、持有人、接收者、數量與資料。

未獲授權的操作者呼叫必須回退。

操作者權限應視為敏感權限,因為它可能允許其他地址移動或銷毀持有人的代幣。

什麼是 ERC-777 操作者?

操作者是獲授權代表持有人傳送或銷毀 ERC-777 代幣的地址。

代幣持有人永遠是其自身餘額的操作者。

持有人可以授權其他帳戶或智能合約,也可以在日後撤銷授權。

操作者可用於自動付款、合約式帳戶管理、排程操作、復原系統或其他委派代幣操作流程。

與 ERC-20 的數值型額度不同,一般操作者授權不會限制為指定代幣數量。

這種較廣泛的權限可提升易用性,但若操作者惡意或遭入侵,可能造成更大的損失。

錢包應清楚說明,授權操作者可能會讓對方持續控制持有人的餘額。

預設操作者

ERC-777 代幣可以設定預設操作者,讓其在初始狀態下獲得每位持有人的授權。

預設操作者清單必須在建立代幣合約時固定,依標準不得在之後擴增或縮減。

每位持有人都必須能為自己的代幣撤銷預設操作者權限。

持有人也必須能重新授權先前已撤銷的預設操作者。

預設操作者可支援整個系統的服務,無須每位持有人先進行授權交易。

但預設操作者一開始就對代幣持有人擁有廣泛權限,因此也帶來重要的信任考量。

持有大量 ERC-777 代幣前,使用者應查看預設操作者清單並了解各操作者的用途。

寄件者鉤子

ERC-777 寄件者鉤子名為

tokensToSend
。

持有人可以透過 ERC-1820 登錄實作此鉤子的合約。

在 ERC-777 傳送或銷毀期間,代幣合約必須在減少持有人餘額前呼叫此鉤子。

鉤子會收到操作者、寄件者、接收者、數量、持有人資料與操作者資料。

鉤子可以檢查預定移轉,並在持有人設定的規則不允許時回退。

智能錢包可使用寄件者鉤子實施支出政策、通知或額外授權邏輯。

由於同一個已註冊鉤子可能收到涉及不同 ERC-777 代幣的呼叫,因此鉤子合約必須驗證呼叫是否來自預期的代幣合約。

接收者鉤子

ERC-777 接收者鉤子名為

tokensReceived
。

接收地址可透過 ERC-1820 註冊實作此鉤子的合約。

在傳送或鑄造期間增加接收者餘額後,代幣合約會呼叫此鉤子。

鉤子可以更新內部帳務、觸發另一項合約操作、記錄付款資料,或透過回退拒絕接收。

此設計讓代幣轉帳與接收者的回應可在同一筆原子交易中完成。

這也表示接收 ERC-777 代幣時,可能會在原始代幣呼叫結束前執行外部程式碼。

接收 ERC-777 代幣的協議必須在所有相關狀態變更函式中妥善處理此回呼行為。

什麼是 ERC-1820?

ERC-777 依賴 ERC-1820 來尋找寄件者鉤子、接收者鉤子與支援的介面。

ERC-1820 規格定義一個通用登錄表,地址可在其中公布自己支援的介面,以及負責實作介面的合約。

此登錄表可記錄一般帳戶與智能合約的介面。

帳戶可自行登記為實作者,也可指定另一個合約代為處理介面。

呼叫 ERC-777 鉤子前,代幣合約會向登錄表查詢相關的寄件者或接收者實作。

此登錄表相依性使 ERC-777 操作需要額外查詢外部合約。

若要讓標準實作正常運作,支援的網路必須部署預期的 ERC-1820 登錄表,並具備相應整合行為。

ERC-777 事件

ERC-777 定義

Sent
、
Minted
、
Burned
、
AuthorizedOperator
與
RevokedOperator
事件。

Sent
事件會識別操作者、寄件者、接收者、數量、持有人資料與操作者資料。

Minted
事件會記錄新代幣的建立與接收地址。

Burned
事件會記錄代幣銷毀與受影響的持有人。

操作者事件可讓錢包與監控服務追蹤委派權限的變化。

同時支援 ERC-20 的代幣,除了規格要求的 ERC-777 事件外,也可能發出 ERC-20

Transfer
事件。

若兩種事件都描述同一筆移轉,應用程式應避免將其重複計算為兩筆經濟活動。

最小單位與小數位顯示

最小單位(Granularity)是 ERC-777 合約允許鑄造、傳送或銷毀的最小內部代幣數量。

此數值會在建立合約時設定,依標準不能變更。

每筆餘額與移轉數量都必須是代幣最小單位的倍數。

大多數代幣的最小單位為 1,因此每個完整內部單位都可以移轉。

ERC-777 規定,顯示面額相對於內部單位採用 18 位小數。

若 ERC-777 代幣也提供選用的 ERC-20

decimals
函式,規格要求其回傳 18。

應用程式應使用整數運算,並在顯示時格式化數值,而非使用浮點數計算代幣餘額。

ERC-777 與 ERC-20 相容性

ERC-777 的設計允許代幣在實作 ERC-777 介面的同時,也實作 ERC-20 函式。

ERC-20 標準定義

transfer
、
approve
、
allowance
與
transferFrom
等常見函式。

同時相容兩種標準的代幣,可與僅支援 ERC-20 的舊版錢包及應用程式搭配使用。

若相應的寄件者或接收者已註冊鉤子,ERC-777 鉤子仍可能套用於相容的 ERC-20 轉帳。

不過,兩種介面的合約接收者保護機制並不相同。

原生 ERC-777

send
傳送至未註冊的接收者合約時必須回退;ERC-20 相容轉帳則可能繼續執行,讓代幣留在該合約中。

整合者必須確認實際呼叫的是哪個函式,不可假設同一代幣的所有移轉都具有相同回呼與接收者行為。

ERC-777 與 ERC-20 額度

ERC-20 通常會給予支出者數值型額度,限制其可從持有人處移轉的代幣數量。

ERC-777 則會賦予操作者對持有人餘額的權限,直到該權限遭撤銷為止。

操作者模型提供更明確的具名角色,並支援標準化的傳送與銷毀操作。

額度模型可以限制可移轉的數量,但使用者有時會授予遠超過所需數量的額度。

若使用者授權惡意或遭入侵的合約,兩種機制都可能造成損失。

錢包應顯示操作授予的是固定額度、無限額度,還是 ERC-777 操作者權限。

若代幣同時支援兩種標準,撤銷一種權限不一定會同時撤銷另一種。

ERC-777 的重入風險

ERC-777 最重要的整合風險來自其鉤子。

接收者鉤子會在代幣轉帳過程中執行外部合約程式碼。

該外部程式碼可能在協議原始函式尚未執行完畢前回呼協議。

這種行為稱為重入。

易受攻擊的協議可能先計算餘額、傳送 ERC-777 代幣,再收到回呼;回呼則利用尚未更新的內部帳務,再次執行某項操作。

即使協議呼叫 ERC-20 風格的函式,也可能發生此問題,因為同時相容 ERC-777 的代幣仍可能呼叫已註冊的鉤子。

開發者不可只因函式名稱類似一般 ERC-20 轉帳,就假設同質化代幣移轉不會觸發回呼。

降低重入風險

只要預期邏輯允許,協議應在呼叫外部代幣前更新自身的重要帳務。

敏感入口函式應使用適當的重入保護機制。

必須一併檢查彼此相關的函式,因為即使禁止重入單一函式,其他函式仍可能遭到利用。

協議應驗證代幣合約,而不是接受回呼行為未知的任意資產。

測試應涵蓋惡意寄件者鉤子、惡意接收者鉤子、巢狀代幣移轉、回退的回呼,以及跨函式重入。

開發者也應檢查鑄造與銷毀流程,因為 ERC-777 鉤子不只適用於一般傳送。

稽核可以降低風險,但不能保證所有回呼互動都安全。

接收者保護及其限制

ERC-777 接收者檢查旨在降低代幣永久受困於無法處理代幣的合約中的風險。

合約若要透過

send
接收代幣,必須註冊 ERC-777 接收者實作,否則操作會回退。

這比基本 ERC-20 轉帳更嚴格;ERC-20 轉帳即使接收合約沒有代幣處理邏輯,也可能成功。

然而,完成註冊只能證明該介面已有實作登錄。

這不能證明接收者會正確記錄餘額、允許提領,或已通過安全稽核。

惡意接收者可能故意接收代幣,之後再執行有害邏輯。

使用者仍須確認目的地合約與交易用途。

ERC-777 的優點

ERC-777 可以在合約收到同質化代幣時通知該合約。

它可以在同一筆交易中完成轉帳與接收者處理。

它允許寄件者與接收者透過可程式化鉤子拒絕移轉。

它支援附加資料,供應用程式判讀付款或操作。

其操作者模型提供標準化的委派控制與明確撤銷機制。

原生 ERC-777 傳送可降低代幣意外傳送至未註冊代幣接收支援的合約的風險。

向下相容性可讓單一代幣與 ERC-20 基礎架構搭配使用,同時為了解 ERC-777 的應用程式提供更進階的功能。

ERC-777 的限制

鉤子使智能合約更難安全地判斷代幣移轉行為。

ERC-1820 查詢增加外部相依性與整合複雜度。

操作者權限可能比使用者預期的更廣泛。

預設操作者帶來重要的信任與權限考量。

雙重 ERC-20 相容性會因使用的轉帳介面不同而產生不同行為。

若應用程式錯誤處理 ERC-777 與 ERC-20 事件,可能重複計算轉帳。

目前許多開發工具與應用程式主要著重 ERC-20,降低了實作 ERC-777 的實際效益。

廣泛使用的合約程式庫移除持續維護的 ERC-777 實作後,安全建置與維護新部署所需的工作也會增加。

ERC-777 為何採用有限?

ERC-777 推出時,ERC-20 已在錢包、應用程式、分析工具與智能合約系統中獲得廣泛支援。

若要取代既有網路效應,其優點必須足以證明新增回呼與登錄表邏輯的合理性。

許多協議都是依據可預測的 ERC-20 轉帳與額度行為建置。

ERC-777 鉤子會在整合者有時認為只是簡單餘額更新的操作中,引入意料之外的外部呼叫。

ERC-2612 的動機章節指出,ERC-777 增加了大量功能,可能在主流合約中造成意外行為。

開發者愈來愈常透過範圍較窄的 ERC-20 擴充功能,分別解決易用性問題,而非採用完全不同的轉帳流程。

因此,ERC-777 在技術上仍具重要性,但並非多數 Ethereum 新專案預設採用的同質化代幣標準。

開發者應建立新的 ERC-777 代幣嗎?

開發者應先確認提議中的代幣不可或缺的 ERC-777 功能為何。

若主要目標是支援簽署式授權,範圍較窄的 ERC-20 擴充功能或許就能提供該功能,而不必引入通用轉帳鉤子。

若確實需要接收者回呼,開發者必須評估專用應用程式合約是否能以更安全、明確的方式達成目的。

新的 ERC-777 實作必須仔細檢查完整規格、ERC-1820 註冊、鉤子、操作者、事件、鑄造、銷毀與 ERC-20 相容性。

若未檢查編譯器變更與已知安全假設,就重複使用過時且不再維護的實作並不安全。

在合約控制有價資產前,應進行大量單元測試、模糊測試、不變量測試、整合測試與獨立安全審查。

開發者也應確認預定使用的錢包、託管系統、跨鏈橋與去中心化應用程式是否支援代幣的回呼行為。

使用者如何評估 ERC-777 代幣

第一步是透過權威來源確認代幣合約地址。

第二步是確認合約僅支援 ERC-777,或也提供 ERC-20 函式。

第三步是檢查預設操作者,並確認其擁有的權限。

第四步是檢查鑄造、銷毀、暫停、凍結、升級與管理員權限。

第五步是確認合約是否使用代理合約,且其邏輯是否能在購買後變更。

第六步是查看稽核、原始碼驗證、測試涵蓋率與事故紀錄。

第七步是檢查操作者授權,並撤銷不再需要的權限。

第八步是確認接收應用程式明確支援 ERC-777 及其鉤子。

第九步是在移轉大量代幣前,先測試小額交易。

第十步是謹記,符合代幣介面標準不代表資產具備財務價值、償付能力或投資安全性。

ERC-777 付款範例

假設使用者想以 ERC-777 代幣支付鏈上訂閱合約的費用。

訂閱合約透過 ERC-1820 登錄表註冊

ERC777TokensRecipient
實作。

使用者呼叫

send
,傳入合約地址、付款數量與編碼後的訂閱參考資料。

若使用者已註冊寄件者鉤子,代幣合約會先檢查並在變更餘額前呼叫該鉤子。

代幣合約會減少使用者餘額,並增加訂閱合約的餘額。

接著,合約會呼叫訂閱合約的

tokensReceived
鉤子,並傳入付款詳細資料。

訂閱合約會驗證代幣地址、付款者、數量與附加參考資料,再延長訂閱期限。

若鉤子拒絕付款,整筆交易就會回退,代幣餘額也會恢復至原先狀態。

此流程展示了 ERC-777 設計時所著重的原子化付款與通知功能。

常見的 ERC-777 錯誤

常見錯誤之一,是以為 ERC-777 只是 ERC-20 的較新替代標準。

另一個錯誤是認為代幣轉帳不會觸發回呼。

第三個錯誤是在未確認呼叫代幣合約的情況下,接受

tokensReceived
呼叫。

第四個錯誤是未了解操作者權限可能涵蓋持有人全部餘額,就授予操作者權限。

第五個錯誤是忽略代幣建立時設定的預設操作者。

第六個錯誤是將

Sent
與
Transfer
事件當成兩筆獨立的經濟移轉處理。

第七個錯誤是透過 ERC-20 介面將代幣傳送至合約,卻以為 ERC-777 接收者保護機制會讓交易回退。

第八個錯誤是未進行現代測試與相依項目檢查,就部署舊版實作。

第九個錯誤是以為 EIP 的 Final 狀態代表目前仍受程式庫支援或已在生態系廣泛採用。

第十個錯誤是將符合標準視為代幣合法或安全的證明。

常見問題

ERC-777 是什麼意思?

ERC-777 是 Ethereum 已定案的同質化代幣標準,定義鉤子、操作者、資料欄位、代幣傳送與代幣銷毀。

ERC-777 是同質化代幣還是非同質化代幣?

ERC-777 是同質化代幣標準,同一代幣的各個單位可以互換。

ERC-777 仍有效嗎?

是,官方提案仍維持 Final 狀態,但採用程度有限,且某個主要合約程式庫已移除其 ERC-777 實作。

ERC-777 與 ERC-20 相同嗎?

不相同。ERC-777 加入鉤子、操作者、附加資料與接收者檢查,但代幣可以同時支援兩種標準。

ERC-777 的主要功能是什麼?

最廣為人知的功能,是在代幣移轉期間通知已註冊的寄件者與接收者合約。

什麼是 tokensReceived?

tokensReceived
是接收者鉤子,會在透過傳送或鑄造增加 ERC-777 餘額後呼叫。

什麼是 tokensToSend?

tokensToSend
是寄件者鉤子,會在透過傳送或銷毀減少 ERC-777 餘額前呼叫。

什麼是 ERC-777 操作者?

操作者是獲授權代表持有人傳送或銷毀代幣的地址。

ERC-777 操作者可以移動使用者的所有代幣嗎?

一般操作者權限不是數值型額度,因此在持有人撤銷前,已獲授權的操作者可能擁有廣泛控制權。

什麼是預設操作者?

預設操作者是在建立代幣時即獲得每位持有人授權的地址,但每位持有人都必須能自行撤銷其權限。

ERC-777 為什麼使用 ERC-1820?

ERC-1820 可讓代幣合約找到實作寄件者鉤子、接收者鉤子與代幣介面的合約。

ERC-777 代幣可以傳送至智能合約嗎?

可以,但若接收合約未註冊必要的接收者鉤子,原生 ERC-777 傳送必須回退。

ERC-777 代幣可能受困於合約中嗎?

原生傳送的接收者檢查可降低此風險,但 ERC-20 相容轉帳與有缺陷的接收者邏輯仍可能造成無法存取的餘額。

ERC-777 有小數位嗎?

標準採用 18 位小數的顯示面額;選用的 ERC-20 相容

decimals
函式必須回傳 18。

ERC-777 的最小單位是什麼?

最小單位是可鑄造、傳送或銷毀的最小內部數量。

ERC-777 為什麼可能造成重入?

其鉤子會在代幣操作期間執行外部合約程式碼,使接收者或寄件者實作能在原始呼叫結束前呼叫其他函式。

所有 ERC-777 代幣都不安全嗎?

不是,但每項整合都必須有意識地處理回呼、操作者權限、ERC-1820 查詢與代幣特定合約邏輯。

為什麼 OpenZeppelin Contracts 移除了 ERC-777 實作?

該實作採用程度有限,而且複雜的鉤子行為難以作為通用元件安全維護。

現有 ERC-777 代幣還能繼續運作嗎?

可以。已部署的合約會依據其程式碼繼續運作,除非合約本身的升級或管理機制變更程式碼。

新代幣應採用 ERC-777 嗎?

是否採用取決於鉤子與操作者是否能帶來不可或缺的效益,足以抵銷額外的安全、整合與維護複雜度。

結論

ERC-777 是 Ethereum 已定案的同質化代幣標準,旨在透過鉤子、操作者、交易資料與合約接收者檢查改善代幣互動方式。

其

send
函式可在同一筆原子交易中傳送代幣並通知相容的接收合約。

tokensToSend
與
tokensReceived
鉤子可執行程式設定的寄件者與接收者規則。

操作者可提供標準化的委派控制;預設操作者則可提供系統層級功能,但持有人必須能撤銷其權限。

ERC-1820 提供用於尋找這些鉤子與介面的登錄表。

ERC-777 可與 ERC-20 相容,但透過兩種介面進行的轉帳,接收者行為不一定相同。

能提升可組合性的回呼功能,也可能造成重入,並增加整合流程的判斷難度。

開發者必須驗證呼叫者、保護所有相關狀態變更函式、檢查操作者權限、測試惡意鉤子,並了解完整的轉帳流程。

雖然此標準仍維持 Final 狀態,但採用程度有限,且已從某個主要的現行合約程式庫移除,因此對新代幣而言屬於特殊用途選擇,而非預設選項。

了解 ERC-777,有助於加密貨幣使用者與開發者掌握代幣回呼的優點,以及同質化代幣轉帳可執行外部程式碼所帶來的安全風險。
ETF單週失血6.79億,花旗看多BTC至11.3萬!
ETF單週失血6.79億,花旗看多BTC至11.3萬!ETF單週失血6.79億,花旗看多BTC至11.3萬!
機構在賭什麼?