Summary
The updateManaTarget function in RollupCore.sol only allows the mana target to be increased, never decreased, which may be overly restrictive for network management.
Severity
LOW - Design consideration, not a bug
Location
- File:
l1-contracts/src/core/RollupCore.sol
- Function:
updateManaTarget
Description
The function enforces a one-way restriction:
function updateManaTarget(uint256 _manaTarget) external override(IRollupCore) onlyOwner {
uint256 currentManaTarget = FeeLib.getStorage().config.getManaTarget();
require(_manaTarget >= currentManaTarget, Errors.Rollup__InvalidManaTarget(_manaTarget, currentManaTarget));
// ...
}
Current Behavior
- Mana target can only be increased
- Any attempt to decrease it will revert
- Comment states: "We only allow increasing the mana target to avoid governance killing an old rollup"
Potential Issues
- Limited Flexibility: Network conditions may require lowering the mana target
- Economic Adjustments: Market changes might necessitate target reduction
- Emergency Response: Unable to quickly adjust downward in crisis scenarios
- Upgrade Required: Decreasing target requires full contract upgrade
Impact
- Governance lacks flexibility to respond to changing network conditions
- May force unnecessary contract upgrades for parameter adjustments
- Could lead to suboptimal network performance if target becomes too high
Discussion Points
Arguments for current design:
- Prevents malicious governance from "killing" the rollup
- Provides stability and predictability
- Protects against governance attacks
Arguments for allowing decreases:
- Governance should have full control over network parameters
- Other safeguards (timelock, multi-sig) can prevent abuse
- Network conditions may genuinely require lower targets
- Could add a minimum threshold instead of one-way restriction
Recommendation
Consider one of these approaches:
Option 1: Allow both increases and decreases with a minimum threshold:
uint256 constant MIN_MANA_TARGET = 1000; // Define reasonable minimum
require(_manaTarget >= MIN_MANA_TARGET, "Below minimum mana target");
Option 2: Add a separate "emergency decrease" function with stricter controls
Option 3: Keep current design but document the rationale clearly
Request
Please clarify if this one-way restriction is intentional and desired long-term, or if more flexibility should be considered for future versions.
Summary
The
updateManaTargetfunction inRollupCore.solonly allows the mana target to be increased, never decreased, which may be overly restrictive for network management.Severity
LOW - Design consideration, not a bug
Location
l1-contracts/src/core/RollupCore.solupdateManaTargetDescription
The function enforces a one-way restriction:
Current Behavior
Potential Issues
Impact
Discussion Points
Arguments for current design:
Arguments for allowing decreases:
Recommendation
Consider one of these approaches:
Option 1: Allow both increases and decreases with a minimum threshold:
Option 2: Add a separate "emergency decrease" function with stricter controls
Option 3: Keep current design but document the rationale clearly
Request
Please clarify if this one-way restriction is intentional and desired long-term, or if more flexibility should be considered for future versions.