> 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                 |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dev.spectra.finance/metavaults/contract-functions/metavaults-registry.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
