The KeeperProxy contract implements a sequencer uptime verification that is specific to Arbitrum's L2 network. When deployed on Avalanche, this verification will always fail as it attempts to call an invalid sequencer address, resulting in a complete denial of service for critical keeper functions.
According to the contest brief, this protocol is intended for Arbitrum or Avalanche, but the KeeperProxy contract includes an Arbitrum specific sequencer status check in its _validatePrice
function, which is called before executing any keeper actions. This check uses a hardcoded Arbitrum sequencer uptime feed address:
The contract then attempts to verify the sequencer status:
While this check is necessary for Arbitrum's L2 network to ensure the sequencer is operational, it becomes problematic when the contract is deployed on Avalanche:
The hardcoded address has no meaning on Avalanche
Calls to this random address will revert
This check is mandatory and runs before any keeper action
Complete denial of service for all keeper functions on Avalanche
Users' deposits become locked in the PerpetualVault contract
No orders can be executed
Protocol becomes non-functional on Avalanche network
Make the sequencer check network-aware:
Likelihood: High, run and runNextAction will revert. Impact: Low, any deposit will be retrieve thanks to cancelFlow.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.