Skip to main content

Description​

AlchemistCurator is the governance and configuration contract for MYT vaults. Operators register or remove strategy adapters for a given MYT. The admin adjusts their absolute and relative caps and submits vault-level settings such as allocator permissions, the force-deallocate penalty, and the performance fee. In short, it defines which strategies exist within the MYT and how much capital each can hold. The onlyOperator check reads the operators mapping only, so the admin can call operator functions only if it is also enabled as an operator.

Note: AlchemistCurator inherits from PermissionedProxy, which provides it's access control system for operator roles, and the selector allowlist used to control which calls can be forwarded. The admin role is set using the same pending/accept admin system as the Alchemist and is inherited from PermissionedProxy. For details on the operator role and logic, see PermissionedProxy.

Variables​

adapterToMYT
pendingAdmin
  • Description - The first step in a two-step process of setting a new administrator. The pendingAdmin is set by the current admin, then the pendingAdmin must accept the responsibility to lock in the change of admin.
  • Type - address
  • Updated By
  • Read By
    • pendingAdmin()
  • Notified By - none

Functions​

Admin Actions​

Functions guarded by the onlyAdmin modifier, inherited from PermissionedProxy. Calls from any other address revert with "PD". The exception is acceptAdminOwnership(), which is restricted to the current pendingAdmin.

transferAdminOwnerShip(address _newAdmin)
  • Description - Sets the pending admin. First part of a two-step process to change the admin. The second step is the pendingAdmin accepting the role by calling acceptAdminOwnership(). Inherited from PermissionedProxy.
    • @param _newAdmin - The address proposed to become the new admin.
  • Visibility Specifier - external
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "PD" if msg.sender is not the current admin.
  • Emits - none
acceptAdminOwnership()
  • Description - Finalizes an admin ownership transfer by assigning pendingAdmin as the new active admin. Afterwards the pendingAdmin is reset to the zero address. Inherited from PermissionedProxy.
  • Visibility Specifier - external
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "PD" if msg.sender is not the current pendingAdmin.
  • Emits
submitSetAllocator(address myt, address allocator, bool v)
  • Description - Queues a change to a vault's allocator permissions via the vault's timelock mechanism. Encodes IVaultV2.setIsAllocator(allocator, v) and submits it directly to the specified MYT vault.

    Like submitSetForceDeallocatePenalty, submitSetPerformanceFeeRecipient, and submitSetPerformanceFee, this function has no corresponding execution function in the curator. Once the submission is executable on the vault, anyone can call setIsAllocator directly on the MYT vault with matching calldata to finalize the change.
    • @param myt - The MYT vault address to submit the allocator change to.
    • @param allocator - The address to set or unset as a vault allocator.
    • @param v - true to enable as an allocator, false to disable.
  • Visibility Specifier - external
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "PD" if msg.sender is not the current admin.
  • Emits
decreaseAbsoluteCap(address adapter, uint256 amount)
  • Description - Delegates to the internal _decreaseAbsoluteCap(adapter, id, amount) to immediately lowers the absolute cap for a given strategy on its MYT vault. The absolute cap is the maximum quanitity of underlying assets that may be allocated to the strategy.
    • @param adapter - The strategy adapter address.
    • @param amount - The new absolute cap, denominated in underlying asset units. Must not be higher than the current absolute cap.
  • Visibility Specifier - external
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "PD" if msg.sender is not the current admin.
    • With "INVALID_ADDRESS" if the adapter has no registered MYT vault in the adapterToMYT mapping.
    • AbsoluteCapNotDecreasing() - if the new cap is higher than the previous. Propgated from the MorphoV2 vault call.
  • Emits
