The TimelockController's predecessor parameter, designed to enforce proposal execution order, is not utilized in Governance.sol, allowing proposals to be executed in arbitrary order. This can break protocol functionality when proposals are meant to be executed sequentially.
The TimelockController implements a predecessor system to enforce execution order of operations:
However, in Governance.sol, this parameter is always set to zero:
Proposals that depend on previous proposals can be executed out of order
Can lead to incorrect protocol state when parameter updates are sequential
Protocol upgrades requiring specific execution order can be mishandled
No direct fund loss, but potential protocol functionality disruption
Example scenario:
Proposal A: Set new liquidation threshold
Proposal B: Update positions based on new threshold
If B executes before A, positions will be updated with old threshold.
Manual Review
Add a dependency tracking system to the Proposal struct and use the predecessor parameter in TimelockController properly to enforce proposal execution order. This ensures dependent proposals are executed in the correct sequence.
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.