返回工具與教程
工具與教程

代幣授權怎麼看?連接、Approve、簽名與撤銷的差別

Trader Stan·2026.10.27·閱讀時間 13 min

代幣授權是讓指定對象按代幣合約規則支用某個帳戶的代幣,常見 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 費,卻可能讓之後提交的人建立額度。因此「這次沒有扣網路費」不能用來判斷簽名沒有資產風險。其他協定還可能有自己的簽名與支用機制,不能全套用同一種撤銷方式。

先分清你答應的是哪件事。概念圖|介面連接、鏈上額度與待提交簽名,不是同一種狀態。。MetaMask 官方提醒:斷開連接不自動撤銷代幣授權;硬體簽名仍要理解內容。

讀懂一筆授權,要固定哪四項資料

查額度前,先固定網路、持有人、代幣合約與被授權對象。 少一項,就可能查到另一條鏈、另一個帳戶或另一份代幣合約,看到零卻誤以為自己要處理的權限已清掉。

網路、持有人、代幣與被授權對象

持有人是代幣由誰的帳戶支出;代幣合約決定查哪一種代幣;被授權對象則回答誰能依額度呼叫支用。接收者可以與被授權對象不同,不能把畫面上的最終收款地址直接當成 spender。

EIP-20 的 allowance(owner, spender) 查詢本來就以持有人與 spender 為參數,而且是在指定代幣合約上執行。同名代幣不是同一份合約,同樣外觀的地址也不能省略網路確認。從可信的官方入口查出完整資料,再與待簽內容比對,才知道這一筆準備改哪個狀態。

額度不是餘額,無限額也不是免費

餘額是帳戶目前持有多少;額度是指定對象依合約規則最多能支用多少。授權 20,不會因此把餘額增加 20,也不表示已立即轉出 20。額度高於目前餘額時,風險還可能延伸到日後轉入的代幣。

畫面顯示無限額或很大的數字,主要改變的是允許支用範圍,不是免除手續費。不同代幣對最大額度、額度扣減或修改方式可能有不同實作;下面固定使用會隨成功支用扣減的有限額模型,不拿它代表所有 ERC-20 代幣。若操作只需要 12,仍應先理解為什麼要求更大的額度,而不是因為下一次方便就跳過範圍確認。

查額度,固定同一組四項資料。概念圖|接收者可能與 spender 不同;同名代幣也不等於相同合約。。查到某一組額度為 0,只代表這組當下狀態;不能擴大成所有權限或簽名都已失效。

有限額演練: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 對修改既有非零額度也提示了交易排序風險,並提出介面先設為零再設新值的做法。實際代幣可能另有增減額度方法或限制。不要把這個提示當成能阻止所有搶先支用的保證;若已疑似被攻擊,應按暴露情況重新評估,而不是一直把限額換成別的數字。

20 → 8 → 0,餘額與額度分開記。教學狀態表|A 起初 100 T;S 支用 12;有限額扣減、無其他變動。。全為假設,無部署或真實交易;額度變 0 不追回已支出的 12,也不讓餘額多出 8。
撤銷的完成證據,是成功後重查。教學時間線|沿用前一步餘額 88、剩餘額度 8 的有限額模型。。若交易失敗或仍等待,不把預期狀態填成完成;不同代幣的修改限制仍需按實作核對。

撤銷了一筆額度,哪些風險還在

撤銷處理的是特定權限,不會自動消除其他簽名、其他代幣或金鑰曝光。 本例完成的只有固定網路上,A 持有的 T 對 S 額度歸零。換成另一個 spender、另一條鏈或另一種資產,就需要另查。

未提交的Permit,與已存在的額度分開

現在加入一個獨立分支:A 曾簽過一份尚未提交的 EIP-2612 Permit。如果其 nonce 與期限等條件仍符合合約要求,它之後仍可能被提交,用來建立指定額度。Nonce 是防止同一許可重複使用的序號;deadline 是允許提交的截止條件,不是看到日期還沒到就可以放心。

這就是為什麼查到 Approve 額度為 0,不能進一步推論所有未提交的簽名都失效。要看實際協定、許可內容與取消方法;一般 approve(0) 並不自動取消所有種類的簽名。上述 20→8→0 的演練沒有 Permit 介入,這裡是用來說明額度歸零的結論邊界,不是宣稱那份教學已發生第二次支用。

