The AdminFacet
contract contains an inconsistency in how it enforces permanent rollup state constraints across different fee-related functions. While setPubdataPricingMode()
and makePermanentRollup()
properly enforce that permanent rollups must use the Rollup
pricing mode, the changeFeeParams()
function lacks this validation. This creates a potential state invariant violation where a permanent rollup chain could have an invalid pricing mode.
While the current implementation of changeFeeParams()
prevents direct changes to the pubdataPricingMode
, it doesn't validate that the existing/incoming mode is correct for permanent rollups. This means that if a chain becomes a permanent rollup through state migration (via forwardedBridgeMint()
), there's no validation ensuring the fee parameters maintain the required Rollup
pricing mode.
This inconsistency could lead to:
State invariant violations where a permanent rollup operates with an invalid pricing mode
Potential security issues if other parts of the system assume permanent rollups always use Rollup
pricing mode
Difficulty in upgrading or maintaining the system due to inconsistent state validation
The issue can be demonstrated through the following sequence of operations:
Relevant code references showing the inconsistency:
setPubdataPricingMode()
enforces the constraint:
changeFeeParams()
lacks the same validation:
Add permanent rollup state validation to the changeFeeParams()
function:
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.