CoinIX DOCS

代幣授權風險是什麼?怎麼撤銷Approve

解析代幣Approve授權機制、潛在風險、Revoke撤銷操作步驟和定期審計的安全實踐,給DeFi使用者的實操參考。

2026-04-29 17 分鐘閱讀 CoinIX 編輯部

代幣 Approve(授權)是 ERC20 代幣與智慧合約互動的標準機制,但也是 2024-2026 年最大的 DeFi 攻擊向量。本文詳解 Approve 機制 + 撤銷操作。先給結論:每次 DeFi 互動都可能產生 Approve 殘留長期不撤銷會累積巨大風險每月用 Revoke.cash 審計 + 撤銷不必要的授權是 DeFi 使用者必備習慣。日常賬戶主備雙選可從 幣安官網 入口註冊主賬戶,安卓裝 幣安官方APP,蘋果使用者切換海外 Apple ID 參考 iOS安裝教程

一、Approve 機制原理

ERC20 代幣的雙方機制:

ERC20 代幣標準設計了兩種轉賬方式:

  1. transfer:使用者主動轉賬(你給別人轉 USDC)
  2. transferFrom:合約代為轉賬(智慧合約從你賬戶提取 USDC)

transferFrom 需要先 Approve

第 1 步:使用者呼叫 USDC 合約的 approve(spender, amount)
        - spender = 合約地址
        - amount = 授權數量

第 2 步:合約呼叫 transferFrom(user, recipient, amount)
        - 必須在 amount 範圍內才成功

例如使用 Uniswap:

第 1 步:使用者 Approve Uniswap Router 提取 USDC(一次性 Approve 1000 USDC)
第 2 步:使用者在 Uniswap 上發起 USDC → ETH 兌換
第 3 步:Uniswap Router 呼叫 USDC.transferFrom 提取 USDC
第 4 步:Uniswap Router 給使用者傳送對應數量的 ETH

Approve 是 DeFi 與 ERC20 代幣互動的底層機制

Q:每次互動都要重新 Approve 嗎?

不需要。Approve 是持久的

  • 使用者 Approve 1000 USDC 給 Uniswap → 該 1000 USDC 額度永久存在
  • 使用者在 Uniswap 上反覆交易,只要不超過 1000 USDC,無需重新 Approve
  • Approve 直到使用者主動 Revoke 或耗盡才結束

這是Approve 累積風險的根源:長期不撤銷 → 大量歷史 Approve 散佈。

二、Approve 的兩種型別

有限授權(Limited Approval):

  • 使用者授權特定數量(如 1000 USDC)
  • 合約最多提取 1000 USDC
  • 用完後需要重新 Approve

無限授權(Unlimited Approval / MaxUint256):

  • 使用者授權 2^256-1 數量(實際上無限)
  • 合約可提取無限數量
  • 永遠無需重新 Approve

為什麼會有無限授權:

  • Gas 最佳化:使用者只需 Approve 一次(節省 50-200 美元 Gas)
  • 使用者體驗:避免每次互動都 Approve
  • DApp 預設設定:Uniswap、SushiSwap 等預設無限 Approve

無限授權的風險:

  • 協議被黑後,使用者錢包內代幣可被無限提取
  • 釣魚合約 Approve 後,剩餘資產可被全部轉走
  • 難以察覺(使用者不會主動檢查)

真實案例:

2024 年 12 月某使用者在 2022 年 Uniswap 上 Approve USDC 為 Unlimited。2024 年 12 月使用者錢包接收了一筆 5 萬 USDC,2 小時後被惡意合約(一個偽裝成 Uniswap V3 的惡意 Router)呼叫 transferFrom 全部轉走。事後調查發現釣魚合約透過使用者歷史 Approve 漏洞實施攻擊。

Q:選有限授權還是無限授權?

安全派(推薦):每次互動手動 Approve 具體數量

  • 優勢:安全性高,單次損失可控
  • 劣勢:每次都消耗 Gas(5-30 美元)

便利派:預設無限授權

  • 優勢:節省 Gas + 一次 Approve 長期使用
  • 劣勢:協議被黑後損失大

主流策略

  • 大額代幣(>10000 美元):有限授權 + 用完即撤銷
  • 小額代幣(< 10000 美元):無限授權 + 定期審計

三、Approve 攻擊的常見形態

形態 1:釣魚網站 Approve 攻擊