decreaseRelativeCap(address adapter, uint256 amount)
  • Description - Immediately decreases the relative cap for a given strategy on its MYT vault. The relative cap represents the strategy’s maximum allowed proportion of the vault’s total assets. Gets the ID from the adapter address, and calls the internal _decreaseRelativeCap(adapter, id, amount) to immediately decrease the cap.
    • @param adapter - The strategy adapter address.
    • @param amount - The new percentage, expressed as an 18 decimal scaled number, (1e18 = 100%) to set as the relative cap. Must be lower than the previous relative cap.
  • Visibility Specifier - external
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "PD" if msg.sender is not the current admin.
    • With "INVALID_ADDRESS" if the adapter has no registered MYT vault in the adapterToMYT mapping.
    • RelativeCapNotDecreasing() - if the new cap is higher than the previous. Propgated from the MorphoV2 vault call.
  • Emits
increaseAbsoluteCap(address adapter, uint256 amount)
  • Description - Executes a previously submitted and timelocked absolute cap increase for a given strategy on its MYT vault. Must be called after submitIncreaseAbsoluteCap() has been called and the vault's timelock period has elapsed.
    The absolute cap is the maximum quantity of underlying assets that may be allocated to the strategy.
    • @param adapter - The strategy adapter address.
    • @param amount - The new absolute cap, denominated in underlying asset units. Must not be lower than the current absolute cap.
  • Visibility Specifier - external
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "PD" if msg.sender is not the current admin.
    • With "INVALID_ADDRESS" if the adapter has no registered MYT vault in the adapterToMYT mapping.
    • AbsoluteCapNotIncreasing() - if the new cap is lower than the previous. Propagated from the MorphoV2 vault call.
    • Reverts if the corresponding submitIncreaseAbsoluteCap has not been called, or if the vault's timelock has not yet elapsed.
  • Emits
increaseRelativeCap(address adapter, uint256 amount)
  • Description - Executes a previously submitted and timelocked relative cap increase for a given strategy on its MYT vault. Must be called after submitIncreaseRelativeCap() has been called and the vault’s timelock period has elapsed.

    The relative cap defines the maximum percentage of the vault’s total assets that the strategy can hold. Gets the ID from the adapter address and calls the internal _increaseRelativeCap(adapter, id, amount) to execute the cap change.

    • @param adapter - The strategy adapter address.
    • @param amount - The new percentage, expressed as an 18-decimal scaled number (1e18 = 100%), to set as the relative cap. Must be higher than the previous relative cap.
  • Visibility Specifier - external

  • State Mutability Specifier - nonpayable

  • Reverts

    • With "PD" if msg.sender is not the current admin.
    • With "INVALID_ADDRESS" if the adapter has no registered MYT vault in the adapterToMYT mapping.
    • RelativeCapNotIncreasing() - if the new cap is lower than the previous. Propagated from the MorphoV2 vault call.
    • Reverts if the corresponding submitIncreaseRelativeCap has not been called, or if the vault's timelock has not yet elapsed.
  • Emits

submitIncreaseAbsoluteCap(address adapter, uint256 amount)
  • Description - Queues up an increase of a strategy’s absolute cap on the MYT vault via the vault’s timelock, to be executed at a later date. Calls the internal _submitIncreaseAbsoluteCap(adapter, id, amount) to queue the change.
    • @param adapter - The strategy adapter address.
    • @param amount - The new absolute cap, denominated in underlying asset units. Must not be lower than the current absolute cap.
  • Visibility Specifier - external
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "PD" if msg.sender is not the current admin.
    • With "INVALID_ADDRESS" if the adapter has no registered MYT vault in the adapterToMYT mapping.
    • AbsoluteCapNotIncreasing() - if the new cap is lower than the previous. Propagated from the MorphoV2 vault call.
  • Emits
submitIncreaseRelativeCap(address adapter, uint256 amount)
  • Description - Queues an increase of the strategy’s relative cap on the MYT vault through the vault’s timelock mechanism, to be executed at a later time. After the vault’s timelock period elapses, the corresponding non-submit version of this function must be called to execute the change. Calls the internal _submitIncreaseRelativeCap(adapter, id, amount) to enqueue the update.
    • @param adapter - The strategy adapter address.
    • @param amount - The new percentage to set the relative cap to, expressed as a uint256 scaled by 1e18 (1e18 = 100%). Must be higher than the previous relative cap.
  • Visibility Specifier - external
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "PD" if msg.sender is not the current admin.
    • With "INVALID_ADDRESS" if the adapter has no registered MYT vault in the adapterToMYT mapping.
    • RelativeCapNotIncreasing() - if the new cap is lower than the previous. Propagated from the MorphoV2 vault call.
  • Emits
