Launch Operator Service
With your Vault created and your execution and consensus clients fully synced, let's look at the software that makes it all work.
The Operator Service ↗ is open-source software developed by StakeWise that runs alongside your node infrastructure and automates the day-to-day operations of your Vault.
The Operator Service connects to your Execution and Consensus nodes to read on-chain state and submit transactions to your Vault contract.
Core Functions
Once started, the Operator Service automatically handles:
- Validator Registration — Monitors Vault balance, prepares deposit data, obtains oracle approval, and submits registration transactions (requires at least 32 ETH in the Vault).
- Validator Funding — Tops up existing
0x02compound validators1 (up to 2048 ETH effective balance) before registering new ones. - Withdrawals — Processes exit queue requests via partial withdrawals from
0x02validators first, then full exits if needed.
Additional Capabilities
The Operator Service also includes commands and flags to automate additional tasks and simplify day-to-day Vault management:
- CLI Commands — Key generation, wallet setup, remote signer configuration, manual exits, performance analytics, and validator consolidations.
- Vault State Update — Use
--harvest-vaultto keep your Vault synced by callingupdateStateevery 12 hours. - Automated Fee Claims — Use
--claim-fee-splitterto claim earned fees and send them to fee recipients.
Deep Dive
For a deeper understanding of how Vaults work under the hood — validator registration, withdrawals, rewards, MEV, and more — see the Concepts → section.
Installation
Vault Version Requirements
This guide requires Vault version 5 (Ethereum) or version 3 (Gnosis). You can find your Vault version in the Details section of your Vault page. If your Vault is below the required version, log in as a Vault Admin and click Upgrade at the top of the Vault page.
The Operator Service can be installed as a binary, via Docker, or built from source.
- Binary
- Docker Image
- Source Files
- Go to the releases page ↗ and find the latest version
- Select the binary file for your node's hardware
- Download and decompress the file
To install the latest release, run:
curl -sSfL https://raw.githubusercontent.com/stakewise/v3-operator/master/scripts/install.sh | sh -s
The binary will be placed in ~/bin. Add it to your PATH:
export PATH=$PATH:~/bin
To install a specific version to a custom location:
curl -sSfL https://raw.githubusercontent.com/stakewise/v3-operator/master/scripts/install.sh | sh -s -- -b <custom_location> vX.X.X
Run commands using this format:
./operator COMMAND --flagA=123 --flagB=xyz
Pull Official Image
docker pull europe-west4-docker.pkg.dev/stakewiselabs/public/v3-operator:v4.1.10
Alternatively, build the Docker image locally:
git clone https://github.com/stakewise/v3-operator.git
cd v3-operator
docker build --pull -t europe-west4-docker.pkg.dev/stakewiselabs/public/v3-operator:v4.1.10 .
Run commands using this format:
docker run --rm -ti \
-u $(id -u):$(id -g) \
-v ~/.stakewise/:/data \
europe-west4-docker.pkg.dev/stakewiselabs/public/v3-operator:v4.1.10 \
src/main.py COMMAND \
--flagA=123 \
--flagB=xyz
Docker Data Directories
You must set --data-dir=/data and map it to a host directory. The --database-dir should also be mapped to a host directory or Docker volume with write permissions enabled. Permissions setup is not required when using Docker volumes.
Requirements:
- Python 3.12+ ↗
- Poetry ↗
- Git ↗
- Cargo ↗ (for sw-milagro-bls-binding dependency)
- libpq-dev ↗ (for psycopg2 dependency)
Run the setup command:
git clone https://github.com/stakewise/v3-operator.git
cd v3-operator
poetry install --only main
Run commands using this format:
PYTHONPATH=. poetry run python src/main.py COMMAND --flagA=123 --flagB=xyz
1. 0x01 and 0x02 refer to withdrawal credential types that determine validator capabilities:
0x01 validators (Type 1) use the current 32 ETH limit with automatic sweeps of excess balance, while
0x02 validators (Type 2) support higher effective balances up to 2048 ETH with compounding rewards and partial withdrawals.
Converting from 0x01 to 0x02 is irreversible.
By default, the 0x02 validators are registered. To register 0x01 validators, add the flag --validator-type=0x01.
↩