浅析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

相关推荐

  • Uniswap的狂野进化:从协议到链 ,Unichain如何重塑DeFi格局?

    作为灰度基金(Grayscale)DeFi 持仓中的最大头寸,$UNI 的影响力已然跨越了 DeFi 的范畴。Unichain 的推出,无疑是 Uniswap 对自身定位的重新定义:从单一的协议,迈向作为 DeFi 基础设施的链级平台。

    2024年12月10日
    655
  • 观点:DeFi如何摆脱沦为赌场的困境?

    然而,传统金融和 DeFi 之间的主要区别之一是: DeFi 尚未拥有从此类投机中受益的外部非加密业务 / 人员。有些人可能会将股票、黄金、白银和商品类比,但这些资产提供的「投机」是为其相关业务带来对冲机制。例如,航空公司会签订合同以对冲风险,确保燃料价格稳定。这就引出一个问题,即 DeFi 如何提供为大众带来实用性服务,而不是仅为赌徒所用。

    2022年12月17日
    2.0K
  • 全景式解读执行层:EVM一枝独秀,业务能力为成败关键

    Arbitrum 和 Optimism 的吸引力,以及 zkSync、Starknet 等预期推出的产品,加快了新执行层构建的速度。自 2018 年以来,有超过 20 亿美元的风投资金进入了这一领域。该领域目前有几十个项目正在建设,因此跟踪这些项目变得越来越有挑战性。此外,随着最近将 rollup SDKs/rollup 作为服务提供商的趋势出现,这种情况更加严重。

    2023年5月10日
    864

发表回复

登录后才能评论
微信

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