代幣授權是讓指定對象按代幣合約規則支用某個帳戶的代幣,常見 ERC-20 操作稱為 Approve;ERC-20 是代幣介面標準。連接網站不等於批准支出;斷開連接也不會自動撤銷額度。以太坊提案 EIP-20 定義了額度查詢與支用,EIP-2612 則讓符合條件的簽名建立額度。本文用有限額情境說明生效、支用與撤銷,資料核對至 2026 年 10 月 27 日。
看見錢包跳出確認視窗,最難的往往不是找按鈕,而是弄清楚自己正在答應什麼。網站說「登入」,畫面卻要你同意一筆交易;網站已經斷線,某個對象的代幣額度卻還留在鏈上。這些差別如果只用「有沒有連上錢包」判斷,很容易漏掉真正的支出權限。
這篇先拆開連接、交易與簽名,再走完一份有限額計畫。重點是每一步完成後,哪些狀態真的改變,以及還有哪些事不能因此宣告安全。
錢包連接、交易與簽名,授予的權限不同
連接、Approve 與訊息簽名是不同動作,不能共用一個「已授權」的結論。 一般網站連接可能取得使用者選擇公開的帳戶地址,並提出後續請求;能提出請求,不代表已經獲得任意轉走資產的能力。錢包本身如何保管金鑰,可先看本站的錢包與控制權。
連接網站,不等於已批准代幣支出
常見 ERC-20 代幣把支用額度記在代幣合約裡。持有人先給某個 spender 額度,對方才可能依規則呼叫 transferFrom,把持有人代幣轉給指定接收者。Spender 是被授權支用的地址,可以是合約,也可能是一般帳戶;不能只憑它叫「路由器」就判定可信。
MetaMask 官方〈Disconnect wallet from a dapp〉提醒,斷開網站連接不會撤銷代幣授權。斷線處理介面連接,撤銷則要改變鏈上額度。使用硬體簽名也不會自動拒絕惡意支出要求;硬體的金鑰隔離解決部分取鑰風險,仍需要使用者理解簽名內容。
Approve與Permit,生效時點要分開
Approve 通常是一筆送到代幣合約的交易。按下確認後,仍要等它在鏈上成功執行,才能說額度已改成新值;拒絕簽署、尚未送出、等待處理與執行失敗,都不能直接記成完成。
另一種路徑是 Permit。EIP-2612 定義的 Permit,讓持有人先對特定資料簽名,再由自己或其他人提交鏈上。Gas 是鏈上執行的計費用量;簽名當下可以不產生鏈上 Gas 費,卻可能讓之後提交的人建立額度。因此「這次沒有扣網路費」不能用來判斷簽名沒有資產風險。其他協定還可能有自己的簽名與支用機制,不能全套用同一種撤銷方式。

讀懂一筆授權,要固定哪四項資料
查額度前,先固定網路、持有人、代幣合約與被授權對象。 少一項,就可能查到另一條鏈、另一個帳戶或另一份代幣合約,看到零卻誤以為自己要處理的權限已清掉。
網路、持有人、代幣與被授權對象
持有人是代幣由誰的帳戶支出;代幣合約決定查哪一種代幣;被授權對象則回答誰能依額度呼叫支用。接收者可以與被授權對象不同,不能把畫面上的最終收款地址直接當成 spender。
EIP-20 的 allowance(owner, spender) 查詢本來就以持有人與 spender 為參數,而且是在指定代幣合約上執行。同名代幣不是同一份合約,同樣外觀的地址也不能省略網路確認。從可信的官方入口查出完整資料,再與待簽內容比對,才知道這一筆準備改哪個狀態。
額度不是餘額,無限額也不是免費
餘額是帳戶目前持有多少;額度是指定對象依合約規則最多能支用多少。授權 20,不會因此把餘額增加 20,也不表示已立即轉出 20。額度高於目前餘額時,風險還可能延伸到日後轉入的代幣。
畫面顯示無限額或很大的數字,主要改變的是允許支用範圍,不是免除手續費。不同代幣對最大額度、額度扣減或修改方式可能有不同實作;下面固定使用會隨成功支用扣減的有限額模型,不拿它代表所有 ERC-20 代幣。若操作只需要 12,仍應先理解為什麼要求更大的額度,而不是因為下一次方便就跳過範圍確認。

