Uniswap Permit2:高效、安全与一致的代币授权新标准

·

Uniswap Labs近期发布了两个创新的智能合约:Permit2与Universal Router。其中,Permit2作为一个代币授权合约,允许在不同应用程序间安全共享和管理授权,极大提升了链上交易的效率、安全性和用户体验。

什么是Permit2与Universal Router?

Permit2和Universal Router是Uniswap Labs为优化自身产品而设计的智能合约,旨在降低Gas成本、简化交易流程并增强安全性。在设计过程中,团队意识到这些工具同样适用于整个开发者生态,因此决定将其作为公共基础设施开放给所有开发者使用。

传统授权模式的局限性

典型的ERC20代币授权模式基于EIP-20标准,流程如下:

  1. 用户调用approve()方法,向合约授予代币支出权限。
  2. 用户调用合约交互函数,合约再调用代币的transferFrom()完成转账。

尽管该模式广泛应用,但存在两个显著问题:

EIP-2612签名授权模式

EIP-2612对代币授权进行了改进,用户可通过签名授权(Permit)信息与应用交互,无需提前授权。流程如下:

  1. 用户签署链外Permit消息,授权合约使用代币。
  2. 用户提交签名消息作为交互的一部分。
  3. 合约调用代币的permit()方法,使用签名授予授权。
  4. 合约获得授权后调用transferFrom()完成转账。

EIP-2612解决了传统授权的两个问题:

然而,EIP-2612仅适用于支持该标准的代币,许多旧代币和部分新代币并未采用该功能,限制了其应用范围。

Permit2的创新解决方案

Permit2结合了传统授权和EIP-2612的优点,将签名授权的便利性和安全性扩展到所有ERC20代币。其核心流程如下:

  1. 用户调用代币的approve()方法,向Permit2合约授予无限授权(仅需一次)。
  2. 用户签署链下Permit2消息,授权协议合约代表其转账代币。
  3. 用户调用协议合约的交互函数,传入签署的Permit2消息。
  4. 协议合约调用Permit2的permitTransferFrom()方法,Permit2使用其授权在代币合约上调用transferFrom()完成转账。

Permit2的优势在于:

如何集成Permit2?

前端集成

前端需要获取用户签名并将其传递到交易中。签名必须符合EIP-712标准,使用Permit2定义的域和类型哈希。用户签署的EIP-712对象中的spender字段必须设置为消费合约的地址。

智能合约集成

智能合约集成相对简单。任何需要转账用户代币的函数只需接受Permit消息细节和对应的EIP-712签名。实际转账时,调用规范Permit2合约的permitTransferFrom()方法。该函数参数包括:

👉 查看实时集成工具与示例代码

高级功能与应用

Permit2还支持多种高级功能,满足复杂应用场景:

示例与演示

一个简单的金库合约示例展示了Permit2的应用:用户使用Permit2存入ERC20代币,随后可提取。传统方式需要向金库授权并调用transferFrom(),而Permit2简化了这一流程。

测试用例部署了本地Permit2合约分叉,验证金库功能。EIP-712哈希和签名生成通常在前端或后端完成。

常见问题

1. Permit2适用于哪些代币?

Permit2支持所有ERC20代币,无论是否实现EIP-2612标准。它通过一次性授权和签名消息机制,扩展了签名授权的优势。

2. 集成Permit2需要修改现有合约吗?

集成Permit2需调整代币转账逻辑,调用Permit2合约的permitTransferFrom()方法。现有合约可能需升级,但改动相对简单。

3. Permit2如何提升安全性?

Permit2消息包含过期时间和唯一nonce,避免了无限期授权。即使协议被攻击,攻击者仅能在有限时间内操作代币。

4. Permit2的Gas成本如何?

Permit2通过共享授权和批量转账显著降低Gas成本。用户只需一次授权,后续交易无需重复操作。

5. 如何获取Permit2合约地址?

Permit2合约地址可在Uniswap官方公告或GitHub仓库中找到。确保使用官方地址以避免安全风险。

6. Permit2是否支持NFT?

Permit2专注于ERC20代币授权。Universal Router支持NFT兑换,但Permit2本身不处理NFT授权。

参考资源

Permit2作为代币授权的新标准,通过标准化和安全性优化,为DeFi应用带来了更高效的交互体验。随着更多项目的集成,它有望成为链上交易的基础设施核心。