submitSetForceDeallocatePenalty(address adapter, address myt, uint256 penalty)
  • Description - Queues a change to the force-deallocate penalty for a strategy adapter on the specified MYT vault. Encodes IVaultV2.setForceDeallocatePenalty(adapter, penalty) and submits it directly to the vault. There is no corresponding execution function in the curator; once the submission is executable, anyone can call setForceDeallocatePenalty on the vault with matching calldata to finalize the change. The vault rejects penalties above its MAX_FORCE_DEALLOCATE_PENALTY (2%) at execution.
    • @param adapter - The strategy adapter address the penalty applies to.
    • @param myt - The MYT vault address to submit the change to.
    • @param penalty - The new force-deallocate penalty, expressed as an 18-decimal scaled fraction of the deallocated amount (1e18 = 100%).
  • Visibility Specifier - external
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "PD" if msg.sender is not the current admin.
  • Emits
submitSetPerformanceFeeRecipient(address myt, address recipient)
  • Description - Queues a change to the performance fee recipient on the specified MYT vault. Encodes IVaultV2.setPerformanceFeeRecipient(recipient) and submits it directly to the vault. There is no corresponding execution function in the curator; once the submission is executable, anyone can call setPerformanceFeeRecipient on the vault with matching calldata to finalize the change. The vault rejects the zero address while a non-zero performance fee is set.
    • @param myt - The MYT vault address to submit the change to.
    • @param recipient - The address that receives the vault's performance fee.
  • Visibility Specifier - external
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "PD" if msg.sender is not the current admin.
  • Emits
submitSetPerformanceFee(address myt, uint256 fee)
  • Description - Queues a change to the performance fee on the specified MYT vault. Encodes IVaultV2.setPerformanceFee(fee) and submits it directly to the vault. There is no corresponding execution function in the curator; once the submission is executable, anyone can call setPerformanceFee on the vault with matching calldata to finalize the change. The vault rejects fees above its MAX_PERFORMANCE_FEE (50%) and rejects a non-zero fee while no recipient is set.
    • @param myt - The MYT vault address to submit the change to.
    • @param fee - The new performance fee, expressed as an 18-decimal scaled fraction of accrued interest (1e18 = 100%).
  • Visibility Specifier - external
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "PD" if msg.sender is not the current admin.
  • Emits

Operator Actions​

Functions guarded by the onlyOperator modifier. Calls from any other address revert with "PD". The check reads the operators mapping only, so the admin cannot call these unless it is also enabled as an operator.

setStrategy(address adapter, address myt)
  • Description - First runs address validity checks, then offloads to the internal _addStrategy(adapter, myt) to execute the registration. Must be called after submitSetStrategy() has been called and the vault's timelock period has elapsed.
    • @param adapter - The address of the MYT strategy adapter to register.
    • @param myt - The address of the MYT vault that the adapter belongs to.
  • Visibility Specifier - external
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "INVALID_ADDRESS" if either adapter or myt is the zero address.
    • Reverts if the corresponding submitSetStrategy has not been called, or if the vault's timelock has not yet elapsed.
  • Emits
removeStrategy(address adapter, address myt)
  • Description - First runs address validity checks, then offloads to the internal _removeStrategy(adapter, myt) to execute the deregistration. Must be called after submitRemoveStrategy() has been called and the vault's timelock period has elapsed.
    • @param adapter - The address of the MYT strategy adapter to remove.
    • @param myt - The address of the MYT vault that the adapter is currently linked to.
  • Visibility Specifier - external
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "INVALID_ADDRESS" if either adapter or myt is the zero address.
    • With "INVALID_ADDRESS" if the adapter has no registered MYT vault in the adapterToMYT mapping. Propagated from _removeStrategy.
    • Reverts if the corresponding submitRemoveStrategy has not been called, or if the vault's timelock has not yet elapsed.
  • Emits