有限額演練:20、8與0分別在哪一刻成立
把額度與餘額分開記,才能看出每一步到底完成了什麼。 以下是紙上教學:持有人 A 起初有 100 單位的代幣 T,準備讓對象 S 支用其中 12,最後撤銷剩餘額度。A、S、T、接收者 R 都是代號,沒有真實部署、簽名或轉帳;也沒有代幣價格與獲利假設。
第一步:先讀目前額度,再決定操作
先固定本例網路、A、T 的合約與 S,查到目前額度為 0。把這個結果連同查詢時點記下,才進一步看操作是否真的需要 S 代為支用,以及 S 是否與可信介面所列的地址一致。查到 0 只能說此刻這一組資料的鏈上額度為零,不能證明 A 沒有其他授權或有效簽名。
本例計畫只給 20,預定支用 12,並在支用完成後處理剩餘額度。20 是教學選擇,不是建議每個人都用相同限額。若待簽視窗改成另一個 S,或代幣不再是 T,就取消這次準備,回到四項資料重新核對,不用「剛才已經查過」放行不同要求。
第二步:只批准20,等鏈上確認
假設 A 準備送出把 T 對 S 的額度設為 20 的 Approve,還要核對交易對象、呼叫內容及網路費。這裡的 20 是代幣顯示單位;合約可能以更小的整數單位儲存,要由可信介面依該代幣的小數位正確換算,不能把原始整數直接當成畫面數量。
在「簽名完成但尚未確認」的階段,紀錄應寫等待,不能先把額度填成 20。等交易成功,再查同一組資料得到 20,才把狀態改成已生效。這一步沒有移動 T,因此本例餘額仍是 100;若由 A 自付網路費,原生幣餘額可能另行減少,不能混成 T 被支用了。
第三步:支用12之後,核對剩餘額度8
假設 S 依本例規則成功把 A 的 12 單位 T 轉給 R,且沒有其他代幣變動。此時 A 的 T 餘額是 100 − 12=88;在本篇採用的有限額扣減規則下,S 的剩餘額度是 20 − 12=8。兩個數字不同,正好分別回答「還持有多少」與「對方還能支用多少」。
確認時不能只看操作頁的勾號。要查原交易是否成功、實際代幣與接收者是否正確,再讀目前餘額及額度。若這段期間有另一筆支用或轉帳,88 與 8 就不再能直接套用;如果執行失敗,則按實際鏈上狀態記錄,不能照預期把 12 扣掉。
這一步也提醒你:一般 ERC-20 額度依所授予的權限運作,不等於已把接收者或每次用途鎖死。除非合約另有限制,不能因為第一次送給 R,就假設剩下的 8 永遠只能用在同一個地方。
第四步:撤銷並確認0,別只看已送出
接下來假設 A 成功把同一組 T、S 額度改為 0。撤銷交易等待期間,原本的 8 不會因為你已按按鈕就自動失效;對方的支用與撤銷何者先被執行,仍影響最後結果。不要把「已送出撤銷」寫成「資產已安全」。
只有在撤銷成功,並重新查到額度為 0 之後,才記為這一組鏈上額度已歸零。在沒有其他 T 變動的教學假設下,A 仍持有 88,不會因為取消 8 的權限就再退回 8。這是關閉剩餘支用額度,既不追回已轉出的 12,也不替其他權限作保證。
EIP-20 對修改既有非零額度也提示了交易排序風險,並提出介面先設為零再設新值的做法。實際代幣可能另有增減額度方法或限制。不要把這個提示當成能阻止所有搶先支用的保證;若已疑似被攻擊,應按暴露情況重新評估,而不是一直把限額換成別的數字。


撤銷了一筆額度,哪些風險還在
撤銷處理的是特定權限,不會自動消除其他簽名、其他代幣或金鑰曝光。 本例完成的只有固定網路上,A 持有的 T 對 S 額度歸零。換成另一個 spender、另一條鏈或另一種資產,就需要另查。
未提交的Permit,與已存在的額度分開
現在加入一個獨立分支:A 曾簽過一份尚未提交的 EIP-2612 Permit。如果其 nonce 與期限等條件仍符合合約要求,它之後仍可能被提交,用來建立指定額度。Nonce 是防止同一許可重複使用的序號;deadline 是允許提交的截止條件,不是看到日期還沒到就可以放心。
這就是為什麼查到 Approve 額度為 0,不能進一步推論所有未提交的簽名都失效。要看實際協定、許可內容與取消方法;一般 approve(0) 並不自動取消所有種類的簽名。上述 20→8→0 的演練沒有 Permit 介入,這裡是用來說明額度歸零的結論邊界,不是宣稱那份教學已發生第二次支用。

私鑰外洩,撤銷額度不能換掉控制權
如果助記詞或私鑰已經交給別人,問題超出某個 S 的額度。持有控制材料的人可能再建立交易或授權,舊 App 改密碼也不會把對方的副本收回。可以接著看私鑰與助記詞差別,確認哪些帳戶共用同一份來源。
此時不宜只拿一張「已撤銷」截圖就結案;同樣也不能因為找到可疑授權,就認定私鑰必定外洩。應把已知曝光與仍不清楚的部分分開,按實際線索處理。可疑轉帳與控制權排查,會接續這個分流。

把授權管理做成每次簽名前的習慣
最有用的習慣,是在每次答應之前說得出對象、範圍與生效方式。 事後盤點可以找出閒置額度,卻不能替下一個不明簽名預先背書。只要畫面無法辨認、資料不一致或網站催促略過核對,就先停止。
從可信入口檢查,不接陌生驗證要求
從自己核對過的錢包、官方文件或可信額度管理入口開始,不點陌生私訊提供的「安全檢查」。查公開額度不需要向客服交出助記詞或私鑰。管理工具若要求簽名或交易,要重新讀那次內容,不能因為工具標榜安全就視為例外。
MetaMask 官方〈Spending caps〉介紹查閱與撤銷支出額度的用途,但工具能列出哪些權限,仍受支援範圍限制。某個清單沒有列到,不等於不存在其他鏈、非同質化代幣(NFT)的操作權限或協定特有的簽名;本篇的 ERC-20 演練也不能直接代替它們的處理規則。
網路費與取消條件一起核對
Approve 與撤銷通常需要鏈上交易費;簽名型許可則可能把提交費用交給另一個人。費用由誰付,與你允許誰支用代幣,是兩個不同問題。失敗交易的費用判斷,會把準備額與實際扣費拆開。
如果只是例行管理,先確認費用與預算,再決定是否操作;如果已疑似有搶轉程式,不能直接往舊帳戶補原生幣來「完成撤銷」。搶轉程式會監看入金並自動迅速移走資產。停止條件和額度一起寫進計畫,才能避免為了處理一筆權限,反而再暴露新的資產。
本文為機制說明與假設情境,未執行真實授權或撤銷,不構成個人資產處置建議。代幣與協定的實作可能不同;有疑似失守事件時,應按實際資料與可信官方支援判斷。