SSV - Secret Shared Validator
SSV is a protocol for distributing an eth2 validator key between multiple operators governed by a consensus protocol (Istanbul BFT).
⚠️ Phase 1 testing ⚠️
Please see phase 1 testing doc for details
Getting started
# Build binary
$ CGO_ENABLED=1 go build -o ./bin/ssvnode ./cmd/ssvnode/
# Run local 4 node network (requires docker and a .env file as shown below)
$ make docker-debug
# Lint
$ make lint-prepare
$ make lint
# Full test
$ make full-test
Splitting a key
We split an eth2 BLS validator key into shares via Shamir-Secret-Sharing(SSS) to be used between the SSV nodes.
# Extract Private keys from mnemonic (optional, skip if you have the public/private keys )
$ ./bin/ssvnode export-keys --mnemonic={mnemonic} --index={keyIndex}
# Generate threshold keys
$ ./bin/ssvnode create-threshold --count {# of ssv nodes} --private-key {privateKey}
Example .env file
DISCOVERY_TYPE=mdns
CONSENSUS_TYPE=validation
NETWORK=pyrmont
BEACON_NODE_ADDR=eth2-4000-prysm.stage.bloxinfra.com:80
VALIDATOR_PUBLIC_KEY=
VALIDATOR_PRIVATE_KEY= # NOT USED FOR NOW
SSV_NODE_1=
SSV_NODE_PUB_KEY_1=
SSV_NODE_2=
SSV_NODE_PUB_KEY_2=
SSV_NODE_3=
SSV_NODE_PUB_KEY_3=
SSV_NODE_4=
SSV_NODE_PUB_KEY_4=
Progress
[X] Free standing, reference iBFT Go implementation
[X] SSV specific iBFT implementor
[X] Port POC code to Glang
[ ] Single standing instance running with Prysm's validator client
[\] Networking and discovery
[\] db, persistance and recovery
[ ] Between instance persistence (pevent starting a new instance if previous not decided)
[ ] Multi network support (being part of multiple SSV groups)
[X] Key sharing
[X] Deployment
[\] Documentation
[ ] Phase 1 changes
[ ] Audit
** X=done, \=WIP
Research (Deprecated)
- Secret Shared Validators on Eth2
- iBTF
- Paper
- EIP650
- Liveness issues - should have been addressed in the paper
- Consensys short description
- POC
- Other implementations
- DKG