跳到主要内容一个地址对自己代币授出的全部有效权限——以及如何撤销它们。
一个地址对自己代币授出的全部有效权限——以及如何撤销它们。
给合约授权不是一次性付款。它会把一份 allowance 写进代币自身的存储,而这份 allowance 会一直留在那里——随时可花,且无需你再次签名——直到被用完或被重置为零。其中大多数被设成无上限,因为应用就是这么要求的。在上方输入一个地址,看看哪些授权仍然有效。
- 列表从何而来:
- 该地址发出过的每一个
Approval 和 ApprovalForAll 事件,按「代币 + 被授权方」折叠后只保留最新的一次授权。之后把额度改为零的授权是撤销,不会列出。 - 哪些是实时读取的:
- 对页面上的每一行,
allowance(owner, spender) 都会在某个固定区块从代币合约读取。已经用掉部分有限额度的被授权方不会发出任何事件,因此仅凭授出金额会高估风险敞口。 - 撤销做了什么:
- 从你的钱包向代币合约发送
approve(spender, 0),用 USDC 支付 gas。Arcscan 只负责编码并展示该调用;它从不持有密钥,也从不签名。 - 这里无法告诉你什么:
- 被授权方是否可信。对可升级代理的授权,明天的含义可能与你授权时不同,本页看不到这一点——它只能告诉你该权限确实存在。
- 什么是代币授权,为什么它会比创建它的那笔交易活得更久?
- 给合约授权会把一份 allowance 写进代币自身的存储:从那一刻起,被授权方随时可以调用 transferFrom,转走至多那么多你的代币,而不需要你再签一次名。它与你当时做的那次兑换或存入并无绑定——它会一直留在那里,直到被花完或被显式重置为零。这就是为什么你几个月前只用过一次的应用,今天仍然握有一份有效权限。
- 无上限授权究竟意味着什么?
- 钱包和应用通常请求 2^256-1——该类型能容纳的最大数值——这样你就再也不用授权了。它不会递减,也不会过期。如果那个合约被攻破,或本来就是恶意的,它能拿走的上限就是你该代币的全部余额,包括你之后买入的部分。
- 为什么这个列表有时显示的数额比当初授权的要少?
- 因为 transferFrom 会静默地减少额度——它发出的是 Transfer 而不是 Approval——所以仅凭事件历史只能知道当初授出了多少。「链上当前」一列会在某个固定区块直接从代币合约读取 allowance(owner, spender),因此显示的是真正仍可花费的部分。两者不一致时,以链上数字为准。
- 空结果能证明我没有任何授权吗?
- 不能,本页对此直言不讳,而不是暗示相反。授权是从 Arcscan 已索引区块中的 Approval 事件重建出来的。在该范围开始之前授出、此后从未触碰过的授权,不会在范围内留下事件,因此无法出现在这里。所查询的区块范围印在表格下方。
- 撤销要花多少钱?Arcscan 会碰我的密钥吗?
- 撤销就是一笔普通交易——approve(spender, 0),操作者授权则是 setApprovalForAll(operator, false)——发送到代币合约,和其他交易一样以 USDC 支付 gas。Arcscan 从不持有密钥、从不签名、也从不发送任何东西:它编码这条调用,把它写了什么原样展示给你,批准发生在你的钱包里。你也可以复制 calldata,完全在别处签名。
- 为什么操作者授权没有列出金额?
- 因为 setApprovalForAll 根本没有金额。它授权操作者转移你在该合集中持有的每一个代币,包括你尚未获得的那些,直到你撤回为止。若在额度列里用一个破折号来表示,页面上最宽的权限看起来反而会像最窄的。
代币是以自身单位记账余额的合约。请始终从代币自己的合约读取小数位数:在这条链上,两个共用符号的代币经常采用不同的小数刻度,取错会让余额相差一万亿倍。 了解更多
代币授权检查器 · Arc(链 ID 5042) | Arcscan