DeFiFoundry
50,000 USDC
View results
Submission Details
Severity: medium
Valid

Hardcoded sequencerUptimeFeed Address

Summary

The initialize function hardcodes the sequencerUptimeFeed address to 0xFdB631F5EE196F0ed6FAa767959853A9F217697D. This approach has two major issues:

The hardcoded address is specific to ** Arbitrum **and will not work if the contract is deployed on Avalanche where the Chainlink Sequencer Uptime Feed has a different address.

The sequencerUptimeFeed cannot be updated after deployment, meaning if Chainlink changes the feed address in the future, the contract will break and require redeployment.

Vulnerability Details

function initialize() external initializer {
__Ownable2Step_init();
sequencerUptimeFeed = AggregatorV2V3Interface(0xFdB631F5EE196F0ed6FAa767959853A9F217697D);
}

The contract assumes that the sequencerUptimeFeed is always at 0xFdB631F5EE196F0ed6FAa767959853A9F217697D, which is only valid on Arbitrium.

On Avalanche, Chainlink uses a different address for the sequencer uptime feed, so calling this contract there will fail.

The address is set once during initialization and cannot be updated. If Chainlink updates or migrates its sequencer uptime feed contract in the future, the contract will become obsolete and require a full redeployment.

Impact

Any function using sequencerUptimeFeed on Avalanche will fail because the address is invalid.

If Chainlink migrates its Sequencer Uptime Feed contract, all interactions will fail, making the contract useless.

Tools Used

Manual Review

Recommendations

Instead of hardcoding, allow the sequencerUptimeFeed address to be set and updated after deployment.

Updates

Lead Judging Commences

n0kto Lead Judge 9 months ago
Submission Judgement Published
Validated
Assigned finding tags:

finding_Avalanche_has_no_sequencer

Likelihood: High, run and runNextAction will revert. Impact: Low, any deposit will be retrieve thanks to cancelFlow.

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.

Give us feedback!