Skip to content

Latest commit

 

History

History
51 lines (29 loc) · 1.61 KB

079.md

File metadata and controls

51 lines (29 loc) · 1.61 KB

Shambolic Banana Barbel

Medium

L2 USDC will not be able to be upgraded to native USDC

Summary

An incorrect function signature in L1USDCGateway.sol will prevent the upgrade of L2 USDC to native USDC.

Root Cause

L1USDCGateway.sol and L2USDCGateway.sol have been designed to follow the Bridged USDC Standard, which will allow for a future upgrade to native USDC.

The requirements include: (a) the ability to burn the USDC locked in L1, (b) the ability to pause the contracts for the upgrade, and (c) the ability to transfer ownership of the USDC contract on L2 to Circle.

This is mostly done correctly, however, the wrong function signature has been added to the L1 contract, which will block the upgrade from happening.

As we can see in Circle's documenation, the L1 contract needs the following function:

function burnLockedUSDC() external;

However, if we look in L1USDCGateway.sol, we can see that the function signature is:

function burnAllLockedUSDC() external;

Internal pre-conditions

None

External pre-conditions

None

Attack Path

N/A

Impact

The L2 USDC contract, which is intended to be able to be upgraded in the future to native USDC, will not be permitted to perform this upgrade.

PoC

N/A

Mitigation

Change the function name to burnLockedUSDC().