Get Started
The SSV network enables the distribution of validator operations between non-trusting operators.
In order to distribute your validator, you must have an activated (deposited) validator on the Beacon Chain.
How to Run a Distributed Validator
This guide outlines the steps required to run a distributed validator via the ssv.network on the Holesky testnet, using the protocol’s smart contracts and developer tools.
Prerequisites
An Ethereum validator - to generate validator keys and activate them using Ethereum’s official Staking Deposit CLI and Launchpad, please follow this guide. You can also run a Distributed Key Generation ceremony using SSV DKG Client
Holesky ETH (<0.1) to cover transaction gas costs on the Holesky testnet (Community members on our discord could assist in obtaining the required amount).
Testnet SSV (faucet)
Process Overview
Validators are managed within Clusters - the group of operators that were selected to operate them.
Running a distributed validator is outlined by the following steps:
Select the cluster of operators to manage your validator.
Split your validator key to shares.
Retrieve your cluster’s latest snapshot data.
Register your validator to the network.
1. Operator Selection
Select your preferred group of operators from the operator registry of the SSV network.
The number of cluster operators you select must be 3f+1 compatible, whereas f is the number of faulty operators that your cluster could endure (more operators, greater fault tolerance) - e.g. 4, 7, 10, 13…
For each chosen operator, you must fetch its network assigned id and its corresponding key.
2. Split Validator Key to Shares
To assign the validator operation to the cluster of your selected operators, you must split your validator key to shares.
Use the SSV Keys tools to extract your validator key from your keystore file and split it to shares.
This can also be with multiple keys to register validators in bulk.
3. Retrieve Cluster Snapshot Data
Cluster snapshots are required for SSV smart contract transactions with cluster related functions which require the cluster object as input.
Cluster snapshots are updated after each transaction with a cluster related function, and will emit a new cluster object (the latest snapshot) which will be required for making the succeeding transaction.
Use the SSV Scanner tool to retrieve the latest snapshot data for your validator’s cluster.
If this is the first validator within a cluster, you can skip this step and use {0,0,0,true,0} for the cluster object.
4. Network Registration
To signal your cluster to start operating your validator, you must register your validator to the network by broadcasting the registerValidator() transaction to the ssv.network contract:
You can perform this in bulk for multiple validators using bulkRegisterValidator.
Parameter | Type | Description |
---|---|---|
publicKey | bytes | The validator’s public key. |
operatorIds | uint64[] | List of all operator’s ids which were selected during the “Operators Selection” step (ascending order). |
sharesData | bytes[] | Keyshares which were produced during the “Key Splitting” step. |
amount | uint256 (cast to uint64) | Amount of SSV tokens to be deposited as payment (not mandatory). See validator funding to calculate how much funding is needed to run each validator. Amount must be shrinkable (divisible by 10000000) |
cluster | tuple[] | Object containing the latest cluster snapshot data, produced during the “Retrieve Cluster Snapshot” step - obtained using the SSV Subgraph, or the SSV Scanner tool. If this is the 1st validator within a specific cluster (unique set of operators), use - {0,0,0,true,0} |
You can construct the transaction by yourself or through using the partial payload generated by the SSV Keys tool used in the “Key Splitting” step.
Please note that as SSV is deposited to the contract, you must initially approve the SSV contract address to spend your SSV tokens prior to the registration transaction.
Last updated