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

The current registry implementation is maintained in Spectra's private MetaVault contracts repository.

## Structs [#structs]

### PoolInfos [#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 [#marketconfig]

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

### MetavaultChainConfig [#metavaultchainconfig]

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

### BridgePath [#bridgepath]

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

## View Methods [#view-methods]

### getPoolInfos [#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 [#getmarketfrompt]

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

Returns the Curve pool address associated with a Principal Token.

### getMarketFromYT [#getmarketfromyt]

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

Returns the Curve pool address associated with a Yield Token.

### getMarketConfig [#getmarketconfig]

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

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

### getBridgePaths [#getbridgepaths]

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

Returns all registered bridge paths for a MetaVault.

### isMarketRegistered [#ismarketregistered]

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

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

### isPTRegistered [#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 [#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 [#marketscount]

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

Returns the number of registered markets for a MetaVault.

### market [#market]

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

Returns the market address at the given index.

### allMarkets [#allmarkets]

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

Returns all registered market addresses for a MetaVault.

### isChainRegistered [#ischainregistered]

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

Returns whether a chain is registered for a MetaVault.

### isBridgePathAllowed [#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 [#getpathscount]

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

Returns the number of registered bridge paths for a MetaVault.

### chainConfig [#chainconfig]

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

Returns the chain configuration for a specific chain ID.

### allChains [#allchains]

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

Returns all registered chain configurations for a MetaVault.

### chainsCount [#chainscount]

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

Returns the number of registered chains for a MetaVault.

## Events [#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 [#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                 |
