代幣標準與 NFT
代幣授權
代幣授權是你簽署的一張許可單,讓另一個地址能代你搬動你的代幣。由於 ERC-20 餘額不過是代幣合約裡的一筆紀錄,去中心化交易所無法直接伸手取走你的代幣——你必須先對該代幣呼叫 approve(spender, amount),記下這個花用者日後最多可透過 transferFrom 拉走多少。幾乎每一個 DeFi 動作(兌換、存入、借貸)都從這樣一次授權開始。
其中的便利陷阱是「無上限授權」。為了省去使用者在每次交易前重新授權的麻煩,應用程式往往直接索取 2^256 減 1(寫作 type(uint256).max)這個近乎無限的額度。只要花用者合約誠實且無漏洞,這沒問題;但若該合約日後被攻破、或本就心懷不軌,它便能在任何時刻把整筆已授權的餘額全數抽乾——哪怕你早已不再使用那個應用。授權會一直留在鏈上,直到你親自更動它。
良好習慣是:只授權你真正需要的數量、撤銷不再使用的授權(把額度設回零,例如透過 revoke.cash 之類工具),並仔細閱讀錢包的提示視窗。NFT 也有相同風險,來自 setApprovalForAll——它授予某個操作者搬動你某收藏系列中每一枚 NFT 的權利;對一個釣魚合約一次粗心的授權,就可能讓整個錢包的作品全部流失。
你在某 DEX 上只兌換了一次,錢包卻要求授權「無上限」。數月後該路由合約被攻破;攻擊者對每一個仍留著無限額度的錢包呼叫 transferFrom 並一一抽乾——包括你的,即使你再也沒回到那個網站。
授權不等於花用——你的授權交易本身並不會搬動任何代幣。危險之處在於它悄悄地賦予了別人日後搬動它們的權力,時機由對方決定,而非由你。
又称
另见