Skip to content

Keysplit Command

The keysplit command is used to split validator keys for distributed validation on the SSV network.

anchor keysplit <SUBCOMMAND> [OPTIONS]

Where <SUBCOMMAND> is one of:

  • manual - Split keys with manually provided operator data
  • onchain - Split keys using operator data from the blockchain

Both subcommands share these Options

SSV Keysplitting Tool

Usage: anchor keysplit [OPTIONS] <COMMAND>

Commands:
    onchain  Utilize onchain data to split the key
    manual   Split the key by manually providing data
    help     Print this message or the help of the given subcommand(s)

Options:
    -d, --data-dir <DIR>
               Used to specify a custom root data directory for the Anchor key
               and database. Defaults to $HOME/.anchor/{network} where network
               is the value of the `network` flag Note: Users should specify
               separate custom datadirs for different networks.

         --network <NETWORK>
               Name of the chain Anchor will validate.
               
               [default: mainnet]
               [possible values: mainnet, holesky, hoodi]

    -t, --testnet-dir <DIR>
               Path to directory containing eth2_testnet specs.

         --debug-level <DEBUG_LEVEL>
               Specifies the verbosity level used when emitting logs to the
               terminal
               
               [default: INFO]

    -h, --help
               Print help

onchain:

Utilize onchain data to split the key

Usage: anchor keysplit onchain [OPTIONS] --owner <ADDRESS> --output-path <OUTPUT_PATH> --operators <IDS> --rpc <ENDPOINT>

Options:
    -d, --data-dir <DIR>
               Used to specify a custom root data directory for the Anchor key
               and database. Defaults to $HOME/.anchor/{network} where network
               is the value of the `network` flag Note: Users should specify
               separate custom datadirs for different networks.

         --keystore-paths <PATH>...
               Path(s) to the validator keystore file

         --network <NETWORK>
               Name of the chain Anchor will validate.
               
               [default: mainnet]
               [possible values: mainnet, holesky, hoodi]

    -t, --testnet-dir <DIR>
               Path to directory containing eth2_testnet specs.

         --password-file <PATH>
               Path to a file containing the password for the validator
               keystore. If omitted, the password will be prompted for.

         --owner <ADDRESS>
               EOA address that owns the validator

         --debug-level <DEBUG_LEVEL>
               Specifies the verbosity level used when emitting logs to the
               terminal
               
               [default: INFO]

         --output-path <OUTPUT_PATH>
               Path for output

         --operators <IDS>
               Operators to split key among

         --rpc <ENDPOINT>
               RPC endpoint to access L1 data

    -h, --help
               Print help

manual:

Split the key by manually providing data

Usage: anchor keysplit manual [OPTIONS] --owner <ADDRESS> --output-path <OUTPUT_PATH> --operators <IDS> --nonce <NONCE> --public-keys <KEYS>...

Options:
    -d, --data-dir <DIR>
               Used to specify a custom root data directory for the Anchor key
               and database. Defaults to $HOME/.anchor/{network} where network
               is the value of the `network` flag Note: Users should specify
               separate custom datadirs for different networks.

         --keystore-paths <PATH>...
               Path(s) to the validator keystore file

         --network <NETWORK>
               Name of the chain Anchor will validate.
               
               [default: mainnet]
               [possible values: mainnet, holesky, hoodi]

    -t, --testnet-dir <DIR>
               Path to directory containing eth2_testnet specs.

         --password-file <PATH>
               Path to a file containing the password for the validator
               keystore. If omitted, the password will be prompted for.

         --owner <ADDRESS>
               EOA address that owns the validator

         --debug-level <DEBUG_LEVEL>
               Specifies the verbosity level used when emitting logs to the
               terminal
               
               [default: INFO]

         --output-path <OUTPUT_PATH>
               Path for output

         --operators <IDS>
               Operators to split key among

         --nonce <NONCE>
               Nonce for the owner address

         --public-keys <KEYS>...
               RSA public keys for the operators

    -h, --help
               Print help

help:

Print this message or the help of the given subcommand(s)

Usage: anchor keysplit help [COMMAND]

Commands:
    onchain  Utilize onchain data to split the key
    manual   Split the key by manually providing data
    help     Print this message or the help of the given subcommand(s)

Examples

Manual key splitting

anchor keysplit manual \
  --keystore-path /path/to/validator_keystore.json \
  --password-file /path/to/password.txt \
  --owner 0x123abc... \
  --operators 1,2,3,4 \
  --output-path /path/to/output.json \
  --nonce 0 \
  --public-keys key1 key2 key3 key4 \
  --network hoodi

Onchain key splitting

anchor keysplit onchain \
  --keystore-path /path/to/validator_keystore.json \
  --password-file /path/to/password.txt \
  --owner 0x123abc... \
  --operators 1,2,3,4 \
  --output-path /path/to/output.json \
  --rpc https://eth-mainnet.provider.com \
  --network mainnet

These commands will generate a json file to be uploaded to the SSV network webapp when registering a validator.