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.


  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.


  • 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.