Skip to main content

SubVaultsRegistry

Git Source ↗

Inherits: Initializable ↗, UUPSUpgradeable ↗, ReentrancyGuardUpgradeable ↗, Multicall, ISubVaultsRegistry

Defines the functionality for managing the Vault sub-vaults. This contract is deployed per MetaVault.

State Variables​

_maxSubVaults​

uint256 private constant _maxSubVaults = 50

_maxPercent​

uint256 private constant _maxPercent = 1e18

_curatorsRegistry​

address private immutable _curatorsRegistry

_vaultsRegistry​

address private immutable _vaultsRegistry

_keeper​

address private immutable _keeper

_osTokenVaultController​

IOsTokenVaultController private immutable _osTokenVaultController

_osTokenConfig​

IOsTokenConfig private immutable _osTokenConfig

metaVault​

The address of the meta vault

address public override metaVault

subVaultsCurator​

The address of the sub-vaults curator

address public override subVaultsCurator

pendingMetaSubVault​

Pending meta sub-vault waiting for approval

address public override pendingMetaSubVault

subVaultsRewardsNonce​

Function to get the rewards nonce of the sub-vaults

uint128 public override subVaultsRewardsNonce

ejectingSubVault​

The address of the sub-vault being ejected

address public override ejectingSubVault

ejectingSubVaultShares​

The number of shares of the ejecting sub-vault

uint256 public override ejectingSubVaultShares

_subVaults​

EnumerableSet.AddressSet private _subVaults

_subVaultsExits​

mapping(address vault => DoubleEndedQueue.Bytes32Deque) private _subVaultsExits

_subVaultsStates​

mapping(address vault => SubVaultState state) private _subVaultsStates

subVaultsTotalAssets​

The total assets deposited to sub-vaults

uint128 public override subVaultsTotalAssets

_totalProcessedExitQueueTickets​

uint256 private _totalProcessedExitQueueTickets

_unaccountedExitedAssets​

uint256 private _unaccountedExitedAssets

__gap​

This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps

uint256[50] private __gap

Functions​

onlyMetaVaultAdmin​

Modifier to check if the caller is the meta vault admin

modifier onlyMetaVaultAdmin() ;

constructor​

Constructor

constructor(
address curatorsRegistry,
address vaultsRegistry,
address keeper,
address osTokenVaultController,
address osTokenConfig
) ;

Parameters

NameTypeDescription
curatorsRegistryaddressThe address of the CuratorsRegistry contract
vaultsRegistryaddressThe address of the VaultsRegistry contract
keeperaddressThe address of the Keeper contract
osTokenVaultControlleraddressThe address of the OsTokenVaultController contract
osTokenConfigaddressThe address of the OsTokenConfig contract

_authorizeUpgrade​

Function that should revert when msg.sender is not authorized to upgrade the contract. Called by upgradeToAndCall. Normally, this function will use an access control modifier such as Ownable-onlyOwner.

function _authorizeUpgrade(address) internal onlyOwner {}
function _authorizeUpgrade(address) internal view override;

initialize​

Initializes the SubVaultsRegistry

function initialize(address _metaVault, address curator) external override initializer;

Parameters

NameTypeDescription
_metaVaultaddress
curatoraddressThe address of initial sub-vaults curator

getSubVaults​

Returns the list of sub-vaults

function getSubVaults() public view override returns (address[] memory);

Returns

NameTypeDescription
<none>address[]The array of sub-vault addresses

isSubVault​

Checks if the given address is a sub-vault

function isSubVault(address vault) public view override returns (bool);

Parameters

NameTypeDescription
vaultaddressThe address to check

Returns

NameTypeDescription
<none>boolTrue if the address is a sub-vault, false otherwise

setSubVaultsCurator​

Function to update the sub-vaults curator. Can only be called by the meta vault admin.

function setSubVaultsCurator(address curator) external override onlyMetaVaultAdmin;

Parameters

NameTypeDescription
curatoraddressThe address of the new sub-vaults curator

addSubVault​

Function to add a new sub-vault. Can only be called by the meta vault admin.

function addSubVault(address vault) external override onlyMetaVaultAdmin;

Parameters

NameTypeDescription
vaultaddressThe address of the sub-vault to add

acceptMetaSubVault​

