Proud Rusty Mantis
Medium
The developers have made it a priority to handle any sequencer issues in the code by implementing a modifier used for that:
modifier checkSequencerActive() {
if (sequencerUptimeFeed != address(0)) {
(, /*uint80 roundID*/ int256 answer, uint256 startedAt /*uint256 updatedAt*/ /*uint80 answeredInRound*/, , ) = AggregatorV2V3Interface(sequencerUptimeFeed).latestRoundData();
// Answer == 0: Sequencer is up
// Answer == 1: Sequencer is down
bool isSequencerUp = answer == 0;
if (!isSequencerUp) {
revert SequencerDown();
}
// Make sure the grace period has passed after the
// sequencer is back up.
uint256 timeSinceUp = block.timestamp - startedAt;
if (timeSinceUp <= GRACE_PERIOD_TIME) {
revert GracePeriodNotOver();
}
}
_;
}
The issue is that it is not sufficiently validated. According to the chainlink docs, the startedAt
variable on Arbitrum (a chain the protocol will be deployed on) can be 0 and that shows that the price feed is still not ready for use:
The startedAt variable returns 0 only on Arbitrum when the Sequencer Uptime contract is not yet initialized.
This will make the check always pass and provide incorrect data across the protocol causing all kinds of issues.
No response
Incorrect data will be provided across the protocol. The protocol has made it a huge priority to handle sequencer issues, thus this is a valid issue.
Handle a startedAt
value of 0