Symbiotic — Operator Opt-In Guide
Deploy all required Symbiotic modules, configure your Vault, register your Operator, and opt-in to a Ditto Network.
Common Addresses
- BurnerRouterFactory:
0x99F2B89fB3C363fBafD8d826E5AA77b28bAB70a0
- wstETH:
0xC329400492c6ff2438472D4651Ad17389fCb843a
- wstETH global burner:
0xdCaC890b14121FD5D925E2589017Be68C2B5B324
- VaultConfigurator:
0x29300b1d3150B4E2b12fE80BE72f365E200441EC
- Network:
0x8560C667Ae72F28D09465B342A480daB28821f6b
- NetworkMiddleware: “
- DefaultStakerRewardsFactory:
0xFEB871581C2ab2e1EEe6f7dDC7e6246cFa087A23
- NetworkOptInService:
0x7133415b33B438843D581013f98A08704316633c
- VaultOptInService:
0xb361894bC06cbBA7Ea8098BF0e32EB1906A5F891
- OperatorRegistry:
0xAd817a6Bc954F678451A71363f04150FDD81Af9F
- BurnerRouterFactory:
0x99F2B89fB3C363fBafD8d826E5AA77b28bAB70a0
- wstETH:
0xC329400492c6ff2438472D4651Ad17389fCb843a
- wstETH global burner:
0xdCaC890b14121FD5D925E2589017Be68C2B5B324
- VaultConfigurator:
0x29300b1d3150B4E2b12fE80BE72f365E200441EC
- Network:
0x8560C667Ae72F28D09465B342A480daB28821f6b
- NetworkMiddleware: “
- DefaultStakerRewardsFactory:
0xFEB871581C2ab2e1EEe6f7dDC7e6246cFa087A23
- NetworkOptInService:
0x7133415b33B438843D581013f98A08704316633c
- VaultOptInService:
0xb361894bC06cbBA7Ea8098BF0e32EB1906A5F891
- OperatorRegistry:
0xAd817a6Bc954F678451A71363f04150FDD81Af9F
- BurnerRouterFactory:
0x32e2AfbdAffB1e675898ABA75868d92eE1E68f3b
- wstETH:
0xB82381A3fBD3FaFA77B3a7bE693342618240067b
- wstETH global burner:
0x58D347334A5E6bDE7279696abE59a11873294FA4
- VaultConfigurator:
0xD2191FE92987171691d552C219b8caEf186eb9cA
- Network:
0x683Ed12e213a6D78C338D4e18440C42bb936085A
- NetworkMiddleware:
0x9403942D5B9EbC1D2cF9Ff0960b688d64588B094
- DefaultStakerRewardsFactory:
0xE6381EDA7444672da17Cd859e442aFFcE7e170F0
- NetworkOptInService:
0x58973d16FFA900D11fC22e5e2B6840d9f7e13401
- VaultOptInService:
0x95CC0a052ae33941877c9619835A233D21D57351
- OperatorRegistry:
0x6F75a4ffF97326A00e52662d82EA4FdE86a2C548
Setup
The following setup steps will reference various Symbiotic core contracts. Refer to their deployments page and core source code.
Prerequisites
For technical users who’re comfortable running Foundry scripts, we’ve provided example code for every step in the setup process.
→ Setup Scripts
Alternatively the Symbiotic CLI can assist in many of these steps. Refer to their docs.
Docs:
Tooling:
git clone
- Git — installforge script, cast
- Foundry — installpython3 symb.py
- Symbiotic CLI — install
Vault Configuration
The Vault configuration process consists of the following substeps:
Deploy Burner Router
The Burner Router defines where slashed collateral is sent (burn address, treasury, etc.).
Every Vault must point to a Burner Router, so we deploy this first.
For the official Symbiotic approach, see: Symbiotic Burner Router Deployment Guide
Deploy Vault Delegator + Slasher
A Vault is the core Symbiotic primitive—an ERC-20 pool that can be restaked across networks and operators.
We use NetworkRestakeDelegator (type 0) for Ditto.
The Veto Slasher lets a resolver veto or approve each slash event.
For the official Symbiotic approach, see: Symbiotic Core Modules Deployment Guide
Deploy Default Staker Rewards
DefaultStakerRewards
harvests rewards earned by the Vault and redistributes
them to depositors, taking an optional admin fee.
For the official Symbiotic approach, see: Symbiotic Staker Rewards Deployment Guide
Register Operator & Opt-In
Your EOA (or node runner contract) must be registered as an Operator inside Symbiotic. Opt-in links that operator to a specific Network and Vault.
For the official Symbiotic approach, see: Symbiotic Operator Registration Guide
Register in Symbiotic and opt-in to vault and network
Register in Ditto network middleware
To Register in Ditto network, you have to contact us and send this info:
If you have access to register by yourself, you can run this scripts:
Deposit Collateral
After the vault, burner router, delegator, and slasher are deployed in the previous step, the vault must obtain deposits of the appropriate ERC20 collateral type. These deposits can come from a variety of sources depending on the vault. For the official Symbiotic approach, refer to the Symbiotic CLI Guide
Before depositing, ensure you have approved the vault to spend your tokens:
Vault Actions
Finally, the vault curator address must make some calls to allocate collateral to the Ditto network and operators.
For Ditto, the subnetwork ID is always 1. The subnetwork bytes32 value is computed by concatenating the network address with the subnetwork ID.
For Mainnet, the subnetwork bytes32 value is:
For Sepolia:
Set Network Limit
First, call setNetworkLimit(bytes32 subnetwork, uint256 amount)
on the delegator module of the vault. This sets the total amount of collateral the vault would like to restake to the Ditto network.
Set Operator Network Shares (for NetworkRestakeDelegator)
NetworkRestakeDelegator (type 0)
You must also call setOperatorNetworkShares(subnetwork, operator, shares)
to allocate stake to specific operators.
OperatorSpecificDelegator (type 2)
This step is not required as 100% of shares are automatically allocated to the single operator.
Here is an example of how the vault curator would complete this step using a Foundry script:
To run this script:
Troubleshooting
If you encounter any issues during the setup process, check our common troubleshooting solutions:
For further assistance, contact Ditto support.