Opt into mev-commit by ERC20 restaking with the MevCommitMiddleware contract through Symbiotic.
Vault Configuration
collateral
. Mev-commit will accept most forms of ERC20 collateral, unless they present significant risk of losing value. For non ETH denominated assets, overcollateralization may be required compared to their ETH denominated counterparts.See Symbiotic’s vault deployment guide and vault configuration docs.Vault
, Delegator
, Slasher
, and BurnerRouter
contracts are deployed via their relevant “factory” contract. Using Symbiotic’s VaultConfigurator
achieves this, and is recommended. Factory and vault configurator addresses can be found from the Symbiotic deployments page.Configure Burner Router
IVaultStorage.burner
address must be set to a BurnerRouter
contract, and this contract must be deployed via Symbiotic’s IBurnerRouterFactory.create()
. Find more details about burner routers here.delay
must elapse before acceptNetworkReceiver
can be called, to properly set the network receiver.IBurnerRouter.networkReceiver()
must be set to 0xD5881f91270550B8850127f05BD6C8C203B3D33f
.IBurnerRouter.operatorNetworkReceiver()
must be disable by setting to address(0)
, or set to 0xD5881f91270550B8850127f05BD6C8C203B3D33f
. Essentially this value must not override a valid network receiver.IBurnerRouter.delay()
must be greater than 2 days
._isValidatorOptedIn
.Configure Delegator Module
NetworkRestakeDelegator
or OperatorSpecificDelegator
type. FullRestakeDelegator
is not supported.OperatorSpecificDelegator
, ensure the IOperatorSpecificDelegator.operator()
field is initialized to the operator address that’ll be used in subsequent steps. The operator field is immutable after delegator deployment!Configure Slasher Module
Slasher
or VetoSlasher
type.Vaults with an instant Slasher
must have an epochDuration
greater than 1 day
to register with our middleware contract.Vaults with veto slashers:epochDuration
greater than 1 day + vetoDuration
, where vetoDuration
is specified by the slasher.address(0)
, since a permissioned oracle account invokes slashing, requiring only the most basic slashing interface.IBaseSlasher.BaseParams
must have isBurnerHook
set to true
.Example
Obtain Deposits
Example
Operator Actions
OperatorRegistry.registerOperator()
.The operator must then opt-in to any vault which will secure validators via VaultOptInService.optIn(vaultAddress)
.The operator then opts-in to the mev-commit network via NetworkOptInService.optIn(networkAddress)
. The network address is 0x9101eda106A443A0fA82375936D0D1680D5a64F5
for mainnet. An operator only needs to opt-in to the mev-commit network once even if an operator represents multiple vaults.Example
Coordinate with our Team
Example
0xa0Fc5e70aad58028020A13ACd2e5B1f2431C912f
0x7c096554FCb894DE83aEf8e5F31CC6B04cD9570d
stETH
, contract address: 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84
18
1000000.0 stETH
slashAmount
appropriate for the collateral type. slashAmount
of collateral is required to define a single validator as being slashable, and therefore opted-in to mev-commit. The vault/operator pair is able to opt-in totalCollateral / slashAmount
number of validators.The network address (represented by Primev) will then set a max network limit for the vault’s delegator module, IBaseDelegator.setMaxNetworkLimit(uint96 identifier, uint256 amount)
. This is the maximum amount of collateral that will be accepted by the network from the vault.The network address will also call:MevCommitMiddleware.registerOperators
to register the operator with the middleware contract.MevCommitMiddleware.registerVaults
to register the vault with the middleware contract, associated to a slashAmount
.Vault Actions
setNetworkLimit(bytes32 subnetwork, uint256 amount)
should be called on the delegator module of the vault. This sets the total amount of collateral the vault would like to restake to the mev-commit network.1
, and the subnetwork
argument can be computed using Symbiotic’s Subnetwork library, by concatenating the network address with the subnetwork ID. For mainnet the subnetwork bytes32 value is 0x9101eda106a443a0fa82375936d0d1680d5a64f5000000000000000000000001
.NetworkRestakeDelegator
, the vault curator must then call INetworkRestakeDelegator.setOperatorNetworkShares(bytes32 subnetwork, address operator, uint256 shares)
. This sets what portion of the mev-commit allocated stake the vault curator is allocating to a particular operator.If using an OperatorSpecificDelegator
, calling setOperatorNetworkShares
is not required, as this type of delegator automatically allocates 100% of the “shares” to a single operator.Example
Setup Complete - Register Validators
slashAmount
), the operator must deregister validators of its choice, or implicitly accept that some quasi-random validators will no longer be “opted-in”.