跳到主要內容

ERC-20 授權撤銷教學(2026):逐鏈清冊與 allowance 歸零核對

最後更新: ·
ERC-20 授權撤銷:Revoke.cash 官方標誌、逐鏈核對文字與 allowance 0 驗收目標

舊協議網站打不開了,當年給它的授權卻可能還留在鏈上。ERC-20 授權撤銷要處理的是代幣合約裡的額度:找到正確的鏈、持幣地址、代幣合約與 spender,把不再需要的那筆額度設為零,再讀一次 allowance 確認。關掉網站或中斷錢包連線,都不能代替這個動作。

這次先完成一筆確定不用的標準 ERC-20 授權,再把相同方法套到其他用過的 EVM(以太坊虛擬機)鏈。你需要自己的公開地址、能簽署該地址交易的錢包,以及該鏈支付網路費的原生代幣。查詢階段先不連接錢包;下面的畫面來自 Revoke.cash 官方教學範例,並非 AlphaLab 的撤銷交易紀錄。

Ledger 硬體錢包;挑選你的硬體錢包;從 Ledger 官方商店選購;前往官方商店

先確認:這是舊授權,還是金鑰已經外洩?

ERC-20 的 owner 是持有代幣的地址;spender 是獲准代你動用代幣的地址,常見是協議合約。ERC-20 規格定義 approve(spender, value) 用來設定額度,allowance(owner, spender) 則回傳剩餘額度。它是在特定代幣合約上查兩個地址的關係,不能只靠協議名稱判斷。

如果你曾交出助記詞或私鑰,或剛補進去的網路費立刻被轉走,先停止把這當成例行清理。Revoke.cash 的金鑰外洩處理說明指出,撤銷授權無法收回攻擊者手上的金鑰;需要在乾淨裝置建立全新錢包,處理剩餘資產。正在失竊時也別反覆補 Gas,掃款程式可能把它拿走。這篇以下只處理沒有金鑰外洩警訊、由你控制的普通自管地址;多簽、智慧帳戶與 NFT 權限不套用這份單筆驗收。

一、先用公開地址逐鏈盤點,別急著簽交易

自行輸入 https://revoke.cash,在搜尋欄貼上自己的完整公開地址,送出查詢後選擇要檢查的網路。官方操作指南提供地址查詢、選鏈、依 spender 搜尋與單筆撤銷流程。這些查詢不需要助記詞或私鑰;任何要求你把它們貼進網頁的「驗證」流程,都應立即停止。

Revoke.cash 官方教學畫面中的地址搜尋欄與 Ethereum 網路選單
步驟一:上方範例輸入 kalis.eth;下方紅色 2 標出網路選單。請換成自己的公開地址,逐鏈查詢。圖/Revoke.cash 官方操作指南。

先列出自己用過的 EVM 網路,再一條條切換查詢;若有多個持幣地址,每個地址各跑一次。同一地址在不同鏈的授權要分開處理:一條鏈撤銷成功,不代表其他鏈也完成。還不熟悉網路與帳戶的關係,可以先看以太幣與智能合約入門。

列表載入後,先查看 ERC-20 代幣授權,取消自己設的過窄篩選,再挑出不用的項目。空列表不能直接作為沒有授權的證明:先看 FAQ 的網站支援網路清單;工具無法查詢、載入出錯或資料不足的鏈/地址,記為「待查」,不要算作已完成盤點。

完整地址要從同一列取出。先點該列的代幣名稱/符號連結(官方範例是 DAI),它會開啟該鏈區塊瀏覽器的代幣合約地址頁;複製網址中 /address/ 後的完整 0x 地址,記到「代幣合約」。回到原來那列,在 Authorized Spender/Approved Spender 欄點地址旁的複製圖示,貼到「spender」。也可點該欄的名稱/地址連結,在開啟的同鏈地址頁取出完整地址。兩條連結分別對應該列的代幣與 spender,不是同一種地址。

複製後先貼進清冊查看全文,確認兩個網址都屬於目前所選網路,並把代幣、額度與 spender 留在同一列;返回列表時別改選其他項目。代幣符號與協議標籤只作備註,不要把縮寫 0x… 當成紀錄。若連結打不開、找不到完整地址或無法確認對應列,就先留作待查,不猜一個長得像的地址。

二、把一筆授權寫成可回查的紀錄

