> For the complete documentation index, see [llms.txt](https://dev.spectra.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dev.spectra.finance/metavaults/contract-functions/metavaults-registry.md).

# MetavaultsRegistry

The MetavaultsRegistry is the on-chain registry for managing MetaVaults and their associated markets, chains, and bridge paths. It is access-managed — only authorized callers can modify the registry. On-chain validation contracts read from this registry to validate curator actions.

Code for MetavaultsRegistry.sol can be found on [GitHub](https://github.com/spectra-finance/metavaults-V1/blob/main/src/MetavaultsRegistry.sol).

## Structs

### PoolInfos

```solidity
struct PoolInfos {
    address pool;    // Curve pool address
    address pt;      // Principal Token address
    address yt;      // Yield Token address
    address ibt;     // Interest Bearing Token address
    address asset;   // Underlying asset address
}
```

Cached pool metadata, populated automatically when a market is registered.

### MarketConfig

```solidity
struct MarketConfig {
    bool isRegistered;
}
```

### MetavaultChainConfig

```solidity
struct MetavaultChainConfig {
    uint256 chainId;
    address remoteMetavaultAddress;
}
```

### BridgePath

```solidity
struct BridgePath {
    address tokenIn;
    address tokenOut;
    uint32 dstChainId;
    address bridge;
}
```

## View Methods

### getPoolInfos

```solidity
function getPoolInfos(address market) external view returns (PoolInfos memory)
```

Returns the cached pool info (pool, PT, YT, IBT, asset) for a market.

### getMarketFromPT

```solidity
function getMarketFromPT(address pt) public view returns (address)
```

Returns the Curve pool address associated with a Principal Token.

### getMarketFromYT

```solidity
function getMarketFromYT(address yt) public view returns (address)
```

Returns the Curve pool address associated with a Yield Token.

### getMarketConfig

```solidity
function getMarketConfig(address metavault, address market) external view returns (MarketConfig memory)
```

Returns the market config for a specific metavault-market pair.

### getBridgePaths

```solidity
function getBridgePaths(address metavault) public view returns (BridgePath[] memory)
```

Returns all registered bridge paths for a MetaVault.

### isMarketRegistered

```solidity
function isMarketRegistered(address metavault, address market) public view returns (bool)
```

Returns whether a market (Curve pool) is registered for a MetaVault.

### isPTRegistered

```solidity
function isPTRegistered(address metavault, address pt) public view returns (bool)
```

Returns whether a Principal Token's market is registered for a MetaVault.

### isYTRegistered

```solidity
function isYTRegistered(address metavault, address yt) public view returns (bool)
```

Returns whether a Yield Token's market is registered for a MetaVault.

### marketsCount

```solidity
function marketsCount(address metavault) external view returns (uint256)
```

Returns the number of registered markets for a MetaVault.

### market

```solidity
function market(address metavault, uint256 index) external view returns (address)
```

Returns the market address at the given index.

### allMarkets

```solidity
function allMarkets(address metavault) external view returns (address[] memory)
```

Returns all registered market addresses for a MetaVault.

### isChainRegistered

```solidity
function isChainRegistered(address metavault, uint256 chainId) external view returns (bool)
```

Returns whether a chain is registered for a MetaVault.

### isBridgePathAllowed

```solidity
function isBridgePathAllowed(
    address metavault,
    address tokenIn,
    address tokenOut,
    uint32 dstChainId,
    address bridge
) external view returns (bool)
```

Returns whether a specific bridge path is whitelisted for a MetaVault.

### getPathsCount

```solidity
function getPathsCount(address metavault) external view returns (uint256)
```

Returns the number of registered bridge paths for a MetaVault.

### chainConfig

```solidity
function chainConfig(address metavault, uint256 chainId) external view returns (MetavaultChainConfig memory)
```

Returns the chain configuration for a specific chain ID.

### allChains

```solidity
function allChains(address metavault) external view returns (MetavaultChainConfig[] memory)
```

Returns all registered chain configurations for a MetaVault.

### chainsCount

```solidity
function chainsCount(address metavault) external view returns (uint256)
```

Returns the number of registered chains for a MetaVault.

## Events

| Event                                                                                                                                | Description                           |
| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------- |
| `MetavaultRegistered(address indexed metavault)`                                                                                     | A new MetaVault was registered        |
| `MetavaultUnregistered(address indexed metavault)`                                                                                   | A MetaVault was unregistered          |
| `MarketRegistered(address indexed metavault, address indexed market)`                                                                | A market was added to a MetaVault     |
| `MarketUnregistered(address indexed metavault, address indexed market)`                                                              | A market was removed from a MetaVault |
| `ChainRegistered(address indexed metavault, uint256 indexed chainId, address indexed remoteMetavaultAddress)`                        | A chain was registered                |
| `ChainUnregistered(address indexed metavault, uint256 indexed chainId, address indexed remoteMetavaultAddress)`                      | A chain was unregistered              |
| `BridgePathAllowed(address indexed metavault, address indexed tokenIn, address tokenOut, uint32 indexed dstChainId, address bridge)` | A bridge path was whitelisted         |
| `BridgePathRemoved(address indexed metavault, address indexed tokenIn, address tokenOut, uint32 indexed dstChainId, address bridge)` | A bridge path was removed             |

## Errors

| Error                                                                                                                  | Description                                     |
| ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
| `ZeroAddress()`                                                                                                        | An address parameter is `address(0)`            |
| `MetavaultAlreadyRegistered(address metavault)`                                                                        | MetaVault is already registered                 |
| `MetavaultNotRegistered(address metavault)`                                                                            | MetaVault is not registered                     |
| `MarketAlreadyRegistered(address metavault, address market)`                                                           | Market is already registered for this MetaVault |
| `MarketNotRegistered(address metavault, address market)`                                                               | Market is not registered for this MetaVault     |
| `ChainAlreadyRegistered(address metavault, uint256 chainId, address remoteMetavaultAddress)`                           | Chain is already registered                     |
| `ChainNotRegistered(address metavault, uint256 chainId)`                                                               | Chain is not registered                         |
| `BridgePathAlreadyRegistered(address metavault, address tokenIn, address tokenOut, uint32 dstChainId, address bridge)` | Bridge path is already registered               |
| `BridgePathNotRegistered(address metavault, address tokenIn, address tokenOut, uint32 dstChainId, address bridge)`     | Bridge path is not registered                   |
| `InvalidChainId()`                                                                                                     | Chain ID is 0                                   |
| `IndexOutOfBounds(uint256 index, uint256 length)`                                                                      | Market index out of bounds                      |
| `ChainIndexOutOfBounds(uint256 index, uint256 length)`                                                                 | Chain index out of bounds                       |
| `BridgePathIndexOutOfBounds(uint256 index, uint256 length)`                                                            | Bridge path index out of bounds                 |
