Assessment reports>Concrete>Design>Component: Controller

Component: Controller

Registries, factories, and managers can be categorized as the controllers. They are capable of deploying and managing specific contracts.

Registry

The ImplementationRegistry contract maintains a whitelist of implementation contract addresses. And the VaultRegistry contract holds a whitelist of vault instance addresses, with a default cap of 1,000 vaults. The VaultRegistry contract also maintains information regarding the vault's underlying asset and its implementation.

Contract addresses can be added to or removed from both registries through the VaultManager contract.

Factory

Based on the implementation information provided by the owner, the VaultFactory contract can deploy new vault instances by cloning the implementation or can deploy new upgradable vault instances using ERC1967Proxy and CREATE2.

The OracleFactory contract itself manages a whitelist of oracle implementation contract addresses. The owner of the OracleFactory contract can deploy new oracle instances by cloning whitelisted implementations.

Manager

The DeploymentManager contract manages the VaultFactory, VaultRegistry, and ImplementationRegistry contracts, handling the deployment and registration of new vaults, along with the addition or removal of their implementation contracts. To deploy a new vault, the DeploymentManager first retrieves and validates the implementation address from the ImplementationRegistry contract, then deploys the vault via the VaultFactory contract and adds the new vault address to the VaultRegistry contract.

The VaultManager contract is the owner of the DeploymentManager contract and manages the administrative functions for multiple vaults. Specifically, after deploying a new vault via the DeploymentManager contract, it will deploy and configure the dedicated withdrawal component for each vault — namely, the WithdrawalQueue contract and the ParkingLot contract. For more details about the withdrawal component, please refer to section ref. Additionally, when upgrading a vault, before calling the function upgradeToAndCall to execute the upgrade, the VaultManager contract first calls the function upgradeVault of the DeploymentManager contract to verify the upgradability of the vault and the validity of the new implementation and to update the vault's associated entries in the VaultRegistry contract.

Zellic © 2025Back to top ↑