Best practices for Validator Managers
Validator managers play an important role for a Native ByzVault. Users for a vault rely on them to properly handle their deposit and withdrawal requests. Vault's with a good validator manager will quickly handle requests, as well as be as capital efficient as possible. The more capital efficient a vault is, the higher the yield and thus the more users will be attracted to the vault, which in turn leads to the validator manager earning a higher fee. Therefore, we have compiled some information for validator manager best practices. Validator managers should:
When a deposit request occurs, stake the users funds with
stakeWithValidator
to a validator as soon as possible so that it is earning a yield.When a withdrawal request occurs, unstake funds from a validator as soon as possible so that users receive their assets in a timely manner.
Currently validator managers can only initiate a full withdrawal for a validator. Validator managers should take this into consideration, as when they process a withdrawal they ideally want to only withdraw the amount specified. Over withdrawing leads to ETH sitting on the EigenPod where it can be used for future withdrawals, but is not earning a yield. It is recommended then to not have too much ETH on any individual validator.
Ensure that validators do not breach the maxEB (2048 ether), as this will cause all subsequent rewards to be automatically withdrawn, which would not be earning a yield.
Make sure that all validators in their validator set properly perform duties and do not suffer penalties (attestation penalties, correlation penalties, inactivity leaks, sync commit penalties) or slashing. Penalties lead to a lower capital efficiency, while the loss from slashing is incurred by all of the holders of that vault's vaultshares and should be avoided at all costs.
Should call
removeValidator
after a full exit, slashing event or involuntary withdrawal. It is critically important that this is only done after the validator has fully withdrawn from the beacon chain and their balance is 0. Calling this while the validator is in the exit process but still has funds on the beacon chain will cause funds to not be detected by the Byzantine Oracle leading to accounting issues for stakers.
Event Monitoring
Validator managers need to be aware of when users make a deposit request or a withdrawal request, so that they can match their request to a validator in their set. Events are emitted by the Native ByzVault, which validators can monitor for.
Deposits
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);
Withdrawals
When withdrawals are made, the vault accounts for idleTokens. This is ETH on the Native ByzVault (and the EigenPod for EigenLayer vaults) that is unaccounted for (i.e. is on the contract, but is not part of a pending withdrawal). It is therefor able to be used for withdrawals. When a user makes a withdrawal request, if the amount of idleTokens is greater than the the request amount then the following event is emitted:
event WithdrawalRequestedForIdleTokens(uint64 amountGwei);
If the withdrawal request is more than the idleTokens, then the amount covered by idleTokens is emitted in the previous event, and the remaining amount emitted in:
event ValidatorWithdrawalRequested(uint64 amountGwei);
Last updated