# VaultConfigurator

### Overview

`VaultConfigurator` is contract that manages the configuration and access control for a vault system. This contract specifies parameters for the main `Vault` contract, enabling secure updates through a two-stage process: staging and committing. Each parameter update is subjected to a specified delay to ensure stability and secure updates.

### Key Features:

* **Two-Stage Parameter Updates**: Parameters are first staged (proposed) and then committed (finalized) after a delay.
* **Access Control**: Admin-exclusive functions, except for the `isDepositsLocked` parameter, which is accessible by both the admin and operator.
* **Delay Specification**: Parameters each have their own delay values before an update can be committed.

### Function Access Control

* **Admin-Only Functions**: All parameter changes except `isDepositsLocked` are restricted to the admin.
* **Operator and Admin**: `isDepositsLocked` can be updated by either the operator or the admin for rapid response.

### Two-Stage Process

Each parameter update involves two steps:

1. **Staging**: The parameter value and a timestamp are set, initiating a delay period.
2. **Committing**: After the delay period, the staged value can be committed as the new active parameter.

### Delay Parameters

Each configurable parameter has a specific delay to ensure stability:

* **Base Delay**: General delay for staging/committing.
* **Callback Delays**: Separate delays for deposit and withdrawal callback changes.
* **Withdrawal Fee Delay**: Delay for modifying the withdrawal fee.
* **Delegate Module Approval Delay**: Delay for approving delegated modules.
* **Maximal Total Supply Delay**: Delay for changing the maximum LP token supply.
* **Oracle and Validator Delays**: Delays for updating oracles and validators.
* **Emergency Withdrawal Delay**: Minimum wait after `registerWithdrawal` before an emergency withdrawal.

### Error Definitions

* **AddressZero**: Raised if a zero address is passed for a required address.
* **InvalidDelay**: Delay value exceeds the permissible limits.
* **InvalidTimestamp**: Timestamp doesn't match the staging process.
* **InvalidWithdrawalFee**: Withdrawal fee is out of the acceptable range.

### Data Structures

1. **Data**
   * **value** (`uint256`): Current parameter value.
   * **stagedValue** (`uint256`): The proposed new value awaiting commitment.
   * **stageTimestamp** (`uint256`): Timestamp indicating when the value was staged.

### Methods

1. **View Functions**
   * `MAX_DELAY()`: Returns the maximum permissible delay (365 days).
   * `MAX_WITHDRAWAL_FEE()`: Maximum withdrawal fee allowed (5%).
   * `vault()`: Address of the vault associated with this configurator.
   * `baseDelay()`: Base delay in seconds for staging operations.
   * `isDelegateModuleApproved(address)`: Checks if a delegate module is approved.
   * `isDepositsLocked()`: Returns if deposits are currently locked.
   * `maximalTotalSupply()`: Returns the maximum total LP token supply.
   * `depositCallback()`: Address of the current deposit callback contract.
   * `withdrawalCallback()`: Address of the current withdrawal callback contract.
   * `withdrawalFeeD9()`: Returns the withdrawal fee with 9 decimal places.
   * `depositCallbackDelay()`: Delay for deposit callback changes.
   * `withdrawalCallbackDelay()`: Delay for withdrawal callback changes.
   * `withdrawalFeeD9Delay()`: Delay for changing the withdrawal fee.
   * `isDepositsLockedDelay()`: Delay for locking deposits.
   * `delegateModuleApprovalDelay()`: Delay for delegate module approvals.
   * `maximalTotalSupplyDelay()`: Delay for modifying the maximum LP token supply.
   * `ratiosOracle()`: Address of the ratios oracle.
   * `priceOracle()`: Address of the price oracle.
   * `validator()`: Address of the validator.
   * `validatorDelay()`: Delay for validator changes.
   * `priceOracleDelay()`: Delay for price oracle changes.
   * `ratiosOracleDelay()`: Delay for ratios oracle changes.
   * `emergencyWithdrawalDelay()`: Minimum delay before an emergency withdrawal is allowed.