複製下面的 CSV 表頭,匯入試算表時以逗號分欄,從第二列開始填。一列只代表一組「鏈+owner+代幣合約+spender」;同一代幣授權給兩個 spender,就分成兩列。地址要完整保留,清冊不用放助記詞或私鑰。撤銷前先照下方的 allowance 唯讀查詢方法查一次,把原始整數及查詢時間記下,再與撤銷後結果對照。

查詢時間,網路名稱,chain_id,owner完整地址,代幣合約完整地址,代幣符號,spender完整地址,協議標籤,撤銷前allowance原始整數,撤銷前顯示額度,單位,處置,原因,預估網路費,交易雜湊,同鏈瀏覽器網址,交易狀態,交易區塊號碼,撤銷後allowance原始整數,撤銷後查詢時間,撤銷後查詢區塊,驗收狀態

現在先填:查詢時間、網路名稱與 chain ID、owner、代幣合約、spender,以及撤銷前 allowance 原始整數。介面顯示額度要連同單位保存;代幣符號與協議標籤另作備註。填好撤銷/保留/待查及原因,簽署前再補錢包預估的網路費。

交易後再補:交易雜湊、同鏈瀏覽器網址、交易狀態與區塊號碼,最後填撤銷後 allowance 原始整數、查詢時間及驗收狀態;能取得查詢區塊時一起記下。尚未送交易或尚未查到結果的欄位先留白,別預填「成功」或 0。

先處理已不再使用、且能確認身分的 spender。無限額表示授權範圍很大,並不是已被盜的證據;仍需要的授權可留待另行評估。也不要因為代幣餘額是零就略過:allowance 與餘額是不同數值,這筆權限可能影響之後收到的同種代幣。

Revoke.cash 官方範例同一列顯示 DAI 餘額零、Unlimited 授權、Gnosis Protocol spender 及 Revoke 按鈕
步驟二:官方範例同一列的 DAI 餘額是 0,授權仍顯示 Unlimited。點 DAI 連結取得代幣合約,點 Gnosis Protocol 地址旁的複製圖示取得完整 spender;這兩個地址都記好後,才按紅色 7 所指的 Revoke。圖/Revoke.cash 官方操作指南。

依 Revoke.cash FAQ,核心工具逐筆撤銷只收網路 Gas 費;這份流程使用單筆 Revoke,不使用批次功能。簽名前先看錢包的費用估算,確認有該鏈的原生代幣可支付。不要為了省費用改到另一條鏈操作,那會變成另一筆授權。

撤銷前後共用:唯讀查詢 allowance

要留下可直接核對的整數結果,在該鏈區塊瀏覽器開啟清冊記下的代幣合約頁。以 Etherscan 為例,官方 Read Contract 說明提供唯讀查詢:在 Contract 裡選 Read Contract,若為代理合約且頁面提供 Read as Proxy,就在原本的代幣地址使用該讀取介面,別改到實作合約地址。找 allowance,依欄位填入 owner、spender,按 Query,保存輸入與回傳結果。這一步是讀取,不應要求你送出一筆交易。

三、按 Revoke 後,核對的是交易內容

連接能操作清冊 owner 的錢包,只對選定那一列按 Revoke。對本篇的標準單筆 ERC-20 撤銷,應是向代幣合約呼叫 approve(spender, 0):交易目標是代幣合約,spender 是函式裡的參數,兩者別對調。錢包可能仍把動作稱為 Approve 或「授權」,因此不能只看提示標題。

  1. 確認錢包選中的帳戶就是清冊的 owner,網路與清冊一致。
  2. 查看交易詳情:目標合約、spender 與額度 0 都要對上。下面以 MetaMask 官方畫面示範欄位位置;若你使用的錢包沒有足夠資訊讓你核實,就先取消,不以「網站說是撤銷」代替核對。
  3. 讀完網路費後才簽署。保存交易雜湊,從該鏈的區塊瀏覽器查看結果;尚在 Pending 就記為待確認,Failed 則記為失敗,不能填「已撤銷」。

以 MetaMask 官方授權範例為例,代幣旁的複製圖示可取出代幣合約地址;標準 approve 的交易目標應與它、清冊的代幣合約三者一致。這張範例沒有展示 To/交易目標,代幣地址只提供比對基準。請在自己的交易詳情取得目標地址再逐字比對,別拿下一個欄位的 spender 代替;若無法取得目標地址,就取消交易。

再展開 View full transaction details:Granted to 旁的複製圖示取得的是 spender,對照清冊的 spender;Approved amount 是授權額度,本次撤銷必須為 0;Data 區的 Function 應為 Approve。圖中原範例是非零授權,只用來辨認欄位,不能拿它當撤銷結果。自己的畫面若仍顯示非零、函式不同或目標地址看不清楚,就選 Reject,不要照圖按 Confirm。

MetaMask 官方範例的代幣合約複製入口、Approved amount、Granted to、Function Approve 與 Reject 按鈕
簽署前核對位置:上下為不同官方授權範例;上方代幣旁可複製合約地址,下方 Granted to 可複製 spender。下方原圖額度非零,不是撤銷畫面;本次撤銷的 Approved amount 必須為 0。圖/MetaMask 官方幫助中心。

使用硬體錢包簽署也要做同樣核對。Ledger 設定教學可以補裝置操作,但硬體保管金鑰不會自動收回既有授權:spender 使用已取得的權限時,不必再向你索取一次簽名。不要把更換裝置當成這筆 allowance 的撤銷證據。

四、交易成功後,再讀同一筆 allowance

看到 Success,先把交易狀態與區塊號碼寫進清冊,再重新載入 Revoke.cash 的相同地址與網路,依前面的唯讀方法查詢同一筆額度。驗收值是同鏈、同代幣合約的 allowance(owner, spender) = 0;一張成功交易畫面只證明那筆交易執行成功,不能替你證明四個欄位都選對。

原始回傳整數為 0,才把這一列標為「已核對歸零」;零不需要做代幣小數位換算。若你已保存非零原始額度,要與人類可讀數量對照,需另確認該代幣的 decimals,不能假定每種代幣都相同。

如果仍不是零,依序比對鏈、owner、代幣合約、spender,以及交易是否真的成功,再重新查詢。四者與成功交易都相符卻仍有額度時,保存兩邊證據,檢查撤銷後是否又有新的授權;不要重複簽一串看不懂的交易。若找不到可用的 allowance 讀取介面或查詢出錯,就先記「尚未完成核對」,別把缺資料解讀為零。非標準代幣可能讓瀏覽器的顯示或函式查詢出現差異,本篇不能替這類合約保證標準行為。

清冊歸零後,還要記住 Permit 的邊界

Permit 簽名可以先在鏈下簽署,等有人提交到代幣合約才啟用授權。Revoke.cash 官方明說,它無法從鏈上完整知道你簽過哪些尚未啟用的簽名;Signatures 頁顯示的是潛在項目,不是你的完整簽名歷史。因此清冊裡的零,只是這次查詢的鏈上額度,不等於所有簽名都已失效。

對符合 ERC-2612 規格的 Permit,啟用會檢查期限、簽名序號(nonce)與有效簽名;單做 approve(spender, 0) 不能保證尚未使用的 Permit 失效。若簽名仍符合條件,它之後可能把 allowance 再設回非零。懷疑簽過惡意 Permit 時,另讀官方的Cancelling Permit Signatures 指引,它指向帳戶頁的 Signatures 分頁。取消不保證趕在攻擊者啟用前完成,不能只刷到零就結案。

Permit2 又分成代幣給 Permit2 合約的授權,以及 Permit2 裡的後續權限;不要拿一筆普通 ERC-20 歸零結果概括兩層。日後重新使用協議並授權,也要更新同一列紀錄。

把其餘待查列留下,另外記好尚未盤點的鏈與地址,以及卡在哪個欄位。替這些項目安排下一次查核日期;下次結束一段 DeFi 操作後,再對照清冊複查並更新紀錄。

Ledger 硬體錢包;挑選你的硬體錢包;從 Ledger 官方商店選購;前往官方商店

接著閱讀

左右滑動查看更多推薦

ALPHALAB 社群

有問題?來 Telegram 聊

和 Terry、編輯、其他網友一起討論這篇文章。提問、分享觀點,回覆更即時。

加入 Telegram 討論

📩 訂閱 AlphaLab 電子報

每週最多三封:一封 Weekly 週報與最多兩封關鍵 Alpha Signal。

我們不會 spam,隨時可退訂。已訂閱?管理主題偏好(會寄登入連結到你的信箱)