The contract lacks a function to aggregate veto votes from Layer 2 (L2). The aggregatedL2Balance
in the Proposal
struct is intended to track L2 vetoes but is never updated. Without a mechanism to bridge L2 vetoes to L1, the veto tally is incomplete, leading to incorrect proposal outcomes. Proposals may pass when they should be vetoed if L2 voters oppose them, undermining the governance model.
Implement a function allowing the Taiko bridge or a trusted actor to submit aggregated L2 vetoes, updating aggregatedL2Balance
and adjusting vetoTally
accordingly. Ensure proper access control to prevent unauthorized submissions.
Line 77 – 82
Emergency proposals (with _duration=0
) are intended to bypass the veto phase but are blocked by the minimum duration check. If governanceSettings.minDuration
is greater than zero, creating an emergency proposal reverts, preventing critical actions from being executed promptly.
Exclude emergency proposals (_duration=0
) from the minimum duration check. Modify the condition to if (_duration != 0 && _duration < governanceSettings.minDuration)
to allow zero-duration proposals regardless of minDuration
.
Line 444 – 449
When L2 is available (_includeL2VotingPower
is true), the effectiveVotingPower
function returns the total token supply, including tokens bridged to L2. However, these bridged tokens are locked on L1 and should not be counted in the L1 voting power. This inflates the total voting power used to calculate the minVetoRatio
, making it harder to reach the required veto threshold and potentially allowing proposals to pass without proper L1 consensus.
Adjust the effectiveVotingPower
calculation to exclude bridged tokens even when L2 is enabled, as bridged tokens on L1 are locked and cannot participate in L1 vetoes. L2 vetoes should be aggregated separately via the missing function mentioned in the previous bug report.
Line 243 – 252