The execute function in the Governance contract is not marked as payable, even though it interacts with the TimeLock contract's executeBatch function, which is designed to handle transactions involving Ether (via the values parameter). This oversight prevents the execution of proposals that involve Ether transfers, breaking a core functionality of the governance system.
Governance Contract:
The execute function is not marked as payable.
It calls _executeProposal, which interact with the TimeLock contract.
TimeLock Contract:
The _executeProposal function accepts a values array, which can include non-zero values for Ether transfers.
This function is called by _queueProposal in the Governance contract.
The execute function in the Governance contract is not marked as payable, even though it interacts with the TimeLock contract's executeBatch function, which is designed to handle Ether transfers. When a proposal involves sending Ether (i.e., values contains non-zero values), the execute function will revert because it cannot accept Ether.
Functionality Breakage:
Proposals that involve Ether transfers cannot be executed, rendering the governance system ineffective for such proposals.
Manual Code Review
###Recommendations
Mark the execute function as payable to allow it to handle Ether transfers. This ensures compatibility with the TimeLock contract's functionality.
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.