釣魚網站 UI 模擬,使用者連線錢包後簽名一個 Approve 交易

  • 表面:要求"驗證錢包"或"領取空投"
  • 實際:Approve USDC / USDT / WETH 給惡意合約
  • 後續:惡意合約透過 transferFrom 轉走所有授權代幣

形態 2:Permit 簽名攻擊

EIP-2612 引入 permit 函式,允許透過簽名(不上鍊)授權:

  • 使用者簽名一個 Permit 訊息
  • 合約用該簽名呼叫 permit + transferFrom
  • 使用者錢包代幣被提取(無需使用者提前 Approve)

Permit 攻擊的危險

  • 使用者簽名時不消耗 Gas(不上鍊)
  • 錢包簽名頁面對 Permit 的解讀不直觀
  • 使用者可能誤以為是"無害簽名"

形態 3:協議被黑透過歷史 Approve

歷史 Approve 協議被黑:

  • 使用者 2 年前 Approve 給某 DeFi 協議
  • 協議被駭客接管(私鑰洩露 / 合約升級被劫持)
  • 駭客透過協議呼叫 transferFrom 提取所有授權代幣

形態 4:惡意 Token Drainer

釣魚網站簽名時多個 Approve 一次性授權

  • 單筆簽名包含多個 USDC / USDT / WETH 授權
  • 使用者看不清具體授權內容
  • 一次簽名導致錢包多代幣被授權

Q:Permit 簽名比 Approve 更危險嗎?

是的,Permit 危險性更高

維度 Approve Permit
上鍊 否(僅簽名)
消耗 Gas
錢包解讀 較清晰 不直觀
撤銷方式 Revoke 上鍊交易 無法撤銷(需修改合約 nonce)
使用者警惕度

任何 Permit 簽名都要仔細看簽名的代幣、數量、接收方

四、Revoke 撤銷 Approve 詳解

主流撤銷工具:

Revoke.cash(最主流,推薦):

  • 網址:revoke.cash
  • 支援鏈:以太坊 + 主流 EVM 鏈
  • 操作:連線錢包 → 檢視授權列表 → 點選 Revoke 撤銷

Etherscan Token Approval:

  • 網址:etherscan.io/tokenapprovalchecker
  • 僅以太坊主網
  • 顯示授權詳情

Solscan Approval(Solana):

  • 網址:solscan.io/account-token-approval
  • 僅 Solana
  • 撤銷 SPL 代幣授權

Revoke.cash 操作步驟:

1. 訪問 revoke.cash
2. 點選 "Connect Wallet"(連線 MetaMask / Rabby)
3. 自動載入所有授權(按代幣 / 協議分類)
4. 瀏覽列表:
   - 代幣名稱(USDC, USDT, WETH 等)
   - 授權物件(合約地址 + 知名協議名)
   - 授權數量(具體值或 Unlimited)
   - 風險評級(紅色 = 高風險,綠色 = 已知協議)
5. 點選 "Revoke" 撤銷可疑授權
6. MetaMask 彈窗簽名 + 支付 Gas
7. 等待上鍊(5-30 秒)

Revoke 的 Gas 成本:

單筆撤銷 Gas
以太坊主網 5-30 美元
Polygon < 0.01 美元
Arbitrum / Optimism / Base 0.1-1 美元
BNB Chain 0.05-0.30 美元
Solana < 0.01 美元

Q:撤銷 Approve 是否需要支付 Gas?

是。Revoke 是上鍊交易,需要支付 Gas。但:

  • 以太坊主網 Gas 較高(5-30 美元 / 筆)
  • L2 / 其他鏈 Gas 極低

最佳化建議

  • 在網路擁堵低的時候撤銷(深夜 / 週末)
  • 一次性撤銷多個授權(批次節省時間)
  • 優先撤銷高風險授權

五、定期審計 Approve 的標準流程

審計頻率:

使用者型別 審計頻率
活躍 DeFi 使用者(每週互動 5+ 次) 每月
中等 DeFi 使用者(每月互動 5-20 次) 每 3 個月
低頻 DeFi 使用者(每月互動 < 5 次) 每 6 個月

審計步驟:

第 1 步:連線錢包到 Revoke.cash

第 2 步:分類篩選授權

按風險等級排序:

  • 高風險:未知合約的 Unlimited 授權
  • 中風險:已知協議的 Unlimited 授權
  • 低風險:已知協議的有限授權

