# 什么是 Permit2？

### Permit2 是如何工作的？

Permit2 是一个智能合约，用户需要向其授予无限制的许可（unlimited approval）。在对 Permit2 合约进行批准后，可以使用它来向其他智能合约发放子许可（sub-approvals）。这可以通过函数 `Permit2.approve()`来完成，该函数的工作方式与 `approve()` 在 ERC20 代币中的作用相同。但也可以通过函数 `Permit2.permit()`来实现，该函数的工作方式类似于 `permit()` EIP2612 中的函数。

除了为不支持 Permit 签名的代币提供支持之外，Permit2 还增加了其他功能。最重要的是，它为使用 Permit2 所做的所有批准添加了有效期。因此，您无需无限期地批准合约，而可以设置批准在到期后自动失效。

### Permit2 的优点

Permit2 具有与原始 EIP2612 Permit 签名相同的优点：用户的操作更少，因为他们不需要单独发送批准交易， *并且* 潜在的风险更小，因为应用在使用 Permit 或 Permit2 签名时无需请求无限制的权限（unlimited approvals）。

此外，Permit2 解决了 EIP2612 Permit 签名的一个主要缺点——大多数代币不支持它们。Permit2 通过允许对每个代币使用无需支付燃气的 Permit 签名来解决这一问题。

Permit2 的另一个额外好处是它还为批准添加了有效期。这减少了用户需要处理的问题，因为他们不必手动撤销所有权限。此外，安全风险也降低了，因为未使用的批准数量减少，黑客利用这些批准的机会也随之减少。

### Permit2 的缺点和风险

尽管 Permit2 有重要的优势，但需要注意的是，与常规批准或 EIP2612 Permit 签名相比，它也带来了一些新的安全风险。

![Permit2 批量 MetaMask 弹窗](https://revoke.cash/assets/images/learn/approvals/what-is-permit2/permit-batch.png)

Permit2 系统非常灵活，允许对多个代币同时发放批准。由于这种灵活性，用户更难理解他们到底在批准什么。钓鱼网站可能会利用这一点，欺骗用户发出他们不想授予的批准。

除了给用户带来额外风险外，这对应用开发者来说也是额外的难题。与 Permit2 的集成比使用常规批准甚至 EIP2612 Permit 签名需要更多工作。不过这一缺点被 Permit2 对所有代币的支持所部分抵消，因此相较于 EIP2612，投入的工作可能更有意义。

### 撤销 Permit2 批准

在讨论 Permit2 批准时，应考虑两件事。首先，是您授予给 Permit2 合约本身的常规批准。这个批准是必要的，以便 Permit2 合约能够代表您发放 *Permit2 批准* 。建议在不再使用该批准时撤销它。尤其是考虑到我们上面提到的额外钓鱼风险。

其次需要考虑的是实际由 Permit2 合约代表您发放的 *Permit2 批准*，这些批准通常具有不应过长的有效期，因此您可以考虑让它们自动过期。如果有效期太长，您仍然可以使用 Revoke.cash 手动撤销或更新该批准。

![Revoke.cash 上的 Permit2 批准](https://revoke.cash/assets/images/learn/approvals/what-is-permit2/permit2-approvals.png)
