什么是代币授权?

本文详细解释了MetaMask中的token approval概念,即授权去中心化应用(dapp)访问和移动你的代币。

目录

在 web3 中,你会遇到各种类型的交易,每种交易在 MetaMask 确认时都可以识别。

理解它们是什么以及如何解读其含义,是在 web3 中保持安全的重要部分。挑战在于,这些屏幕上显示的大量信息要么不是为人类直观阅读而设计的——例如我们识别为账户或合约地址的长十六进制数字——要么难以解读。

代币授权 是你将遇到的最常见的交易类型之一,因此了解它们至关重要。在 web3 中,尤其是在像 MetaMask 这样的 自托管 钱包中,你完全掌控一切,并对自己的所有行为承担最终责任。这就是为什么当你确认代币授权时,必须确切知道自己在签署什么。

什么是代币授权?

简而言之:允许 dapp 访问并从你的钱包转移特定类型的代币

如果你经常使用去中心化交易所(DEX)和 DeFi,这些提示通常会出现在 MetaMask 中。大多数平台依赖你将代币存入或转移给他们,原因各不相同。然而,点击“转移”、“存入”或“移动”等按钮不会有任何作用,除非你作为钱包拥有者给予了 dapp 相应的权限。

这就是代币授权必要的原因:它们使 dapp 能够代表你访问和转移你的代币。

它们长什么样

MetaMask 中出现的代币授权提示大致如下:

自定义支出限额扩展

让我们来分析一下。请注意:

  • dapp 的名称和网址显示在顶部。 这有助于确保你期望与之交互的 dapp 确实是请求授权的那个。
  • 你可以点击“验证合约详情”来查看请求访问的智能合约地址。如果你与一个不是 100% 确定的 dapp/合约交互,可以将此地址复制到区块浏览器如 Etherscan 上查找,查看是否有异常活动,或者是否被标记为潜在骗局。
  • 你可以在“自定义支出限额”字段下编辑权限。在此上下文中,限额指的是 dapp 可以访问该代币(此处为 USDC)的数量。请注意,这并不受你账户中实际持有该代币数量的限制;它可能且常常远超这个数量。有关编辑代币授权的更多信息,请参阅我们的关于设置自定义支出限额的文章
  • 你需要支付 Gas 费用。确保授权安全的唯一方法是所有人都 100% 确定它来自你——钱包拥有者。幸运的是,我们恰好使用了一个去中心化、不可变的账本(即区块链),可以将你的许可记录为历史事实。但要使此许可被记录,它必须上链;而任何交易要在链上处理,你必须支付网络运行的费用:Gas。

它们意味着什么

如果你授予 dapp 访问 1,000 USDT 的权限,那么每当你要求它转移时,它就可以进行转移,而无需再次发起类似的代币授权交易。这适用于 dapp 已转移了 1,000 个代币之前,之后你需要签署另一笔交易。

但幕后发生了什么?实际上,当你批准对某个代币的访问时,在许多情况下,你是在同意 dapp 调用 transferFrom 函数,这是 ERC-20 标准中定义的函数之一。(在编程中,“调用”函数就是使用它。)它允许 dapp 将指定数量的代币从你的钱包转移到他们的钱包。数量由相应的 approve 函数决定——你猜对了——当你签署代币授权时,你为该函数提供输入值。

当你在 MetaMask 中看到授权确认时,可以亲眼看到此过程。如果你向下滚动到“查看完整交易详情”并点击,可以看到列出的“Approve”函数:

代币授权数据

“授权给”字段为你提供了另一个机会,可以复制请求授权的合约地址,并在区块浏览器上验证其合法性。

信息

EIP-3009:permit 函数与最小化 Gas 费用

并非你遇到的每个代币都像我们上面描述的那样工作,上述描述与 ERC-20 代币相关。这种 approve + transferFrom 的机制不适用于实现了 EIP-3009 模型的代币,其中最著名的例子是稳定币 USDC。

使用 EIP-3009,签署的是 permit 交易,而不是 approve 交易。它将授权和转移捆绑在一笔交易中,这意味着你实际上无需为授权支付 Gas,只需支付转移代币的 Gas。

想要更多关于授权的信息?请参阅我们关于此主题的博客文章,深入了解。