Function to accept a meta sub-vault. Can only be called by the VaultsRegistry owner.

function acceptMetaSubVault(address metaSubVault) external override;

Parameters

NameTypeDescription
metaSubVaultaddressThe address of the meta sub-vault to accept

rejectMetaSubVault​

Function to reject a meta sub-vault. Can only be called by the VaultsRegistry owner or meta vault admin.

function rejectMetaSubVault(address metaSubVault) external override;

Parameters

NameTypeDescription
metaSubVaultaddressThe address of the meta sub-vault to reject

ejectSubVault​

Function to eject a sub-vault. Can only be called by the meta vault admin. All the sub-vault shares will be added to the exit queue.

function ejectSubVault(address vault) external override onlyMetaVaultAdmin;

Parameters

NameTypeDescription
vaultaddressThe address of the sub-vault to eject

subVaultsStates​

Returns the state of a sub-vault

function subVaultsStates(address vault) external view override returns (SubVaultState memory);

Parameters

NameTypeDescription
vaultaddressThe address of the sub-vault

Returns

NameTypeDescription
<none>SubVaultStateThe state of the sub-vault

subVaultsExits​

Returns the exits queue for a sub-vault

function subVaultsExits(address vault) external view override returns (bytes32[] memory);

Parameters

NameTypeDescription
vaultaddressThe address of the sub-vault

Returns

NameTypeDescription
<none>bytes32[]The array of packed exit data (positionTicket: uint160, shares: uint96)

canUpdateState​

Checks whether the state can be updated

function canUpdateState() external view override returns (bool);

Returns

NameTypeDescription
<none>boolTrue if the state can be updated, false otherwise

isCollateralized​

Checks whether the meta vault is collateralized

function isCollateralized() public view override returns (bool);

Returns

NameTypeDescription
<none>boolTrue if the meta vault is collateralized, false otherwise

isStateUpdateRequired​

Checks whether the state update is required

function isStateUpdateRequired() public view override returns (bool);

Returns

NameTypeDescription
<none>boolTrue if the state update is required, false otherwise

depositToSubVaults​

Deposit available assets to the sub vaults

function depositToSubVaults() external override nonReentrant;

claimSubVaultsExitedAssets​

Claims exited assets from sub vaults

function claimSubVaultsExitedAssets(SubVaultExitRequest[] calldata exitRequests) external override nonReentrant;

Parameters

NameTypeDescription
exitRequestsSubVaultExitRequest[]The array of exit requests to claim

harvestSubVaultsAssets​

Harvests sub-vaults assets. Can only be called by the meta vault.

function harvestSubVaultsAssets() external override returns (int256 totalAssetsDelta, bool harvested);

Returns

NameTypeDescription
totalAssetsDeltaint256The change in total assets after the harvest
harvestedboolWhether the sub-vaults were harvested

enterSubVaultsExitQueue​

Enters the exit queue for sub-vaults. Can only be called by the meta vault.

function enterSubVaultsExitQueue() external override nonReentrant;

calculateSubVaultsRedemptions​

Calculates the required sub-vaults exit requests to fulfill the assets to redeem

function calculateSubVaultsRedemptions(uint256 assetsToRedeem)
external
view
override
returns (ISubVaultsCurator.ExitRequest[] memory redeemRequests);

Parameters

NameTypeDescription
assetsToRedeemuint256The amount of assets to redeem

Returns

NameTypeDescription
redeemRequestsISubVaultsCurator.ExitRequest[]The array of sub-vaults exit requests

redeemSubVaultsAssets​

Redeems assets from sub-vaults to the meta vault. Can only be called by the redeemer.

function redeemSubVaultsAssets(uint256 assetsToRedeem)
external
override
nonReentrant
returns (uint256 totalRedeemedAssets);

Parameters

NameTypeDescription
assetsToRedeemuint256The amount of assets to redeem to the meta vault

Returns

NameTypeDescription
totalRedeemedAssetsuint256The total amount of assets redeemed from sub-vaults

_calculateSubVaultsRedemptions​

Internal function to calculate the required sub-vaults exit requests to fulfill the assets to redeem

function _calculateSubVaultsRedemptions(uint256 assetsToRedeem, bool useEjectingSubVaultShares)
private
view
returns (ISubVaultsCurator.ExitRequest[] memory redeemRequests);

Parameters

