Skip to content
所有選擇權指南
加密貨幣錢包安全12 min read

加密貨幣代幣授權額度:如何檢查與撤銷

了解 ERC-20 approve 允許合約執行什麼、無限額度與 permit 簽名如何運作,以及撤銷授權能改變和不能改變的事。

本指南內容連接錢包與授權代幣是兩種不同權限

簡短摘要

ERC-20 的 approve 通常不會立刻轉出代幣,而是在鏈上記錄特定 spender 日後可透過 transferFrom 提取的額度。中斷錢包與網站的連線,不一定會清除此鏈上額度;把額度設為零,也無法追回已完成的轉帳。

連接錢包與授權代幣是兩種不同權限

連接網站通常只讓應用程式看到公開地址並向錢包提出簽名請求。光是連線並不等於授權應用程式移動所有 ERC-20 代幣。代幣額度另外儲存在代幣合約中。MetaMask 也將中斷 dapp 連線與撤銷代幣授權視為不同操作。

ERC-20 allowance 會依代幣合約、區塊鏈、持有人地址與 spender 地址分開記錄。在 Ethereum 授權某個 spender 使用代幣,並不代表另一種代幣或 Polygon 上的同一代幣也有相同權限。只記得「我授權過這個網站」,可能會忽略仍有效的代幣與網路。

本文聚焦 Ethereum 與相容網路上的 ERC-20 approve、allowance 和 transferFrom。原生 ETH 轉帳、NFT 的 setApprovalForAll、其他代幣標準與錢包登入連線,使用不同的權限機制。助記詞備份與復原是另一個主題,請參閱錢包助記詞與復原指南。

approve 設定可花費額度,不會把代幣轉出去

ERC-20 持有人可以在代幣合約呼叫 approve(spender, amount),讓指定 spender 使用不超過 amount 的代幣。標準的 transferFrom 函式讓該 spender 代表持有人移動代幣。因此,approve 交易通常不會自行移動餘額,但合約之後可以呼叫 transferFrom 使用額度。這是 ERC-20 標準所定義的授權流程。

例如,錢包持有 300 顆代幣,並授權一個 router 使用 80 顆;一般 ERC-20 spender 實際可移動的數量受剩餘額度與持有人餘額兩者中較小值限制。這項權限可能涵蓋多筆交易,因為合約可以多次呼叫 transferFrom。如果核准的合約或預期呼叫流程遭到濫用,代幣可能會以使用者未預期的方式移動。非標準代幣行為與額外限制也需要考量。

approve 通常是對代幣合約送出的鏈上交易,可能需要支付網路費。有些應用程式會把授權與兌換分成兩筆交易;另一些則把簽名式權限與後續交易結合。不要只看按鈕上的「Approve」字樣就推斷實際操作;請檢查錢包要求你簽署的內容與所選網路。

無限額度不等於立即提款

錢包顯示的「Unlimited」通常代表接近該代幣最大整數值的額度。它不會在授權當下創造代幣,也不會立刻轉出目前餘額。但 spender 之後仍可能使用該代幣在同一網路上的額度,包括日後存入錢包的同種代幣。有些實作會保留最大額度而不遞減,請確認代幣如何處理這個數值。

應用程式可能要求較大的額度以減少重複授權步驟,但應一併衡量便利性與風險暴露。如果 spender 合約有漏洞或遭到控制,舊授權日後仍可能被使用。Ethereum.org 的撤銷指南說明,當使用者把資產轉回錢包後,較寬的授權為何仍可能造成影響。

較小的額度也不代表沒有風險。授權假冒代幣或錯誤的 spender 仍可能造成損失;反覆授權則可能增加手續費與操作失誤的機會。請考量預計使用的數量、使用頻率、對 spender 的信任程度,以及日後能否重新檢查額度。

沒有文字的插圖:錢包、金色代幣和代表不同代幣授權額度的閥門。
Allowance 讓指定合約日後使用代幣;簽署前請核對地址與數量。

簽署前確認網路、代幣、spender 和額度

簽署前確認四項資訊。第一,確認目前網路與應用程式所標示的網路一致。第二,核對代幣合約地址,不要只依賴代號或圖示。第三,將 spender 地址與專案官方文件或已驗證合約資訊比對。第四,判斷額度是否符合預定操作,或會留下較寬的長期權限。

不要從私訊、QR code、客服聊天室或未驗證廣告中的連結連接錢包。釣魚網站可以仿冒真實應用程式。請從已保存的官方網址或專案文件進入,也不要只因合約顯示名稱熟悉就信任它。區塊瀏覽器的「已驗證」標記不代表合約安全。

硬體簽署器可以協助讓私鑰遠離一般瀏覽器,但它無法替你判斷 spender 或授權額度是否安全。如果裝置無法以你看得懂的方式顯示請求,請暫停並查看錢包供應商的官方說明。交易細節顯示得越少,可供你檢查的資訊也越少。

permit 簽名改變授權流程,不改變權限本身

部分 ERC-20 代幣支援 ERC-2612 permit。持有人不必提交一般 approve 交易,而是簽署型別化資料,由另一方提交簽名來設定代幣額度。標準訊息包含持有人、spender、數量、nonce 與 deadline;domain 資訊則有助於將簽名綁定到特定鏈與合約。

