<!-- canonical: https://0xsimao.com/findings/spectra-metavault-metavaults-register-exist-problematic -->

# `MetavaultsRegistry::registerChain()` allows chain id 0, which doesn't exist, but would be problematic

Low/Info · Sherlock · Yield-tokenisation vaults · 16th December 2025

Finding L-3 of the Spectra MetaVault Bridge security review.

- Protocol: https://www.spectra.finance/
- Report: /reports/spectra-metavault-bridge
- Source: https://github.com/0xsimao/audits/blob/main/Sherlock/private-audits/2025-12-16-spectra-metavault.pdf

---

## Summary

`MetavaultsRegistry::registerChain()` if called with chain id 0, works, but `MetavaultsRegistry:unregisterChain()` would revert with chain not found.

## Vulnerability Detail

`MetavaultsRegistry:unregisterChain()` reverting.
```solidity
    function unregisterChain(
        address metavault,
        uint256 chainId
    ) external restricted onlyRegistered(metavault) {
        MetavaultConfig storage config = _getMvConfigStorage().metavaults[metavault];
        if (config.chainConfigs[chainId].chainId == 0)
            revert ChainNotRegistered(metavault, chainId);
```

## Impact

Chain id == 0, doesn't exist so it would be admin mistake.

## Code Snippet

https://github.com/sherlock-audit/2025-12-spectra-metavault-update-dec-16th/pull/2/files#diff-d6dbd850708b46c46f64d8bc2d13e4fe2de6f7ac75f0981bf638274c7830a293R202

## Tool Used

Manual Review

## Recommendation

Don't allow chain id == 0 in `MetavaultsRegistry::registerChain()`.

Disclosed by 0xSimao (https://0xsimao.com/).