第 3 步:撤銷不必要的授權

撤銷原則:

  • 撤銷所有未知合約的授權
  • 撤銷不再使用的協議授權(如 1 年內未互動)
  • 保留主要用的協議授權(如 Uniswap、Aave 等)

第 4 步:保留必要授權的記錄

記錄保留的授權:

  • 協議名稱
  • 合約地址
  • 授權數量
  • 用途

第 5 步:每次審計後驗證

  • 撤銷後 Revoke.cash 應不再顯示該授權
  • 用 Etherscan 驗證合約的 allowance(user, spender) = 0

Q:撤銷前怎麼知道某個協議是不是"已知的"?

判斷方法:

  1. 協議名稱:Revoke.cash 顯示的協議名(如 "Uniswap V3 Router")
  2. 合約地址:搜尋 Etherscan 看合約是否被驗證 + 是否是主流協議
  3. DefiLlama 協議頁:檢視 TVL 和運營時間
  4. 官方文件:專案方公佈的合約地址

任何無法識別的合約 + Unlimited 授權 = 高風險,立即撤銷。

六、不同鏈上的 Approve 管理

以太坊主網 + EVM 相容鏈:

  • 機制相同:ERC20 標準 + Approve / transferFrom
  • 工具:Revoke.cash 通用
  • Gas 成本:以太坊主網最貴,L2 / Polygon / BSC 便宜

Solana 鏈:

  • 機制不同:SPL Token 用"Token Account"模型
  • 沒有 Approve / transferFrom:Solana 用"簽名授權"
  • 撤銷工具:Solscan / Phantom 內建 Revoke

比特幣鏈:

  • 無智慧合約:BTC 不需要 Approve
  • Lightning / Liquid 等二層網路:有不同機制

Move 系(Sui / Aptos):

  • 機制不同:Object 模型
  • 需要不同的撤銷邏輯

Q:Solana 上有 Approve 風險嗎?

有。Solana 上的"簽名授權"風險類似

  • 釣魚網站讓使用者簽名"Token Approval"
  • 使用者簽名後惡意合約可提取代幣
  • 撤銷需要在 Solscan 或錢包內操作

主流 Solana 釣魚

  • "免費 Mint NFT"頁面
  • "Solana 空投"領取
  • 假的 Jupiter / Raydium 仿冒站

防護原則與以太坊相同。

七、Approve 最佳化的最佳實踐

1. 每次 Approve 用具體數量

設定 MetaMask 的 Approve 提示:

  • 在 MetaMask 簽名 Approve 時,修改預設的 Unlimited 為具體數量
  • 例如:要交易 100 USDC,Approve 100 USDC(不是 Unlimited)

2. 主從錢包分離

  • 主錢包(80% 資產):永不 Approve 任何合約
  • 副錢包(20% 資產):日常 DeFi 互動
  • 擼毛錢包(< 1% 資產):高風險測試

3. 撤銷舊協議授權

每月審計:

  • 撤銷 6 個月內未使用的協議授權
  • 撤銷已廢棄的協議授權
  • 撤銷可疑域名的授權(即使過去看似合法)

4. 警惕"組合簽名"

  • 多個 Approve 在一筆交易中
  • 使用者難以辨識
  • 一簽全失

5. 使用簽名解讀工具

  • Rabby Wallet:顯示簽名實際效果
  • Pocket Universe:付費,詳細解讀
  • Wallet Guard:釣魚站 + 簽名警告

Q:能否一次性撤銷所有 Approve?

沒有"一鍵撤銷所有"功能

  • 每個 Approve 是獨立的鏈上交易
  • 必須逐個撤銷
  • 多個撤銷可在同一區塊內打包(但仍是多筆交易)

部分工具提供批次"佇列"

  • Revoke.cash:選中多個授權 → 依次簽名 → 依次上鍊
  • 每筆仍消耗 Gas

八、特殊場景:NFT Approve

NFT 也有 Approve 機制

  • setApprovalForAll:授權某個合約管理你所有的某個 NFT 集合
  • 例如:在 OpenSea 上掛賣 NFT → 必須 setApprovalForAll OpenSea 合約

NFT Approve 的風險:

  • Unlimited 性質:setApprovalForAll 是"對該集合所有 NFT 的無限授權"
  • 協議被黑:OpenSea / Blur 等被黑後,所有使用者的 NFT 可被提取
  • 釣魚場景:仿冒 OpenSea / Blur 讓使用者 setApprovalForAll

