The function graduateAndUpgrade(address _levelTwo, bytes memory) includes a bytes memory parameter that is neither named nor used. This introduces confusion and may be misunderstood as supporting upgrade-and-call functionality.
OpenZeppelin's upgradeToAndCall() uses a similar signature, where the second bytes parameter is used to perform a delegatecall after upgrading. However, in this contract:
The bytes parameter is unused,
There is no delegatecall logic,
It may mislead future developers into thinking post-upgrade calls are supported.
This results in an inconsistent interface that doesn't match its actual behavior.
This is a code clarity issue rather than a functional bug, but can mislead users or integrators expecting upgrade-and-call behavior.
Manual inspection
If not needed, simplify the function to:
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.