ERC-2612 的 deadline 是 permit 簽名最晚可被提交的時間。這不代表成功執行 permit 後建立的額度會在該時間自動失效。額度可能一直存在,直到被使用、修改或撤銷。部分代幣使用不同的 permit 設計或額外到期規則,因此不要假設錢包中所有名為「permit」的請求都符合 ERC-2612。

簽名可能讓另一個帳戶代付交易費,但這不代表每個簽名都只是無害的登入確認。如果錢包沒有清楚顯示代幣、spender、數量與相關時間,或資訊與應用程式說明不符,請拒絕簽署並查閱專案官方文件。尚未提交的簽名,仍可能在 deadline 前由他人提交。

中斷網站連線不會撤銷鏈上額度

登出或中斷錢包連線會改變瀏覽器工作階段或連線權限。代幣合約中已記錄的 ERC-20 額度仍可能存在。反過來說,撤銷額度也不會刪除網站已知的公開地址或過去的鏈上紀錄。MetaMask 的中斷連線指南說明了兩者的差異。

撤銷通常是提交鏈上交易,將該代幣與 spender 的額度設為零。交易需要支付網路費,而且舊權限在交易確認前仍可能生效。完成後,請重新整理授權清單,或再次查詢代幣合約,確認同一錢包、網路、代幣與 spender 的數值已變成零。MetaMask 授權指南與 Ethereum.org 都介紹依網路查詢授權的工具;使用任何工具時,都要核對官方網域與所選網路。

每條區塊鏈各自保存狀態。在 Ethereum 將額度設為零,不會自動改變另一條網路上同一代幣的權限。請檢查每個相關帳戶、代幣合約、spender 和網路,再確認交易最終結果。撤銷工具不應要求你的助記詞或私鑰。

撤銷可阻止未來使用,無法逆轉已完成的轉帳

額度確認為零後,spender 不能再依靠該額度發起新的 transferFrom。撤銷不會逆轉已完成的轉帳、從收款方取回代幣,或移除其他合約權限。如果代幣已透過可疑授權移出,將額度歸零不是資產復原方法。

如果錢包私鑰已外洩,攻擊者仍可能透過其他方式簽署交易。其他 spender 或代幣的授權、NFT 操作者權限、permit 簽名,以及合約特定權限也可能仍然有效。請只針對實際檢查過的錢包與網路解讀結果。

下一次兌換、存入或贖回時,已撤銷的 spender 可能需要新的授權。撤銷前,請確認該權限是否正用於未完成交易或活躍中的協議部位;必要時查閱協議官方說明。重點是了解權限變更會如何影響實際操作流程。

變更額度時可能遇到 ERC-20 競態條件

ERC-20 標準建議介面在將非零額度改成另一個非零值之前,先把舊額度設為零。如果 spender 的交易剛好排在舊、新授權之間,spender 可能使用超出使用者預期的數量。例如將額度從 100 改成 25 時,spender 可能先使用舊的 100,再使用新記錄的 25,依序消耗兩個額度。

等待零額度確認,再設定新數量,可以降低舊、新額度重疊使用的機會;但如果零額度交易尚未確認,spender 已經使用舊額度,這個做法無法撤回該次使用。兩個步驟都可能需要支付網路費,而且代幣行為可能不同。依照錢包或代幣文件中的安全更新流程操作,並等候確認後再進行下一步。

如果不確定目前額度,請先在所選網路查詢代幣合約。如果錢包顯示沒有額度或出現非預期代幣,確認自己查看的網路和地址是否正確。持有人地址與代幣合約地址都必須與要檢查的權限相符。

用簡短清單檢查錢包與代幣權限

  1. 確認專案官方網域與目前選取的網路。
  2. 核對代幣合約與 spender 地址,再比較授權額度和預定操作所需數量。
  3. 在錢包中閱讀實際交易或型別化資料請求。不要簽署看不懂的內容。
  4. 不再信任 spender 後,檢查相關網路上的額度;適當時將未使用的權限設為零,並確認結果。
  5. 比較錢包時,查看支援的網路、授權資訊是否清楚,以及更新與復原說明是否容易理解。

硬體錢包是保存私鑰與檢查交易的一種選擇,不保證合約安全,也不能保證使用者不會授予過寬額度。不要期待簽署畫面替你做判斷;請自行核對 spender、代幣、網路與數量。了解代幣額度可能與應用程式連線分開持續存在,也有助於比較錢包安全功能與其實際限制。

常見問題

Q1中斷錢包連線會移除既有代幣授權嗎?

不會。網站連線是錢包工作階段;ERC-20 額度則是代幣合約中的鏈上狀態。請檢查相關網路與代幣,必要時另外撤銷 spender 的額度。

Q2將額度設為零後,可以追回已被轉走的代幣嗎?

不行。變更確認後,零額度會阻止後續使用,但不會逆轉已完成的轉帳。請另外檢查其他授權與私鑰是否外洩。

Q3所有加密貨幣代幣和 NFT 都使用 ERC-20 額度嗎?

不是。本文涵蓋 ERC-20 approve 和 transferFrom。NFT 操作者授權、原生資產、其他代幣標準與各鏈權限遵循不同規則。

資料來源與延伸閱讀

回報問題

我們會準備一封包含本文連結的電子郵件。寄出後,Mark 才會收到你的回報

快速檢查

讀完指南後,用 3 道題檢查一下

問題 1 / 3

問題 01

ERC-20 的 approve(spender, amount) 主要會做什麼?

選擇答案即可查看解釋

期權術語表