2. **Staging and Committing Functions**
   * **Delegate Module Approval:**
     * `stageDelegateModuleApproval(address)`: Stages approval for a module.
     * `commitDelegateModuleApproval(address)`: Commits a staged approval.
     * `rollbackStagedDelegateModuleApproval(address)`: Rolls back staged approval.
     * `revokeDelegateModuleApproval(address)`: Revokes existing approval.
   * **Deposits Lock:**
     * `stageDepositsLock()`: Stages the deposits lock.
     * `commitDepositsLock()`: Commits the staged deposits lock.
     * `rollbackStagedDepositsLock()`: Rolls back staged deposits lock.
     * `revokeDepositsLock()`: Unlocks deposits.
   * **Maximal Total Supply:**
     * `stageMaximalTotalSupply(uint256)`: Stages a new total supply.
     * `commitMaximalTotalSupply()`: Commits the staged supply change.
     * `rollbackStagedMaximalTotalSupply()`: Rolls back staged supply changes.
   * **Callbacks:**
     * `stageDepositCallback(address)`: Stages a new deposit callback.
     * `commitDepositCallback()`: Commits the staged deposit callback.
     * `rollbackStagedDepositCallback()`: Rolls back staged deposit callback.
     * `stageWithdrawalCallback(address)`: Stages a new withdrawal callback.
     * `commitWithdrawalCallback()`: Commits the staged withdrawal callback.
     * `rollbackStagedWithdrawalCallback()`: Rolls back staged withdrawal callback.
   * **Withdrawal Fee:**
     * `stageWithdrawalFeeD9(uint256)`: Stages a new withdrawal fee.
     * `commitWithdrawalFeeD9()`: Commits the staged withdrawal fee.
     * `rollbackStagedWithdrawalFeeD9()`: Rolls back staged withdrawal fee.
   * **Delays:**
     * `stageBaseDelay(uint256)`: Stages a base delay.
     * `commitBaseDelay()`: Commits the staged base delay.
     * `rollbackStagedBaseDelay()`: Rolls back staged base delay.
     * `stageDepositCallbackDelay(uint256)`: Stages a delay for deposit callback.
     * `commitDepositCallbackDelay()`: Commits the staged deposit callback delay.
     * `rollbackStagedDepositCallbackDelay()`: Rolls back deposit callback delay.
     * `stageWithdrawalCallbackDelay(uint256)`: Stages a delay for withdrawal callback.
     * `commitWithdrawalCallbackDelay()`: Commits the staged withdrawal callback delay.
     * `rollbackStagedWithdrawalCallbackDelay()`: Rolls back withdrawal callback delay.
     * `stageWithdrawalFeeD9Delay(uint256)`: Stages a delay for the withdrawal fee.
     * `commitWithdrawalFeeD9Delay()`: Commits the staged withdrawal fee delay.
     * `rollbackStagedWithdrawalFeeD9Delay()`: Rolls back withdrawal fee delay.
     * `stageDepositsLockedDelay(uint256)`: Stages a delay for deposit locking.
     * `commitDepositsLockedDelay()`: Commits the staged deposits locked delay.
     * `rollbackStagedDepositsLockedDelay()`: Rolls back deposits locked delay.
     * `stageDelegateModuleApprovalDelay(uint256)`: Stages a delay for delegate module approval.
     * `commitDelegateModuleApprovalDelay()`: Commits the staged delegate module delay.
     * `rollbackStagedDelegateModuleApprovalDelay()`: Rolls back delegate module delay.
     * `stageMaximalTotalSupplyDelay(uint256)`: Stages a delay for maximal total supply.
     * `commitMaximalTotalSupplyDelay()`: Commits the staged supply delay.
     * `rollbackStagedMaximalTotalSupplyDelay()`: Rolls back supply delay.
     * `stageRatiosOracleDelay(uint256)`: Stages a delay for ratios oracle.
     * `commitRatiosOracleDelay()`: Commits the staged ratios oracle delay.
     * `rollbackStagedRatiosOracleDelay()`: Rolls back ratios oracle delay.
     * `stagePriceOracleDelay(uint256)`: Stages a delay for price oracle.
     * `commitPriceOracleDelay()`: Commits the staged price oracle delay.
     * `rollbackStagedPriceOracleDelay()`: Rolls back price oracle delay.
     * `stageValidatorDelay(uint256)`: Stages a delay for validator.
     * `commitValidatorDelay()`: Commits the staged validator delay.
     * `rollbackStagedValidatorDelay()`: Rolls back validator delay.
     * `stageEmergencyWithdrawalDelay(uint256)`: Stages a delay for emergency withdrawal.
     * `commitEmergencyWithdrawalDelay()`: Commits the staged emergency withdrawal delay.
     * `rollbackStagedEmergencyWithdrawalDelay()`: Rolls back emergency withdrawal delay.

### Events

* **Stage**: Emitted when a value is staged for commitment.
  * **slot** (`bytes32`): Slot identifier of the staged parameter.
  * **data** (`Data`): Data structure holding the values.
  * **value** (`uint256`): Staged value.
  * **timestamp** (`uint256`): Staging timestamp.
* **Commit**: Emitted when a staged value is committed.
  * **slot** (`bytes32`): Slot identifier of the parameter.
  * **data** (`Data`): Data structure holding the committed values.
  * **timestamp** (`uint256`): Commitment timestamp.
* **Rollback**: Emitted when a staged value is rolled back without commitment.
  * **slot** (`bytes32`): Slot identifier of the parameter.
  * **data** (`Data`): Data structure holding the original values.
  * **timestamp** (`uint256`): Rollback timestamp.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mellow.finance/resources/mellow-lrt-depreciated/vaultconfigurator.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
