# 什么是代币授权（Token Approvals）？

代币授权（token approvals）用于允许智能合约代表您花费您的代币。这是一种常见机制，被去中心化交易所（DEX）、借贷协议和其它 Dapp 应用使用。例如，如果您想在去中心化交易所（DEX）上交易您的代币，您需要授权该交易所代表您交换这些代币。

代币授权也适用于 NFT。例如，如果您想在交易市场上出售您的 NFT，您需要授权该市场代表您转移 NFT。或者如果您想将您的 NFT 用作借贷（loan）的抵押品，您需要授权借贷协议（lending protocol）代表您转移该 NFT。

### 代币授权（Token Approvals）如何工作？

在大多数智能合约的\[可替代代币]\(/learn/basics/what-are-tokens)和\[NFT]\(/learn/basics/what-are-nfts)中存在一种结构 *mapping*，用于跟踪用户授予的所有授权，以及授权给谁和授权的数量。每次您授予或撤销其中一个授权时， *mapping* 会被更新。

当合约试图代表您花费您的代币时，代币的智能合约会检查 *mapping*，以确定支出方是否有权限花费代币。如果有，代币将被花费。如果没有，交易将失败。

#### 可替代（fungible）代币的授权

在可替代（fungible）代币中，智能合约包含一个函数 `approve()`，允许授予另一个地址代表您花费代币的权限。该函数接受两个参数：支出地址和代币数量。撤销授权是通过再次调用 `approve()` 并将金额设为 0 来实现的。

例如，如果您想授权去中心化交易所（DEX）代表您花费 1000 USDC，您需要以以下方式调用 `approve()` ：

![授权 USDC](https://revoke.cash/assets/images/learn/approvals/what-are-token-approvals/erc20-approve.png)

#### NFT 授权（Approvals）

对于 NFT，存在两种不同类型的授权：有限（limited）和无限（unlimited）。有限授权用于允许智能合约代表您转移特定的 NFT（具有特定 id）。无限授权用于允许智能合约代表您转移您持有的任何 NFT。有限授权一次只能授予一个地址，因此大多数 NFT 市场使用的是无限授权。

**NFT 的有限授权（Limited Approvals）**

对于 NFT 的有限授权，合约包含一个函数 `approve()`，允许授予另一个地址代表您转移特定 NFT 的权限。该函数接受两个参数：接收方地址和所需 NFT 的 id。撤销授权是通过再次调用 `approve()` 并使用相同的参数，但将接收方地址指定为 `0x000...`。这种授权在转移时也会自动取消。

例如，如果您想授权 OpenSea 代表您转移 ID 为 4420 的 Pudgy Penguin，您需要调用 `approve()` ：

![授权 Pudgy Penguins 4420](https://revoke.cash/assets/images/learn/approvals/what-are-token-approvals/erc721-approve.png)

**NFT 的无限授权（Unlimited Approvals）**

对于无限数量的 NFT 授权，合约包含一个函数 `setApprovalForAll()`，允许授予另一个地址代表您从钱包转移任何 NFT 的权限。该函数接受两个参数：接收方地址和 true/false 值。授权是通过调用 `setApprovalForAll()` 并传入参数 `true`来完成的，而撤销则传入参数 `false`.

。例如，如果您想授权 OpenSea 代表您转移您持有的任何 NFT，您需要调用 `setApprovalForAll()` ：

![授权所有 Pudgy Penguins](https://revoke.cash/assets/images/learn/approvals/what-are-token-approvals/erc721-setApprovalForAll.png)

#### 半可替代代币（Semi-Fungible）的授权

半可替代（Semi-Fungible）代币是一种特殊类型的 NFT，可用于表示同一资产的多个副本。如您所见，这些代币与 NFT 有许多相似之处，因此它们的授权机制也非常类似。最大的区别在于，semi-fungible 代币有一个函数 `setApprovalForAll()`，但没有函数 `approve()`.

### 代币授权（Token Approvals）风险

代币授权是智能合约生态系统的关键部分。没有它们，许多 DeFi 应用将无法运作。但代币授权也存在风险。如果您授权智能合约花费您的代币，它可以在任何时候花费它们。因此，如果智能合约被入侵或遭到攻击，您的代币可能会被窃取。

#### 智能合约漏洞利用（Exploits）

代币授权的一个风险是您授权的智能合约可能会被利用入侵。即使是相当知名的项目也可能成为攻击目标，正如我们在 2023 年 4 月看到的 [SushiSwap 漏洞利用](https://revoke.cash/ru/exploits/sushiswap) 事件那样。在这种情况下，如果您曾向被入侵的智能合约授予过任何权限，黑客可能会从您的钱包中窃取代币。

为防止此类情况，我们创建了 [漏洞利用查看器](https://revoke.cash/ru/exploits)，其中包含已知智能合约漏洞利用的列表。您可以使用此工具检查自己是否对被入侵的智能合约有未撤销的授权。

#### 诈骗与网络钓鱼攻击

除了真正项目被入侵之外，加密领域也充斥着各种诈骗和钓鱼攻击。诈骗者经常利用授权来窃取您的资金。常见的利用授权的钓鱼手法包括：

1. **直接向诈骗者授权**：诈骗者通过欺骗使您授权一个由其控制的智能合约，从而允许其直接从您的钱包中取走资金。
2. **在 NFT 市场上发布广告**：诈骗者通过欺骗使您授权一个签名，令您的资产以 0 ETH 的价格在 NFT 市场上挂售，从而让其能够以 0 ETH “购买”您的 NFT。
