Staking with registry

The validator registry contract is deployed to the mev-commit chain at address 0xF263483500e849Bd8d452c9A0F075B606ee64087, with a minimum stake requirement of 3 ETH, and a 7000 block unstaking period. This unstaking period corresponds to 23.3 minutes, assuming a 200ms mev-commit chain block time. This period allows two L1 epochs (L1 finalization period) plus a settlement buffer, to pass between validator unstake initiation and withdrawal.

The registry strictly accepts BLS public keys as the validator opt-in identifier. Any EOA can stake on behalf of a validator pub key, and only that EOA has the ability to withdraw in the future.

To stake with the mev-commit validator registry, first use the testnet faucet to fund an account on the mev-commit chain.

To stake with the contract, see the following function signature, where ether sent with the transaction is split evenly among the specified validator pub keys:

function stake(bytes[] calldata validatorBLSPubKeys) external payable {
    uint256 splitAmount = msg.value / validatorBLSPubKeys.length;
    for (uint256 i = 0; i < validatorBLSPubKeys.length; i++) {
        stakedBalances[validatorBLSPubKeys[i]] += splitAmount;
Due to gas limitations, it is recommended to stake in batches of 10-20 public keys at a time to ensure transaction success without hitting gas limits.

Using Golang

You can programmatically interact with the validator registry using Golang scripts. To stake one or more validator BLS public keys, refer to this example script as outlined in the steps below:


Clone the Repository

Clone the validator-registry repository using the following command:

❯_ terminal
git clone

Prepare Validator Keys

Change directory into the cloned repository and edit the keys_example.txt file to include your validator BLS public keys:

❯_ terminal
cd validator-registry
vi keys_example.txt
*Edit file as needed*

Run the Stake Script

Navigate to the cmd/stake directory and run the staking script with your funded private key:

❯_ terminal
cd cmd/stake
PRIVATE_KEY="0x..." go run main.go

This script will attempt to stake 3.1 ETH on behalf of each validator BLS public key in keys_example.txt.


To withdraw your staked ether, you have two options: through the validator registry interface or programmatically using a Golang script. Please be aware that an unstaking period is mandatory. You must initiate an unstake transaction and wait for the required number of blocks to pass before you can execute a withdraw transaction to transfer the funds to your account.