真實案例:

2024 年 5 月某使用者在仿冒 OpenSea 網站上簽名 setApprovalForAll,授權惡意合約管理其 BAYC NFT。事後 BAYC 被立即轉移到攻擊者地址,損失約 12 萬美元。

NFT Approve 的撤銷:

  • Revoke.cash 支援
  • Etherscan Token Approval Checker 支援
  • 操作類似 ERC20 Approve 撤銷

Q:在 OpenSea / Blur 賣 NFT 必須授權嗎?

是。主流 NFT 市場必須授權才能掛賣

  • OpenSea:setApprovalForAll OpenSea 合約
  • Blur:setApprovalForAll Blur 合約
  • Magic Eden:setApprovalForAll Magic Eden 合約

安全做法

  • 每次賣完 NFT 後立即撤銷 setApprovalForAll
  • 重新掛賣時再授權
  • 麻煩但安全

九、常見 FAQ

Q:Approve 一次最少多少 Gas?

以太坊主網 Approve 標準 Gas:

  • 基礎 Approve:約 46000 Gas
  • 當前 Gas Price 30 Gwei 時:約 5 美元

L2 / Polygon / BSC 上 Approve 通常 < 1 美元。

Q:撤銷過的 Approve 還能重新啟用嗎?

不能直接啟用。撤銷後等同於"從未授權",需要重新 Approve

  • 重新簽名 + 上鍊 + 支付 Gas

Q:所有 ERC20 代幣都需要 Approve 嗎?

是。所有 ERC20 標準代幣都遵循 Approve 機制

  • USDC / USDT / WETH / DAI 等穩定幣
  • UNI / LINK / AAVE 等治理代幣
  • 任何專案方代幣

例外

  • ETH(以太坊原生幣):不需要 Approve(直接 transfer)
  • BTC:不需要 Approve(無智慧合約)
  • Solana SPL:機制不同("簽名授權")

Q:Approve 後代幣會被鎖定嗎?

不會。Approve 不鎖定代幣

  • Approve 只是"允許"合約提取
  • 代幣仍在使用者錢包,可正常使用
  • 使用者可隨時把代幣轉出(即使有 Approve)

Approve 類似於"信用卡限額":你給商家信用額度,但錢仍在你的銀行賬戶。

Q:Permit 簽名怎麼撤銷?

Permit 簽名無法直接"撤銷",但有間接方法:

  • 修改合約 nonce:呼叫合約的 incrementNonce 讓 Permit 失效
  • 不主動使用錢包:Permit 有過期時間,過期自動失效
  • 新建錢包:徹底轉移資產到新錢包

Permit 安全的關鍵是預防:每次 Permit 簽名前仔細看。

Q:USDT 和 USDC Approve 風險一樣嗎?

整體類似,但有細節差異:

  • USDT:必須先 approve(spender, 0) 才能 approve(spender, X)(標準 ERC20 不需要這一步)
  • USDC:標準 ERC20 + Permit 支援(EIP-2612)
  • DAI:早期版本支援 Permit(獨特實現)

Q:能檢視一個錢包過去所有 Approve 歷史嗎?

可以:

  • Etherscan:地址頁面 → "Token Txns" → 篩選 Approve
  • Revoke.cash:顯示當前活躍授權(不顯示已撤銷的)
  • DeBank:地址畫像 + 授權歷史

Q:撤銷 Approve 後立即生效嗎?

是。Revoke 上鍊確認後立即生效

  • 鏈上 allowance(user, spender) 立即變 0
  • 合約無法再呼叫 transferFrom
  • 全網節點同步(5-30 秒)

Q:可以一次性 Revoke 多個錢包的授權嗎?

不能。每個錢包獨立

  • 每個錢包必須分別連線 Revoke.cash
  • 獨立審計授權列表
  • 獨立撤銷

多錢包使用者:每個月分別審計每個錢包。

資料來源

  • ERC20 標準協議(EIP-20)
  • EIP-2612 Permit 標準
  • Revoke.cash 工具文件
  • SlowMist Approve 釣魚案例彙總
  • Chainalysis 鏈上事件分析

風險提示:本文為獨立第三方梳理,不構成投資建議。Approve 是 DeFi 主要攻擊向量,定期審計和撤銷是基本安全實踐。所有資料為 2026 年 4 月。