# 什么是Permit

Permit 是在 EIP-2612 中提出的一个优化方案，用于改进 ERC-20 标准代币的交互方式。使用ERC-20 标准下进行 Approve 代币授权，需要支付 ETH 作为 Gas 费用。而通过 Permit 的方法，用户可以在链下私钥授权生成一个签名，拥有这个签名的人（如智能合约）可以直接调用 Permit 功能，从而进行代币转移，无需用户再支付 Approve 授权的 Gas 费用。

ERC20 的 EIP-2612 扩展所启用的方法，它通常是这样的：

<figure><img src="https://3236963393-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZCSGxZxDUFXGuknjRHbB%2Fuploads%2Fm9B0rCOOPcGwcFMyUsoz%2Fimage.png?alt=media&#x26;token=eeceef04-0e16-43dc-b451-f2c464c665f2" alt=""><figcaption></figcaption></figure>

1. Alice签署一个链外的 "permit(签名授权)" 信息，表示她希望授予一个合约一个（EIP-2612）Token的使用权。
2. Alice提交签署的消息，作为她与所述合约交互的一部分。
3. 合约调用Token上的 "permit()" 方法，它会使用签名授权信息和签名，同时授予合约一个授权。
4. 合约现在有了授权，所以它可以在Token上调用transferFrom()，转账由 Alice 持有的Token。

由于Permit (EIP-2612) 需要把相关方法写入ERC20Token合约内，所以已经部署的ERC20合约无法进行支持。（也就是说更加适合新发行的代币）

#### **这解决了典型 ERC20 授权方法的两个问题：** <a href="#id-0" id="id-0"></a>

* 用户不需要额外提交一个链上的approve()交互。
* 由于省掉了一笔链上操作所以可以通常可以选择一个更合理的授权额度，而不是无限大，更重要的是在签名授权消息时可以设置一个到期时间。
