Skip to content

[DESIGN] updateManaTarget Only Allows Increases, Not Decreases #18144

Description

@evmparser

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

  1. Limited Flexibility: Network conditions may require lowering the mana target
  2. Economic Adjustments: Market changes might necessitate target reduction
  3. Emergency Response: Unable to quickly adjust downward in crisis scenarios
  4. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions