ToC
Overview
Thank you for joining the third round of testing for Lido’s integration of SSV Network based DVT on Holesky! All participating members have been split into various clusters that will represent your group to operate DVs (distributed validators) and will represent an entry in the Lido Node Operator registry. Each cluster will coordinate in a corresponding Discord channel thread that will be used to set up a SAFE Multisig (representing an entry in the Lido Node Operator registry), coordinate a DKG ceremony, and run distributed validators on Holesky using SSV DVT.
Prerequisites
- Individual ETH Address on Holesky for the SAFE Multisig and SSV Operator setup (we recommend a hot wallet but it’s up to you, if you’re an existing operator it does not have to be the same address that you use as your normal operator address).
- Add Holesky to your wallet (click here to use ChainList link)
- An updated server to run your node (something affordable and performant as the machine will be online for at least 45 days).
- Understanding of how to Setup SSV Node + Operator Registration (but do not do this until instructed to do so!).
- Holesky ETH (faucet)
- Testnet SSV (faucet)
- Join the relevant Discord thread for your cluster. The name of the thread is also the name of your cluster that should be referenced where needed.
First Steps
First, each group will need to determine who wants to be the cluster coordinator. The cluster coordinator should have prior experience setting up a SAFE Multisig and SSV Operator cluster. Importantly, because this will also be the first large-scale testing of SSV based DKG, the cluster coordinator should be very technically adept. When your team has chosen the cluster coordinator, please tag @kimonsh and @perrier.
A form (linked below) will be used to collect each cluster member’s Holesky addresses that they plan to use to sign messages in the SAFE, setup your SSV Operator, and to receive validator’s rewards to.
Each cluster member must submit the form and verify the address(es) they would like to use. Each cluster member should submit up to two addresses:
- Required: Your individual manager address. This will be your address used for the SAFE Multisig and for setting up your SSV Operator. If you would like to, it can also act as your individual reward address. Each cluster member must submit the address and verification (see “Address Verification” below) in the form.
- Optional: Your reward address. This will be the address added to the reward splitter contract. The splitter contract will evenly distribute rewards between all members of your cluster. This rewards address should be used if you would like to use an address other than the one used for your manager address to collect rewards. If you provide a reward address you will need to sign a message verifying ownership of it in addition to the manager address’s verification.
Each individual participant is responsible for the security and storage of the private key(s) related to these addresses. Please confirm that you have your seed phrase backed up and the address is secure before submitting.
Use this form to submit your address and verification link (see verification instructions below): https://forms.gle/aAKK7nxrqvZ2Zu5a6
Address Verification
Use the following guide to prepare and sign a message that will be used for verification of your chosen manager and (where applicable) reward address:
In case of using externally owned account (EOA):
- Sign the message on mainnet using the text (add your specific details within <>: with the private key you’ll use as the signing key. One of the options is using Etherscan.
- Go to https://etherscan.io/verifiedSignatures
- Press the “Sign Message” button and connect your wallet
- Input the address you’re verifying (your Individual Manager Address or Individual Rewards Address)
- Enter your message using the following template (add your specific details within <>: “<my name> is joining Lido x SSV cluster <cluster name> with address <public address>”
- Press sign message and if the message is successfully signed, publish it.
- Submit the verified signature URL via the form (e.g. https://etherscan.io/verifySig/27336).
- In case of using SAFE Multisig (ONLY FOR INDIVIDUAL REWARD ADDRESSES):
- In https://holesky-safe.protofire.io/welcome home screen of your SAFE Multisig wallet hit the button "New transaction" and select "Contract interaction" in the appeared screen.
- At the New Transaction screen toggle "Custom data" switch.
- Fill any EOA address (for example 0x0000000000000000000000000000000000000000 (if that doesn’t work you should be able to just use the address of your own Safe) into "Enter Address or ENS Name" field.
- Use any hex encoder (like https://www.duplichecker.com/hex-to-text.php) to encode a message that consists of the text: (add your specific details within <>: “<my name> is joining Lido x SSV cluster <cluster name> with address <public address>”
- Paste a code generated at the previous step into "Data (Hex encoded)" field of "New Transaction" screen in the multisig interface (add "0x" in the start of a HEX code if it's missing), put "0" in the ETH value field.
- Submit the address using the form provided by the Lido NOM team.
- To verify that you have successfully completed this step, follow these instructions: https://docs.lido.fi/guides/address-ownership-guide/#in-case-of-using-safe-multisig-1
⚠️ Finish the Instructions Above - Wait for Confirmation from the Lido Team Before Proceeding ⚠️
SAFE Multisig
Once each cluster members has submitted the form and Lido NOM team has verified, the addresses will be shared to the group and the cluster coordinator will create the 5/7 threshold SAFE Multisig using each cluster member’s individual manager address on Holesky (https://holesky-safe.protofire.io/welcome). When the SAFE is created, share the SAFE Holesky URL for your cluster to review and tag @kimonsh and @perrier. This address will be your cluster’s representation in the Lido Node Operator Registry on Holesky.
During this time, the Simple DVT Module Committee will add your cluster to the Lido Node Operator Registry using the SAFE multisig you provided.
⚠️ Finish the Instructions Above - Wait for Confirmation Before Proceeding ⚠️
Operator Onboarding Flow (all members of cluster)
- Run an SSV node by following the installation guide
- Make sure to back up your keys
- Register your operator in the SSV network
- Head over to the webapp
- Select “Holesky” network
- Click “Join as Operator” (for assistance see register operator guide)
- Make sure to set your operator fee to 0 SSV during registration.
- When you have successfully set up your node and registered your SSV Operator, please fill out this form: https://forms.gle/EDLdWj2LES7mLhtq6
Please note that SSV operators can participate in multiple clusters - if you are participating in more than one cluster, you can use the same operator.
- Enable MEV by following the configuration guide
- Flashbot's MEV-Boost does not have official Holesky compatibility (yet), so until further notice, configure your CL client directly with Titan’s relay
- Run a DKG client by following the ssv-dkg setup guide
- The DKG client does not have to run on the same machine as the SSV operator.
- Please note that in order to participate in the DKG ceremony it is crucial to keep the ssv-dkg client online at all times (you may turn it off after the ceremonies have concluded).
- Please verify that DKG port is accessible, by visiting this website. Enter the IP of the machine running ssv-dkg (if different from the one running the browser) and select the port used in the operator.yaml config file (default: 3030)
- Enter your operator metadata by following the metadata setup guide
- Your operator name should be set according to the naming convention “Lido - <Operator name>”
- Supported MEV relays should correlate to the relays you have configured in your Beacon client (Titan is currently not listed there)
- DKG Endpoint (IP and port) of the machine used to run the ssv-dkg client.
- Please ensure to have that port open if you haven’t)
- Any other information you want to be transparent about, e.g. clients, geolocation, logo etc..
- Setup monitoring for your node by following the setup Grafana dashboard guide
- Communicate back your operator id to your cluster within your dedicated Discord group.
If you run into any problems or have any questions reach out to us (@ext-ssv) using the #simple-dvt-testnet-cluster-coordination channel in Discord (either the general channel or group-specific thread)
⚠️ Finish the Instructions Above - Wait for Confirmation from the Lido Team Before Proceeding ⚠️
⚠️ Do not Move Forward Without Confirmation⚠️
Cluster Coordinator Flow (the “Leader”)
After the multi-sig has been created and the Lido team has confirmed your cluster to move forward, the cluster coordinator (the “Leader”) will be responsible for setting up validators through the Lido Node Operator registry.
Each cluster coordinator will create a total of 5 validator keys using the SSV based DKG. After the first 1 week monitoring period is complete, additional keys will be generated.
Prerequisites (Holesky SSV cluster multisig funding)
- head over to SSV's faucet (faucet.ssv.network)
- switch to Holesky network
- connect your cluster Multisig via Walletconnect
- request for testnet SSV tokens
Distribute Validator (SSV Registration)
Here is a summary of the steps necessary to distribute validators on the SSV network:
- Generate Validator keys with
SSV-DKG-Onboard CLI
- Register Validator to SSV network using SAFE transaction builder
- Add Validators to the Lido Node Operator Registry
1. Generate Validators keys
Validator keys generation and registration to SSV is done via the SSV-DKG-Onboard CLI
which generates validator keys using DKG and builds their transaction payload for registration in the SSV contract.
Run the SSV-DKG-Onboard CLI to generate 5 validators using the following command:
- Please note to replace the
[MULTISIG_ADDRESS]
with your Cluster's multisig address - Please note to replace
[OPERATOR_IDS]
to the operator ids of your cluster - DO NOT CHANGE THE withdrawal-address
[OPERATOR_IDS]
has to be a list in ascending order. For example:- 1,2,3,4 ✅
- 4,1,2,3 ❌
docker pull bloxstaking/ssv-dkg-onboard:latest && \
docker run --rm -v $(pwd)/onboard:/data bloxstaking/ssv-dkg-onboard:latest \
--withdrawal-address 0xF0179dEC45a37423EAD4FaD5fCb136197872EAd9 \
--validator-count 5 \
--deposit-amount 10 \
--owner-address [MULTISIG_ADDRESS] \
--operators [OPERATOR_IDS (Note: they must be in ascending order)]
--deposit-amount
parameter relates to the SSV tokens needed to pay network fees. Please leave it untouched.The tool will generate a folder named onboard
(if that does not exist), and inside it, there will be a folder named with the following pattern: <year>-<month>-<day>__<hour>-<minute>-<second>
. Inside it, you should find these files:
📂 <year>-<month>-<day>__<hour>-<minute>-<second>
├── 📄 deposit-data.json # aggregated deposit-data for all the generated validators
├── 📄 registration-transaction-data # transaction data to bulk register the validators
└── 📂 internal # deposit-data and keyshares for each generated validator
You will be using the registration-transaction-data
in the next step, and deposit-data.json
in the last one.
If the DKG ceremony fails:
- Go to ceremony folder, it should look like this:
📂 <year>-<month>-<day>__<hour>-<minute>-<second>
├── 📄 FAILED # File containing final error message
├── 📄 inputs.json # file containing the inputs provided to the DKG tool
└── 📂 internal
├── 📄 console.log # printout of the console log
└── 📄 dkg.log # file containing the debug logs of the DKG tool
- Open the file named
dkg.log
as shown above - Scroll down all the way and copy error in the discord channel
2. Register Validators to SSV
To register validators to the SSV network, you will be using SAFE UI to build a batch of transactions, then sign and execute them all together:
- Spending approval of SSV tokens by the SSV contract
- Validator registration
- Update of cluster Fee recipient
To start, head over to the SAFE UI select New transaction and then click on Transaction Builder
- Prepare a transaction to Approve SSV spending to the SSV network contract.
- In the form, paste this address
0xad45A78180961079BFaeEe349704F411dfF947C6
in the Enter Address field - The form will process the contract ABI and adapt. Enter the following values in the new fields
0x38A4794cCEd47d3baf7370CcC43B560D3a1beEFA
→ spender (address)9999999999999999999999999999999999999999999
→ amount (uint256)- Click Add transaction. The transaction has now been added to the batch (visibile on the right side of the screen)
- Now prepare a transaction to register 5 validators:
- toggle Custom data in the top right of the form
- change the value of Enter Address field to
0x38A4794cCEd47d3baf7370CcC43B560D3a1beEFA
- Select the option Use Implementation ABI in the pop-up
- Fill the rest of the form with the following values (use the image below for reference)
- 0 → ETH value
- copy the content of
registration-transaction-data
file from previous step → Data - Click Add transaction button
- Finally, prepare a transaction to configure fee recipient:
- Disable the Custom data toggle
- In the Contract Method Selector at the bottom, select the method (see image below):
- Enter the address
0xE73a3602b99f1f913e72F8bdcBC235e206794Ac8
in the Recipient address field - Click Add transaction and Create Batch buttons
- Click Send Batch
- Click Sign
- Notify the other operators in your cluster to sign this transaction in the safe interface
- Once you are sure the transactions has been signed and executed, head over to SSV Scan (make sure Holesky network is selected), enter the multisig address to confirm validators have been registered.
Add Validators to the Lido Node Operator Registry
Once the validator keys have been created and registered, deposits have to be made to activate them.
- Head over to Lido testnet UI
- Connect with your SAFE wallet to the Simple DVT Module, using the WalletConnect integration
- Paste the data from the deposit-data.json file
- Stage this transaction in the Safe UI
- Notify the other operators in your cluster to sign this transaction in the Safe interface
Please state when this has been done in Discord and await confirmation from the Lido team.
When enough clusters have properly submitted keys, the Simple DVT Module Committee will create a motion to raise the limit in the Lido registry to 5 validators per cluster. When there is confirmation from each cluster that 7/7 operators online, the key limit will be raised and deposits will flow to the validators.
Monitoring Performance (continuous)
Operators performance could be viewed in corresponding operator pages and also per each validator via the Holesky explorer.