NameTypeDescription
assetsToRedeemuint256The amount of assets to redeem
useEjectingSubVaultSharesboolWhether to use ejecting sub-vault shares

Returns

NameTypeDescription
redeemRequestsISubVaultsCurator.ExitRequest[]The array of sub-vaults exit requests

_getSubVaultsBalances​

Returns the balances of the given sub-vaults

function _getSubVaultsBalances(address[] memory vaults, bool calcNewTotalAssets)
private
view
returns (uint256[] memory balances, uint256 newTotalAssets, uint256 totalStakedAssets);

Parameters

NameTypeDescription
vaultsaddress[]The addresses of the sub-vaults
calcNewTotalAssetsboolWhether to calculate the new total assets across all sub-vaults

Returns

NameTypeDescription
balancesuint256[]The balances of the sub-vaults
newTotalAssetsuint256The new total assets across all sub-vaults
totalStakedAssetsuint256The sum of the staked balances across all sub-vaults

_checkHarvested​

Internal function to check whether the sub-vaults are harvested

function _checkHarvested() private view;

_checkSubVaultsExitClaims​

Internal function to check whether the sub vaults have claimed processed exit queue tickets

function _checkSubVaultsExitClaims(address[] memory vaults) private view;

Parameters

NameTypeDescription
vaultsaddress[]The addresses of the sub vaults

_syncRewardsNonce​

Internal function to check whether the vaults are harvested

function _syncRewardsNonce(address[] memory vaults) private returns (bool);

Parameters

NameTypeDescription
vaultsaddress[]The addresses of the vaults

Returns

NameTypeDescription
<none>boolWhether the nonce has been updated

_consumeEjectingSubVaultAssets​

Internal function to consume ejecting sub-vault assets

function _consumeEjectingSubVaultAssets(uint256 unprocessedAssets) private returns (uint256 processedAssets);

Parameters

NameTypeDescription
unprocessedAssetsuint256The amount of unprocessed assets

Returns

NameTypeDescription
processedAssetsuint256The amount of processed assets

_setSubVaultsCurator​

Internal function to set the sub-vaults curator

function _setSubVaultsCurator(address curator) private;

Parameters

NameTypeDescription
curatoraddressThe address of the sub-vaults curator

_validateSubVault​

Internal function to validate the addition of a sub-vault

function _validateSubVault(address vault) private view;

Parameters

NameTypeDescription
vaultaddressThe address of the sub-vault to be added

_addSubVault​

Internal function to add a sub-vault

function _addSubVault(address vault) private;

Parameters

NameTypeDescription
vaultaddressThe address of the sub-vault to add

_isMetaVault​

Internal function to check whether the vault is a meta vault

function _isMetaVault(address vault) private view returns (bool);

Parameters

NameTypeDescription
vaultaddressThe address of the vault

Returns

NameTypeDescription
<none>boolTrue if the vault is a meta vault, false otherwise

_isSubVaultCollateralized​

Internal function to check whether the sub-vault is collateralized

function _isSubVaultCollateralized(address subVault) private view returns (bool);

Parameters

NameTypeDescription
subVaultaddressThe address of the sub-vault

Returns

NameTypeDescription
<none>boolTrue if the sub-vault is collateralized, false otherwise

_getSubVaultRewardsNonce​

Internal function to get the rewards nonce of a sub-vault

function _getSubVaultRewardsNonce(address subVault) private view returns (uint256);

Parameters

NameTypeDescription
subVaultaddressThe address of the sub-vault

Returns

NameTypeDescription
<none>uint256The rewards nonce of the sub-vault

_getCurrentRewardsNonce​

Internal function to get the current rewards nonce from the Keeper contract

function _getCurrentRewardsNonce() private view returns (uint256);

Returns

NameTypeDescription
<none>uint256The current rewards nonce

_processRedeemRequests​

Processes the given redeem requests

function _processRedeemRequests(address redeemer, ISubVaultsCurator.ExitRequest[] memory redeemRequests)
private
returns (uint256 totalRedeemedAssets);

Parameters

NameTypeDescription
redeemeraddressThe address of the redeemer
redeemRequestsISubVaultsCurator.ExitRequest[]The redeem requests to process

Returns

NameTypeDescription
totalRedeemedAssetsuint256The total amount of redeemed assets