額度歸零,不能涵蓋全部簽名。獨立分支圖|此處不屬於前面沒有 Permit 的 20/8/0 成功路徑。。Nonce 是防重複使用的序號,deadline 是提交期限;當下無費用不代表沒有資產風險。

私鑰外洩,撤銷額度不能換掉控制權

如果助記詞或私鑰已經交給別人,問題超出某個 S 的額度。持有控制材料的人可能再建立交易或授權,舊 App 改密碼也不會把對方的副本收回。可以接著看私鑰與助記詞差別,確認哪些帳戶共用同一份來源。

此時不宜只拿一張「已撤銷」截圖就結案;同樣也不能因為找到可疑授權,就認定私鑰必定外洩。應把已知曝光與仍不清楚的部分分開,按實際線索處理。可疑轉帳與控制權排查,會接續這個分流。

一筆權限清掉,不等於秘密重新保密。概念分流圖|依已知曝光判斷,避免把某項結果擴大為全部安全。。從可信入口開始,不提供助記詞或私鑰給檢查者;疑似搶轉時,不盲目往舊帳戶補 Gas。

把授權管理做成每次簽名前的習慣

最有用的習慣,是在每次答應之前說得出對象、範圍與生效方式。 事後盤點可以找出閒置額度,卻不能替下一個不明簽名預先背書。只要畫面無法辨認、資料不一致或網站催促略過核對,就先停止。

從可信入口檢查,不接陌生驗證要求

從自己核對過的錢包、官方文件或可信額度管理入口開始,不點陌生私訊提供的「安全檢查」。查公開額度不需要向客服交出助記詞或私鑰。管理工具若要求簽名或交易,要重新讀那次內容,不能因為工具標榜安全就視為例外。

MetaMask 官方〈Spending caps〉介紹查閱與撤銷支出額度的用途,但工具能列出哪些權限,仍受支援範圍限制。某個清單沒有列到,不等於不存在其他鏈、非同質化代幣(NFT)的操作權限或協定特有的簽名;本篇的 ERC-20 演練也不能直接代替它們的處理規則。

網路費與取消條件一起核對

Approve 與撤銷通常需要鏈上交易費;簽名型許可則可能把提交費用交給另一個人。費用由誰付,與你允許誰支用代幣,是兩個不同問題。失敗交易的費用判斷,會把準備額與實際扣費拆開。

如果只是例行管理,先確認費用與預算,再決定是否操作;如果已疑似有搶轉程式,不能直接往舊帳戶補原生幣來「完成撤銷」。搶轉程式會監看入金並自動迅速移走資產。停止條件和額度一起寫進計畫,才能避免為了處理一筆權限,反而再暴露新的資產。

本文為機制說明與假設情境,未執行真實授權或撤銷,不構成個人資產處置建議。代幣與協定的實作可能不同;有疑似失守事件時,應按實際資料與可信官方支援判斷。

常見問題

Q1. 斷開網站連接,代幣授權就消失了嗎?

不會自動消失。斷線與鏈上額度是不同狀態;要固定網路、持有人、代幣合約與 spender,確認相應撤銷交易成功後再查額度。

Q2. Approve 20,就會立刻轉走20嗎?

在本文模型中不會。Approve 改變的是指定對象可支用的額度;後續成功支用才改變代幣餘額,兩個步驟要分開確認。

Q3. 支用12之後,為什麼餘額88、額度卻是8?

本例起初有 100,有限額度為 20。成功支用 12 後,餘額為 100 − 12=88,額度為 20 − 12=8;這不代表所有代幣對最大額度都採相同扣減方式。

Q4. 額度歸零,還需要擔心之前簽過的Permit嗎?

需要分開判斷。符合 EIP-2612 等條件、尚未提交的許可,可能仍能在之後建立額度;一般 approve(0) 不會自動取消所有種類的簽名。

Q5. 使用硬體錢包,就不用檢查授權內容嗎?

仍要檢查。硬體降低部分取鑰風險,不會替使用者保證支用對象、代幣與額度合理;看不懂的要求應停止簽署。

Q6. 私鑰外洩,只撤銷授權就夠了嗎?

不足以更換已外洩的控制權。應排查相關來源帳戶與其他曝光,不能把改密碼或某一筆額度歸零當成控制材料重新保密。

代幣授權ApprovePermitERC-20撤銷授權錢包安全