MetavaultsContract Functions

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

EventDescription
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

ErrorDescription
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

On this page