SSV Network (DVT) Integration
SSV Network (Secret Shared Validator)—protocol for Distributed Validator Technology (DVT) for Ethereum. Splits validator private key into multiple encrypted shares distributed among independent operators. One operator offline or compromised—validator continues.
How SSV Works
Key Splitting (DKG): BLS validator private key splits into N shares with M-of-N threshold (e.g., 3-of-4). Each share encrypted with corresponding operator's public key. No operator sees full key.
Distributed signing: when signing attestation needed, each operator generates partial signature with their share. M signatures aggregate into one BLS signature—indistinguishable from regular.
SSV token: operators receive SSV token rewards. Stakers pay operators for services.
Smart Contracts Integration
Validator Registration
interface ISSVNetwork {
struct Cluster {
uint32 validatorCount;
uint64 networkFeeIndex;
uint64 index;
bool active;
uint256 balance;
}
function registerValidator(
bytes calldata publicKey,
uint64[] memory operatorIds,
bytes[] calldata sharesData,
uint256 amount, // SSV token amount for operator payment
Cluster memory cluster
) external;
function removeValidator(
bytes calldata publicKey,
uint64[] memory operatorIds,
Cluster memory cluster
) external;
}
Operator Selection
interface ISSVViews {
function getOperatorById(uint64 operatorId)
external view returns (
address owner,
uint256 fee, // SSV fee per epoch
uint32 validatorCount,
bool whitelisted,
bool isPrivate,
bool active
);
}
Operator selection—important decision. Factors:
- Reliability (uptime history)
- Fee (SSV per epoch)
- Geographic diversity (different regions = fault tolerance)
- Client diversity (different consensus clients)
SSV Deposit Calculation
// Calculate required SSV deposit
function calculateRequiredSSV(
uint64[] memory operatorIds,
uint32 numValidators,
uint64 blocksToFund
) external view returns (uint256 ssvAmount);
Must periodically top up SSV balance of cluster—otherwise operators stop working.
SDK Integration
SSV provides JavaScript SDK for key splitting and shares generation:
import { SSVKeys, KeyShares } from 'ssv-keys';
const ssvKeys = new SSVKeys();
// Load validator keystore
const { privateKey } = await ssvKeys.getPrivateKeyFromKeystoreData(keystore, password);
// Split into shares for selected operators
const keySharesPayload = await ssvKeys.buildShares(
privateKey,
operators // array of {id, operatorKey} for each operator
);
// keySharesPayload contains encrypted shares ready for on-chain registration
SSV Network integration—2-4 weeks. Main complexity: DKG ceremony, proper SSV balance management, operator selection.