submitSetStrategy(address adapter, address myt)
  • Description - Queues the addition of a MYT strategy adapter to a specific MYT vault via the vault’s timelock mechanism to be executed at a later time. Validates that passed adapter and myt are valid addresses, delegates to the internal _submitSetStrategy(adapter, myt), which encodes IVaultV2.addAdapter(adapter) and calls vault.submit(data), which enqueues the strategy to be added after the timelock period.
    • @param adapter - The address of the strategy adapter to be registered.
    • @param myt - The MYT vault address to add the adapter to.
  • Visibility Specifier - external
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "INVALID_ADDRESS" if adapter == address(0) or myt == address(0).
  • Emits
submitRemoveStrategy(address adapter, address myt)
  • Description - Queues the removal of a MYT strategy adapter from a specific MYT vault via the vault's timelock mechanism, to be executed at a later time.

    Validates that adapter and myt are valid addresses, then delegates to the internal _submitRemoveStrategy(adapter, myt), which encodes IVaultV2.removeAdapter(adapter) and calls vault.submit(data).
    • @param adapter - The address of the strategy adapter to be removed.
    • @param myt - The MYT vault address to remove the adapter from.
  • Visibility Specifier - external
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "INVALID_ADDRESS" if adapter == address(0) or myt == address(0).
  • Emits

Internal Operations​

_addStrategy(address adapter, address myt)
  • Description - Internal helper that registers a MYT strategy adapter with the specified MYT vault. Updates the adapterToMYT mapping to associate the adapter with the provided vault, then calls vault.addAdapter(adapter) to register it.
    • @param adapter - The address of the MYT strategy adapter being added.
    • @param myt - The address of the MYT vault that the adapter is being registered to.
  • Visibility Specifier - internal
  • State Mutability Specifier - nonpayable
  • Reverts - none
  • Emits
_removeStrategy(address adapter, address myt)
  • Description - Internal helper that deregisters a MYT strategy adapter from the specified MYT vault. Calls vault.removeAdapter(adapter) to deregister the adapter, then deletes the adapter's entry from the adapterToMYT mapping.
    • @param adapter - The address of the MYT strategy adapter being removed.
    • @param myt - The address of the MYT vault that the adapter is being removed from.
  • Visibility Specifier - internal
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "INVALID_ADDRESS" if the adapter has no registered MYT vault in the adapterToMYT mapping.
  • Emits
_submitSetStrategy(address adapter, address myt)
  • Description - Internal helper that calls the MorphoV2 Vault submit() function, which enqueues the adding of an adapter to the target MYT vault to the vault's timelock queue to be executed at a later time.
    • @param adapter - The address of the strategy adapter to be added.
    • @param myt - The address of the MYT vault to add the strategy to.
  • Visibility Specifier - internal
  • State Mutability Specifier - nonpayable
  • Reverts - none
  • Emits
_submitRemoveStrategy(address adapter, address myt)
  • Description - Internal helper that encodes IVaultV2.removeAdapter(adapter) and submits it to the MYT vault's timelock queue for later execution.
    • @param adapter - The address of the strategy adapter to be removed.
    • @param myt - The address of the MYT vault to remove the strategy from.
  • Visibility Specifier - internal
  • State Mutability Specifier - nonpayable
  • Reverts - none
  • Emits
_decreaseAbsoluteCap(address adapter, bytes id, uint256 amount)
  • Description - Internal helper that immediately calls decreases a strategy’s absolute cap on the vault.
    • @param adapter - The strategy adapter address.
    • @param id - The encoded MYT strategy ID.
    • @param amount - The new absolute cap, denominated in underlying asset units. Must not be higher than the current absolute cap.
  • Visibility Specifier - internal
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "INVALID_ADDRESS" if the adapter has no registered MYT vault in the adapterToMYT mapping.
    • AbsoluteCapNotDecreasing() - if the new cap is higher than the previous. Propgated from the MorphoV2 vault call.
  • Emits
