StateTransitionManager.unfreezeChain() the code is as follows:
contract StateTransitionManager is IStateTransitionManager, ReentrancyGuard, Ownable2Step {
...
function unfreezeChain(uint256 _chainId) external onlyOwner {
IZkSyncStateTransition(stateTransition[_chainId]).freezeDiamond();
}
This method is used for unfreeze, but it calls freezeDiamond(), which makes it impossible to unfreeze properly.
Impact
StateTransitionManager cannot unfreeze zkSync.
Although admin of zkSync can do unfreeze directly by zkSync.unfreezeDiamond()
However, admin is usually a multi-sign account, and to execute it would require a new wait for more time
during which time zkSync would be fully freeze
Lines of code
https://github.com/code-423n4/2024-03-zksync/blob/4f0ba34f34a864c354c7e8c47643ed8f4a250e13/code/contracts/ethereum/contracts/state-transition/StateTransitionManager.sol#L166
Vulnerability details
Vulnerability details
StateTransitionManager.unfreezeChain()
the code is as follows:This method is used for
unfreeze
, but it callsfreezeDiamond()
, which makes it impossible tounfreeze
properly.Impact
StateTransitionManager cannot unfreeze zkSync.
Although
admin
ofzkSync
can dounfreeze
directly byzkSync.unfreezeDiamond()
However,
admin
is usually a multi-sign account, and to execute it would require a new wait for more time during which timezkSync
would be fullyfreeze
Recommended Mitigation
Assessed type
Context