撤销代币授权

掌控你的资产并了解哪些 dapp 可以访问它们,永远不会错。有几种方法可以撤销现有的代币授权:请参阅我们的文章了解更多详情。

无限代币授权:如何保持安全

通常,代币授权请求会要求访问如此多的代币,以至于实际上是无限的——只需看上面的截图,Uniswap 请求访问 1.1559 个代币。许多合法的 dapp 这样做是为了减少你每次在 dapp 上使用代币时重新授权的需求和相关交易成本。以 DEX 为例:如果你进行大量代币交换,你不希望每次都额外点击和支付 Gas 费用。

然而,请求无限数量的代币也是许多恶意网站从毫无戒心的 web3 用户那里窃取的方式。如果你已经遵守了我们所有的推荐安全提示,包括将助记词保持离线状态且绝不分享,但仍然可能被利用,这对用户来说尤其令人沮丧。

为确保你不会授予恶意行为者访问你所有代币的权限,我们建议你遵循以下关键原则(摘自我们的博客文章):

  • 在点击“批准”之前,始终检查 dapp 实际请求什么。在 MetaMask 中,你还可以调整dapp 可以访问的数量。即使你只授权了 10% 的代币,而该 dapp 最终是骗局,那也比你授予无限访问权限要好得多。
  • DYOR。养成对任何 dapp 进行尽职调查的最佳时间是六个月前;次佳时间是今天。注意拼写错误、低质量的图片/徽标以及其他破绽。
  • 记住,如果某件事好得不像真的,那它很可能就是假的。如果有人向你提供 498,563% 的年化收益率,你可能已经站在薄冰上了。

setApprovalForAll:让你更清楚在 MetaMask 中批准了什么

如果你不熟悉以太坊智能合约代码,setApprovalForAll 可能看起来有点令人困惑,但如果你与 dapp 交互,了解它是有价值的。

这是 ERC-721 和 ERC-1155 标准(专门针对 NFT)中的一个函数,它允许你授予或撤销其他地址管理与特定智能合约相关的你的所有 NFT 的能力。

此函数最常见的应用之一是 NFT 市场。当你在 OpenSea 等平台上出售 NFT 时,你需要允许 dapp 在成交时访问该 NFT 并将其转让给买家。此类平台通常请求访问所有该类型的 NFT(即来自同一智能合约)。对于作为用户的你来说,这通常无关紧要——我们信任像 OpenSea 这样的大型平台不会越界并移除它们不应该移除的 NFT。

而且,就像我们说的,通常事情到此为止。然而,与 web3 的许多领域一样,这为诈骗者提供了潜在突破口;要么通过利用某个现有 dapp(许多钱包已经授予它访问所有某类型代币的权限),要么通过引诱你授权给一个恶意 dapp。

这就是为什么 MetaMask 扩展在签署 setApprovalForAll 交易时,尽可能清晰地表明你同意什么。它看起来是这样的:

ApproveAll 通知

还要注意,你可以选择“验证合约详情”。点击此选项,你将进入一个页面,显示以下名称(如果有的话):

  • 请求访问的合约
  • NFT 合约

MetaMask 从公开可用的数据中检索此信息,如果你想进一步调查,还可以将每个合约的地址复制到剪贴板。此时需要注意哪些事项,请参阅我们的关于验证智能合约安全性的文章

鉴于此函数允许访问与合约相关的所有代币,当你看到它时,应该想到两件事:

  • 我与之交互的 dapp 是否真的需要访问我所有的代币?
  • 这是一个合法、非恶意且不试图诈骗我的网站吗?

此函数的一个常见的合法应用是,恶意 dapp 要求你执行 setApprovalForAll 来领取 NFT 空投:你不应该签署这种授权来接收任何东西。不要被愚弄!

我们无法保护你免受使用 web3 固有风险的影响:作为自托管钱包的拥有者,责任在于你。然而,通过这样的更改,我们正在努力为你提供所需的信息,以保持警惕并清楚了解你在做什么。

深入阅读

有关代币授权以及无限授权的陷阱的更多阅读,请参阅以下内容:

  • 原文链接: support.metamask.io/stay...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
metamask
metamask
江湖只有他的大名,没有他的介绍。