浅析Uniswap代币审批管理合约Permit2的作用与风险

Uniswap 在去年推出了 Permit2 授权标准,用于改善传统的 ERC20 代币的授权体验,其更加节省 gas,比传统的 ERC20 授权更安全,也更加方便管理。本文将对 Permit2 授权标准进行介绍,并分析其中可能存在的安全风险。

概述

Uniswap 在去年推出了 Permit2 授权标准,用于改善传统的 ERC20 代币的授权体验,其更加节省 gas,比传统的 ERC20 授权更安全,也更加方便管理。本文将对 Permit2 授权标准进行介绍,并分析其中可能存在的安全风险。

Permit 介绍

在分析 Permit2 授权标准之前我们先了解 Permit 授权。

Permit 是在 ERC-2612 中提出的,用户可以提前在链下对授权的地址、数量等信息进行签名,无需上链,然后授权地址获得签名后即可调用代币合约的 Permit 函数获取授权,从而可以进行代币的转移。

USDC 中 Permit 函数实现:

浅析Uniswap代币审批管理合约Permit2的作用与风险

Permit 首先会校验签名是否过期,然后将参数打包,校验签名合法性,校验通过则调用 _approve 函数进行授权。

Permit 授权方式需要代币合约实现 Permit 函数,而之前标准的 ERC20 代币则没有该方法,因此无法通过 Permit 的方式进行链下签名授权。

Permit2 介绍

Permit2 需要用户首先对 Permit2 合约进行传统的授权,授权后即可使用链下签名,将签署的 Permit2 签名传入智能合约的函数中,然后智能合约再调用 Permit2 合约,Permit2 合约验证了签名后调用代币合约的 transferFrom 函数进行转账。

用户只需要对 Permit2 合约授权一次,后续和其他智能合约交互时如果需要使用到授权过的代币,即可通过链下签名并传入相应的函数中进行交互,而无需每次都对不同的智能合约进行授权,当然这里的前提是交互的智能合约集成了 Permit2 合约。

Permit2 合约由两个合约组成,分别是 SignatureTransfer 合约以及 AllowanceTransfer 合约。SignatureTransfer 合约处理所有基于签名的转账。 AllowanceTransfer 合约处理代币的额度设置,允许支出者在指定的时间段内使用指定的金额。

在 SignatureTransfer 合约中主要的函数是 permitTransferFrom 函数,该函数使用签名消息转移代币,实现如下:

浅析Uniswap代币审批管理合约Permit2的作用与风险

其中结构体 PermitTransferFrom 中存放着转移的代币地址,可转移的最大数量,nonce 以及最后期限:

浅析Uniswap代币审批管理合约Permit2的作用与风险

而 SignatureTransferDetails 结构体中则存放着接受者的地址以及转移的数量:

浅析Uniswap代币审批管理合约Permit2的作用与风险

然后调用内部函数 _permitTransferFrom,先后进行期限校验、数量校验、nonce 校验、签名校验,都通过后将代币转移给指定的地址:

浅析Uniswap代币审批管理合约Permit2的作用与风险

同时还支持一次性转移多种代币,只需要修改传入的两种结构体:

浅析Uniswap代币审批管理合约Permit2的作用与风险
浅析Uniswap代币审批管理合约Permit2的作用与风险

调用的内部函数则变成了存在 for 循环的 _permitTransferFrom :

浅析Uniswap代币审批管理合约Permit2的作用与风险

而 AllowanceTransfer 合约中主要实现代币授权管理、转移等功能。

AllowanceTransfer 合约中的 mapping allowance 是一个由所有者指向代币地址指向支出者再指向 PackedAllowance 结构体,而结构体中存放数量、期限时间、nonce:

浅析Uniswap代币审批管理合约Permit2的作用与风险

在 AllowanceTransfer 合约中用户可以通过调用 approve 函数直接修改授权信息以及通过调用 permit 函数使用签名的方式进行修改(permitSingle 用于单个授权,permitBatch 用于批量授权):

浅析Uniswap代币审批管理合约Permit2的作用与风险

在 permitSingle 和 permitBatch 中存放着支出者的地址、签名的有效期以及 PermitDetails 结构体,而 PermitDetails 结构体则存放着代币地址、数量、授权有效期限以及 nonce :

浅析Uniswap代币审批管理合约Permit2的作用与风险

在经过授权后,则可以调用 transferFrom 函数进行代币的转移,其会调用内部函数 _transfer:

浅析Uniswap代币审批管理合约Permit2的作用与风险

_transfer 函数首先获取对应的 allowance 中的信息,然后校验授权是否过期,校验数量是否超出授权的最大数量,然后修改授权的数量,最后调用代币合约的 transferFrom 函数将代币进行转移。

以上是对 Permit2 的两个组成合约 SignatureTransfer 和 AllowanceTransfer 的简单介绍。

Permit2 风险分析

在介绍了 Permit2 的实现以后,我们再来分析其存在的风险。

传统的 ERC20 代币的授权是需要确认交易的,而使用了 Permit2 后则是在授权给 Permit2 合约后,后续的授权则可以通过签名的方式实现,用户对于签名的警惕性明显要小于发送交易,且很少会去确认签名的信息,这样会导致钓鱼的风险大大增加。如果使用的钱包没有。

同时之前的没有实现 Permit 的代币现在通过 Permit2 也能通过签名进行授权,这在方便的同时也增加了用户资产被钓鱼的风险。

传统的 ERC20 代币的授权是没有到期时间的,在 Permit2 协议中存在授权的有效时间,但是授权时间可以自行设置,因此这取决于使用 Permit2 标准的各类 Dapp。

总结

Uniswap 推出的 Permit2 协议确实在一定程度上让用户授权这个行为更加方便,节约 Gas,可以在 Permit2 合约中集中管理授权,但它也增加了用户被钓鱼攻击的风险。

(声明:请读者严格遵守所在地法律法规,本文不代表任何投资建议)

(0)
Gao的头像Gao
上一篇 2023年6月6日 下午10:47
下一篇 2023年6月6日 下午10:59

相关推荐

  • AO如何构建适用于AI Agent的去中心化计算网络

    这类网络由于不共享状态内存,扩容成本很低,多个任务可以并行计算且互不影响。这类项目往往基于 Actor 编程模型,代表就是 ICP,而 AO 也属于此类。Actor 下每一个计算单元被视为单独的智能独立处理事务,计算单元之间通过通讯交互(Actor 是传统 Web2 服务中非常常见的架构)。

    2024年6月21日
    377
  • 岌岌可危?Curve创始人1.7亿美元的仓位现状

    昨日,数个 Curve Finance 池子被利用,而 Curve 创始人 Michael Egorov 目前有着一笔约 1 亿美元的贷款,该贷款由 4.275 亿美元 CRV(约占整个 CRV 流通供应量的 47%)做担保。随着 CRV 在过去 24 小时下跌 10%,Curve 的健康状况岌岌可危。

    2023年8月1日
    605
  • 各类DEX的LP机制研究:主流、AMM与跨链

    传统 DEX(去中心化交易所)是一种基于区块链技术的交易平台,它允许用户在无需信任第三方的情况下进行资产交易。

    2023年10月16日
    734

发表回复

登录后才能评论
微信

联系我们
邮箱:whylweb3@163.com
微信:gaoshuang613