USDT0 Polygon 集成审计

OpenZeppelin 对 Across 协议的 Polygon 合约进行了代码审计,以准备 USDT0 的推出。审计发现了两个中等严重性的问题:Polygon_SpokePool 中剩余过多的 gas,以及费用上限可能设置过低,可能导致跨链传输 USDT0 失败。这些问题已在后续的 pull request 中得到解决。

目录

概要

TypeCross-ChainTimelineFrom 2025-08-25To 2025-08-25LanguagesSolidityTotal Issues2 (2 resolved)Critical Severity Issues0 (0 resolved)High Severity Issues0 (0 resolved)Medium Severity Issues2 (2 resolved)Low Severity Issues0 (0 resolved)Notes & Additional Information0 (0 resolved)

范围

OpenZeppelin 对 across-protocol/contracts 仓库进行了差异审计,头部提交为 d9826e3,基础提交为 f2415a2

以下文件在审计范围内:

 contracts/Polygon_SpokePool.sol
contracts/chain-adapters/Polygon_Adapter.sol

系统概述

审查中的更改为 Across 协议 Polygon 合约准备 USDT (USDT0) 的推出。这是通过在使用现有的 Polygon PoS 和 Circle CCTP 流的同时,接入一个使用 OFT (LayerZero 的全链同质化代币) 的额外桥接路径来实现的:

  • Polygon SpokePool: 构造函数现在接受 OFT 配置(目标 EID + 原生手续费上限),并且在提款时,按资产进行路由:USDC 使用 CCTP,如果为该代币注册了 messenger,则使用 OFT,否则通过 Polygon PoS 桥接。

  • Polygon Adapter (L1→L2): 当配置了 OFT messenger 时,此适配器为代币(特别是 USDT0)添加 OFT。否则,它会回退到 Polygon PoS 桥接。

特权角色与信任假设

在范围内的更改既没有添加任何新的特权角色,也没有修改任何现有的角色。有关此代码库中特权角色的更多信息,请参阅之前的审计报告。

在审计期间,做出了以下信任假设:

  • 假设已在 Polygon_SpokePool 中设置了正确的 _oftDstEid
  • 假设已在 Polygon_Adapter 中设置了正确的 _oftDstEid
  • 假设已在 Polygon_SpokePool 的预配置 oftMessengers 中正确设置了 OFT messenger 合约。
  • 假设已在 Ethereum 主网的 Polygon_AdapterOFT_ADAPTER_STORE 中正确设置了 OFT messenger 合约。

中等严重性

SpokePool 中剩余过多的 Gas

Polygon_SpokePool 合约旨在支持将 USDT0 发送到 Ethereum 主网。当账户调用 Polygon_SpokePool 合约的 executeRelayerRefundLeaf 函数 时,就会这样做。在此函数中,会调用 SpokePool 合约的 _transferViaOFT 函数,其中 _messenger.quoteSend 用于返回应与 _messenger.send 调用 一起转发的手续费金额。

executeRelayerRefundLeaf 函数的调用者必须首先调用 quoteSend 以预先获得手续费成本,以便他们转发调用时所需的 gas 量。如果价格在获得报价和调用 executeRelayerRefundLeaf 之间向下移动,那么随调用发送的过多的原生代币将保留在合约中。

考虑在交易结束时将过多的原生代币返回给调用者。

更新: 已在 pull request #1082 中解决。

手续费上限可能过低

在部署 Polygon_SpokePool 合约时,设置了 1e18手续费上限。由于手续费是根据目标链上的执行情况计算的,但以源链原生代币表示,因此所需的手续费可能高于设置的 feeCap。在 Polygon 网络上,原生代币是 POL,1 个单位的 POL 等于约 0.24 美元。这不太可能涵盖目标链(Ethereum 主网)的执行费用。例如,此时从 Optimism 等 L2 链到 Ethereum 主网的 USDT0 转账费用报价约为 1.26 美元(约 5 个 POL)。LayerZero 文档还提供了一个有用的 示例,用于计算从 Polygon 到 Ethereum 主网的转账费用。因此,USDT0 的跨链转账(其中目标链是 Ethereum 主网)可能会失败。

考虑设置更高的手续费上限,其中考虑到原生 POL 代币相对于 ETH 较低的价值。

更新已在 commit 6a9655e 中解决。

结论

审查中的更改支持 Polygon 网络上 USDT0 代币的 OFT 功能。这些更改需要升级 Polygon 网络上的 Polygon_SpokePool 合约以及 Ethereum 主网上的 Polygon_Adapter 合约。在 Polygon_SpokePoolPolygon_Adapter 合约中引入了额外的路径,这些路径利用先前审计的 OFTTransportAdapterWithStore 合约中的 _transferViaOFT 函数来支持通过 LayerZero 发送 USDT0。

审查发现了两个中等严重性的问题。第一个问题与为 Polygon_SpokePool 合约设置的手续费上限有关,这可能导致无法将 USDT0 桥接到 Ethereum 主网。第二个问题与退还过多的 gas 有关,如果使用了过时的报价。

总的来说,已实施的更改似乎是合理的,并且仅限于支持在 Ethereum 主网和 Polygon 网络之间桥接 USDT0 所需的文件。

与专家交谈

  • 原文链接: blog.openzeppelin.com/us...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
OpenZeppelin
OpenZeppelin
江湖只有他的大名,没有他的介绍。