_decreaseRelativeCap(address adapter, bytes id, uint256 amount)
  • Description - Internal helper that calls the vault.decreaseRelativeCap(id, amount) to immediately decrease a strategy’s relative cap. The relative cap is the maximum percentage of total assets the strategy can make up.
    • @param adapter - The strategy adapter address
    • @param id - The encoded MYT strategy ID
    • @param amount - The new percentage of maximum assets that the strategy can make up. Scaled by 1e18. (1e18 = 100%)
  • Visibility Specifier - internal
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "INVALID_ADDRESS" if the adapter has no registered MYT vault in the adapterToMYT mapping.
    • RelativeCapNotDecreasing() - if the new cap is higher than the previous. Propgated from the MorphoV2 vault call.
  • Emits
_increaseAbsoluteCap(address adapter, bytes id, uint256 amount)
  • Description - Internal helper that immediately calls vault.increaseAbsoluteCap(id, amount) to raise a strategy’s absolute cap. The absolute cap is the maximum quantity of underlying assets that may be allocated to the strategy.
    • @param adapter - The strategy adapter address.
    • @param id - The encoded MYT strategy ID.
    • @param amount - The new absolute cap, denominated in underlying asset units. Must not be lower than the current absolute cap.
  • Visibility Specifier - internal
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "INVALID_ADDRESS" if the adapter has no registered MYT vault in the adapterToMYT mapping.
    • AbsoluteCapNotIncreasing() - if the new cap is lower than the previous. Propagated from the MorphoV2 vault call.
  • Emits
_increaseRelativeCap(address adapter, bytes id, uint256 amount)
  • Description - Internal helper that immediately calls vault.increaseRelativeCap(id, amount) to raise a strategy’s relative cap. The relative cap defines the maximum percentage of the vault’s total assets that the strategy can hold.
    • @param adapter - The strategy adapter address.
    • @param id - The encoded MYT strategy ID.
    • @param amount - The new percentage, expressed as an 18-decimal scaled number (1e18 = 100%), to set as the relative cap. Must be higher than the previous relative cap.
  • Visibility Specifier - internal
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "INVALID_ADDRESS" if the adapter has no registered MYT vault in the adapterToMYT mapping.
    • RelativeCapNotIncreasing() - if the new cap is lower than the previous. Propagated from the MorphoV2 vault call.
  • Emits
_submitIncreaseAbsoluteCap(address adapter, bytes id, uint256 amount)
  • Description - Internal helper that enqueues a cap increase on the MYT vault by encoding IVaultV2.increaseAbsoluteCap(id, amount) and delegating to the internal _vaultSubmit(data). After the vault's timelock period elapses, the corresponding non-submit version of this function must be called to execute the change.
    • @param adapter - The strategy adapter address.
    • @param id - The encoded MYT strategy ID.
    • @param amount - The new absolute cap, denominated in underlying asset units. Must not be lower than the current absolute cap.
  • Visibility Specifier - internal
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "INVALID_ADDRESS" if the adapter has no registered MYT vault in the adapterToMYT mapping.
    • AbsoluteCapNotIncreasing() - if the new cap is lower than the previous. Propagated from the MorphoV2 vault call.
  • Emits
_submitIncreaseRelativeCap(address adapter, bytes id, uint256 amount)
  • Description - Internal helper that enqueues a relative cap increase on the MYT vault by encoding IVaultV2.increaseRelativeCap(id, amount) and delegating to the internal _vaultSubmit(adapter, data). After the vault's timelock period elapses, the corresponding non-submit version of this function must be called to execute the change.
    • @param adapter - The strategy adapter address.
    • @param id - The encoded MYT strategy ID.
    • @param amount - The new percentage, expressed as an 18-decimal scaled number (1e18 = 100%), to set as the relative cap.
  • Visibility Specifier - internal
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "INVALID_ADDRESS" if the adapter has no registered MYT vault in the adapterToMYT mapping.
  • Emits
