第一次在去中心化交易所交换代币时,钱包可能会先弹出Approve,然后才让你确认交换。这两个步骤分别做了什么?为什么离开网站后,权限仍可能继续存在?
代币授权是让指定地址或合约,依代币规则动用你部分资产的机制。它可以让交易、借贷等应用运作,但授权的对象、额度与有效条件,都需要看清楚。
本文以Ethereum 与EVM网络常见的ERC-20 模式为主,介绍如何授权、查询与撤销,也会说明Permit、Permit2 及NFT 权限的差异。其他网络或新型帐户的权限设计,不能直接套用全部细节。
在常见ERC-20 模式中,持有人可以呼叫代币合约的approve,为某个spender 设定可使用额度;spender 再依规则透过transferFrom 转移代币。
这里的spender 是获准动用资产的地址,常见为应用使用的合约。实际权限记录在代币合约中,不是只存在网站的登入状态。
因此,授权前至少要确认:在哪条网络、哪个代币合约、自己的哪个帐户、哪个spender,以及多少额度。
授权不是把私钥交给对方。它是在特定合约规则下给予权限;对方可能不必再请你签署新的交易,就能在有效权限内动用资产。
「签名不用付Gas」不等于没有资产效果。安全判断要看签了什么,而不是只看钱包按钮写Sign、Approve 还是Confirm。
假设你要透过某个交易合约,用100 USDC 换成另一种代币。合约需要依你的付款指示取用USDC,才能完成交换。
常见流程分成:
若既有额度已足够,或应用采用其他签署与交易组合,画面不一定每次出现两笔独立交易。
授权成功也不保证交换成功;交换仍可能因报价、滑价、期限或其他条件失败。此时原本授权可能仍有效。
假设你有1,000 枚某代币,这次只需要使用100 枚。
一般标准额度会在transferFrom 花费后扣减,但部分代币实作对最大额度有不同处理,不能假设每次使用后都会自动归零。
若极大额度长期有效,未来再转入同一帐户的同种代币,也可能在权限范围内。这不代表授权一种代币就能直接控制所有其他资产;范围需依实际合约与其他权限判断。
设定较小额度能限制部分曝险,但无法把恶意合约变成安全合约。首先仍要确认对象与操作合理。
ERC-2612 定义的permit,允许持有人透过签署结构化资料,让有效签章被提交至代币合约,以修改allowance。它和直接由持有人送出approve 交易的流程不同。
签署者可能不在签名当下支付Gas,但资料之后仍可由他人提交上链。因此,签名画面需要核对owner、spender、value、网络与合约,以及nonce、deadline 等相关资讯。
Permit 的提交期限,不一定是授权额度本身的到期时间。以ERC-2612 而言,deadline 限制的是签章可被接受的时间;生效后的allowance 不会只因这个期限经过就自动清零。
并非所有代币都支援相同permit 格式。已签但尚未使用的讯息,也不一定会出现在一般链上授权清单中。
Permit2 是另一套合约与签名机制,不能直接等同ERC-2612。使用者通常先透过代币合约授权Permit2,再依应用流程签署相应权限。
Uniswap 官方文件将主要用途分为:
SignatureTransfer:以一次性签名支援相应转移。AllowanceTransfer:设定带有额度与期限的spender 权限。这表示可能同时存在「代币对Permit2 的底层授权」与「Permit2 内的应用权限」。撤销时要看自己要关闭哪一层,不能只撤掉一个网站连线就认为全部失效。
同样地,不能因为Permit2 是常见基础设施,就不核对实际签署的spender、额度与条件。
不一样。以ERC-721 为例,approve 可针对单一NFT 设定授权;setApprovalForAll 则是对该NFT 合约中、由你持有的资产设定operator 权限。
这种「全部」通常指特定收藏合约的资产,不是整个钱包所有代币。撤销操作也与ERC-20 数量额度不同,不能直接套用相同画面。
本文后续流程以一般ERC-20 为例。若查到的是NFT 或帐户委派等权限,应依相应工具与官方说明核对。
可以使用钱包提供的权限页面、对应网络的区块浏览器approval checker,或Revoke.cash等工具。
查询一般可用公开地址进行,不需要输入助记词或私钥。是否需要连接钱包,取决于工具与接下来要做的操作。
建议依序核对:
同一个地址在不同网络的授权,不能当作同一笔权限。清单没有显示某项目,也不代表所有未使用签章或帐户层权限都不存在。
从已确认的官方入口进入,不透过陌生讯息里的紧急撤销连结。确认网址与所在网络。
先查清楚token、spender 与额度。优先处理确定不再使用、无法辨识或相关应用已发生问题的权限;不必为了清理画面而与陌生垃圾代币互动。
一般ERC-20 撤销通常把allowance 设为0。若只是调整到较小额度,依代币与工具流程处理;部分代币可能要求先归零,再设定新值。
确认是预期网络、代币合约与spender,并且额度降低或归零。若工具要求把资产转给陌生地址,或提高不相关的权限,先停止。
一般链上撤销需要交易费;工具本身也可能有批次或付费功能,实际以当时报价为准。未上链、失败或尚未生效的操作,不能当作撤销完成。
确认对应额度已降低或归零。日后再次使用同一服务,可能需要重新授权。
上述为依官方文件整理的通用流程,未替读者实际连接钱包、签名或操作资产。
一般不会因此自动失效。网站连线与链上allowance 是不同状态,关闭页面、删除浏览器扩充或断开连线,不会直接修改代币合约记录。
余额归零也不表示额度已撤销。若之后转入相同代币,既有权限仍可能影响这些资产。
相反地,撤掉某个spender 的特定代币额度,也不等于已关闭所有其他spender、其他网络或NFT 权限。
不能把撤销当成退款。它主要是限制未来透过相关权限发生的资产移动,不会自动追回先前已转出的资产,也无法保证抢在恶意花费前确认。
若只是曾对可疑spender 授权,可核对并撤掉对应权限;若私钥或助记词已外泄,攻击者可能自行签署新的操作,单靠撤销就不足以恢复控制安全。
两种情况的处理不同,应保留交易资料,透过可信官方管道确认,不再把备份交给所谓追回服务。
与这种授权问题不同,地址投毒主要诱导复制错误收款资讯,不能只撤销代币额度就解决所有误转问题。
一般不是。它通常先设定使用额度,交换或存入是后续操作,也可能依应用设计合并流程。
不会自动撤销既有链上额度,需另外处理相应权限。
一般ERC-20 额度针对特定网络、代币、持有人与spender;不是自动涵盖所有资产。但其他权限可能另外存在。
需要依后续用途评估。余额为零不表示额度归零,之后存入相同代币仍可能受到既有权限影响。
不是。 Permit 等签名可能承载资产使用权限,之后由其他人提交上链。
不一定。 ERC-2612 的deadline 是签章提交期限,不能直接当成已生效allowance 的到期日。
一般链上操作需要网络费,批次或付费工具还可能有服务费。查询与真正提交撤销应分开看。
不能。需要分网络、代币与spender 核对;私钥外泄、未使用签章与其他帐户权限,也不是单笔撤销就能全面处理。