浅析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)
上一篇 2023年6月6日 下午10:47
下一篇 2023年6月6日 下午10:59

相关推荐

  • 金融的未来会是怎样的?

    有史以来最伟大的加密货币周期始于去中心化金融协议的采用和传播,因为大众被引入了收益率农场、链上借贷和治理代币。这是加密货币在支付之外的第一个使用案例,这个故事足以让大多数机构相信,并将其作为金融的未来进行大力投注。

    2023年3月8日
    262
  • Solana流动性质押格局:Jito与Marinade谁是王者?

    12 月 7 日的 Jito 空投点燃了 Solana DeFi 生态。我们很高兴见证这场浪潮,因为它意味着我们的流动质押理论正在大范围发挥作用。

    2023年12月21日
    574
  • DeFi监管之殇,Uniswap在天堂,Tornado Cash在地狱

    而在 Uniswap「胜利」之前,同样在 SDNY,美国司法部等监管机构(DOJ)对 Tornado Cash 创始人 Roman Storm 和 Roman Semenov 提出了刑事指控,控诉两人在 Tornado Cash 运营期间涉嫌串谋洗钱、违反制裁规定并经营无牌汇款业务,两人将面临起码 20 年的牢狱之灾。

    2023年9月4日
    460

发表回复

登录后才能评论
微信

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