The min_quorum > max_quorum
flips interpolation
Description
The quorum is defined as:
quorum = min_quorum + (max_quorum - min_quorum) * participationEMA
However, validation only enforces each value is in [0, 1]
. If min_quorum
is set higher than max_quorum
, the (max - min)
term becomes negative and the curve is inverted. Higher participation lowers quorum and vice versa. Although still bounded in [min, max]
, this contradicts the intended design and can surprise governance.
Impact
Misconfigured parameters may raise quorum when participation is low and drop it when participation is high, weakening governance safeguards.
Additionally, confusing behavior increases the risk of accidental misgovernance.
Recommendations
Add a guard in the param validation.
if minQuorum > maxQuorum {
return fmt.Errorf("min_quorum must be ≤ max_quorum")
}
Remediation
This issue has been acknowledged by AtomOne, and a fix was implemented in PR #163↗.