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
PoolInfos
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
struct MarketConfig {
bool isRegistered;
}MetavaultChainConfig
struct MetavaultChainConfig {
uint256 chainId;
address remoteMetavaultAddress;
}BridgePath
struct BridgePath {
address tokenIn;
address tokenOut;
uint32 dstChainId;
address bridge;
}View Methods
getPoolInfos
function getPoolInfos(address market) external view returns (PoolInfos memory)Returns the cached pool info (pool, PT, YT, IBT, asset) for a market.
getMarketFromPT
function getMarketFromPT(address pt) public view returns (address)Returns the Curve pool address associated with a Principal Token.
getMarketFromYT
function getMarketFromYT(address yt) public view returns (address)Returns the Curve pool address associated with a Yield Token.
getMarketConfig
function getMarketConfig(address metavault, address market) external view returns (MarketConfig memory)Returns the market config for a specific metavault-market pair.
getBridgePaths
function getBridgePaths(address metavault) public view returns (BridgePath[] memory)Returns all registered bridge paths for a MetaVault.
isMarketRegistered
function isMarketRegistered(address metavault, address market) public view returns (bool)Returns whether a market (Curve pool) is registered for a MetaVault.
isPTRegistered
function isPTRegistered(address metavault, address pt) public view returns (bool)Returns whether a Principal Token's market is registered for a MetaVault.
isYTRegistered
function isYTRegistered(address metavault, address yt) public view returns (bool)Returns whether a Yield Token's market is registered for a MetaVault.
marketsCount
function marketsCount(address metavault) external view returns (uint256)Returns the number of registered markets for a MetaVault.
market
function market(address metavault, uint256 index) external view returns (address)Returns the market address at the given index.
allMarkets
function allMarkets(address metavault) external view returns (address[] memory)Returns all registered market addresses for a MetaVault.
isChainRegistered
function isChainRegistered(address metavault, uint256 chainId) external view returns (bool)Returns whether a chain is registered for a MetaVault.
isBridgePathAllowed
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
function getPathsCount(address metavault) external view returns (uint256)Returns the number of registered bridge paths for a MetaVault.
chainConfig
function chainConfig(address metavault, uint256 chainId) external view returns (MetavaultChainConfig memory)Returns the chain configuration for a specific chain ID.
allChains
function allChains(address metavault) external view returns (MetavaultChainConfig[] memory)Returns all registered chain configurations for a MetaVault.
chainsCount
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 |