_vaultSubmit(address adapter, bytes data)
  • Description - Internal helper that resolves the MYT vault associated with the provided adapter and calls its submit(bytes) function to queue a governance action via the vault’s timelock.
    • @param adapter - The strategy adapter address, used to look up its corresponding MYT vault.
    • @param data - The ABI-encoded function to be submitted to the vault.
  • Visibility Specifier - internal
  • State Mutability Specifier - nonpayable
  • Reverts
    • With "INVALID_ADDRESS" if the adapter has no registered MYT vault in the adapterToMYT mapping.
  • Emits - none
_vault(address adapter)
  • Description - Internal helper that retrieves the MYT vault contract associated with a given strategy adapter from the adapterToMYT mapping.
    • @param adapter - The strategy adapter address.
  • Visibility Specifier - internal
  • State Mutability Specifier - view
  • Reverts
    • "INVALID_ADDRESS" - if there is no MYT vault registered for the specified adapter in adapterToMYT.
  • Emits - none

Events​

  • IncreaseAbsoluteCap(address indexed strategy, uint256 amount, bytes indexed id) - emitted when the absolute cap for a strategy has been increased. The absolute cap represents the maximum quantity of underlying assets that may be allocated to the strategy.
  • SubmitIncreaseAbsoluteCap(address indexed strategy, uint256 amount, bytes indexed id) - emitted when an increase to the strategy’s absolute cap has been queued via the vault’s timelock, to be executed later.
  • IncreaseRelativeCap(address indexed strategy, uint256 amount, bytes indexed id) - emitted when the relative cap for a strategy has been increased. The relative cap defines the maximum percentage of the vault’s total assets that the strategy can hold, scaled by 1e18 (1e18 = 100%).
  • SubmitIncreaseRelativeCap(address indexed strategy, uint256 amount, bytes indexed id) - emitted when an increase to the strategy’s relative cap has been queued via the vault’s timelock, to be executed later.
  • AdminUpdated(address indexed admin) - emitted when the contract's admin address is updated. Inherited from PermissionedProxy.
  • DecreaseRelativeCap(address indexed strategy, uint256 amount, bytes indexed id) - emitted when the relative cap for a strategy has been decreased. The relative cap defines the maximum percentage of the vault’s total assets that the strategy can hold, scaled by 1e18 (1e18 = 100%).
  • SubmitDecreaseRelativeCap(address indexed strategy, uint256 amount, bytes indexed id) - declared in the interface but never emitted. Relative cap decreases take effect immediately through decreaseRelativeCap, so there is no submit step.
  • SubmitSetStrategy(address indexed strategy, address indexed myt) - emitted when a strategy adapter has been queued for addition to a MYT vault via the vault’s timelock mechanism.
  • DecreaseAbsoluteCap(address indexed strategy, uint256 amount, bytes indexed id) - emitted when the absolute cap for a strategy has been decreased. The absolute cap represents the maximum quantity of underlying assets that may be allocated to the strategy.
  • SubmitDecreaseAbsoluteCap(address indexed strategy, uint256 amount, bytes indexed id) - declared in the interface but never emitted. Absolute cap decreases take effect immediately through decreaseAbsoluteCap, so there is no submit step.
  • StrategyAdded(address indexed strategy, address indexed myt) - emitted when a strategy adapter has been registered to the specified MYT vault.
  • StrategyRemoved(address indexed strategy, address indexed myt) - emitted when a strategy adapter has been deregistered from the specified MYT vault.
  • SubmitRemoveStrategy(address indexed strategy, address indexed myt) - emitted when a strategy adapter removal has been queued via the vault's timelock mechanism.
  • SubmitSetAllocator(address indexed allocator, bool indexed v) - emitted when a vault allocator permission change has been queued via the vault's timelock mechanism.
  • SubmitSetForceDeallocatePenalty(address indexed adapter, address indexed myt, uint256 penalty) - emitted when a force-deallocate penalty change for a strategy adapter has been submitted to the vault.
  • SubmitSetPerformanceFeeRecipient(address indexed myt, address indexed recipient) - emitted when a performance fee recipient change has been submitted to the vault.
  • SubmitSetPerformanceFee(address indexed myt, uint256 fee) - emitted when a performance fee change has been submitted to the vault.