The _validateCallData function is designed to validate that an external call is made to the correct Paraswap AugustusSwapper contract. However, the function hardcodes the AugustusSwapper address for Arbitrum, making this feature unusable when the contract is deployed on other chains like Avalanche, where AugustusSwapper has a different address.
This is the AugustusSwapper address on Arbitrum. However, on Avalanche, AugustusSwapper has a different address. When deployed on Avalanche, all swap transactions will fail due to the mismatch in contract address.
The contract is intended to be deployed on both Arbitrum and Avalanche, but this hardcoded address prevents it from working on avalanche.
Any transaction using _validateCallData on Avalanche will revert, making the contract unusable on that chain.
If Paraswap updates the AugustusSwapper address on Arbitrum, the contract will become obsolete and require redeployment.
Manual Review
Instead of hardcoding, store the AugustusSwapper address in contract storage and have setter and getter functions.
There is no real proof, concrete root cause, specific impact, or enough details in those submissions. Examples include: "It could happen" without specifying when, "If this impossible case happens," "Unexpected behavior," etc. Make a Proof of Concept (PoC) using external functions and realistic parameters. Do not test only the internal function where you think you found something.
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.