Common Addresses
wstETH: 0xB82381A3fBD3FaFA77B3a7bE693342618240067b
Network: 0x683Ed12e213a6D78C338D4e18440C42bb936085A
NetworkMiddleware: 0x9403942D5B9EbC1D2cF9Ff0960b688d64588B094
NetworkOptInService: 0x58973d16FFA900D11fC22e5e2B6840d9f7e13401
VaultOptInService: 0x95CC0a052ae33941877c9619835A233D21D57351
OperatorRegistry: 0x6F75a4ffF97326A00e52662d82EA4FdE86a2C548
wstETH: 0xB82381A3fBD3FaFA77B3a7bE693342618240067b
Network: 0x683Ed12e213a6D78C338D4e18440C42bb936085A
NetworkMiddleware: 0x9403942D5B9EbC1D2cF9Ff0960b688d64588B094
NetworkOptInService: 0x58973d16FFA900D11fC22e5e2B6840d9f7e13401
VaultOptInService: 0x95CC0a052ae33941877c9619835A233D21D57351
OperatorRegistry: 0x6F75a4ffF97326A00e52662d82EA4FdE86a2C548
wstETH: 0xC329400492c6ff2438472D4651Ad17389fCb843a
Network: 0x8560C667Ae72F28D09465B342A480daB28821f6b
NetworkMiddleware: “
NetworkOptInService: 0x7133415b33B438843D581013f98A08704316633c
VaultOptInService: 0xb361894bC06cbBA7Ea8098BF0e32EB1906A5F891
OperatorRegistry: 0xAd817a6Bc954F678451A71363f04150FDD81Af9F
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 — install
forge script, cast
- Foundry — install
python3 symb.py
- Symbiotic CLI — install
Vault
Before Opt-In, you have to find suitable or deploy your own Vault
Symbiotic Vault Deployment Deploy your own Vault in symbiotic
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
We suggest using one of two approaches. First is from official Symbiotic docs:
Install symbiotic CLI
git clone https://github.com/symbioticfi/cli.git
cd cli
pip3 install -r requirements.txt
Register operator in Symbiotic
python symb.py --chain sepolia register-operator --private-key YOUR_OPERATOR_PRIVATE_KEY
python symb.py --chain sepolia register-operator --private-key YOUR_OPERATOR_PRIVATE_KEY
python symb.py --chain mainnet register-operator --private-key YOUR_OPERATOR_PRIVATE_KEY
Opt in to Ditto network
python symb.py --chain sepolia opt-in-network 0x683Ed12e213a6D78C338D4e18440C42bb936085A --private-key YOUR_OPERATOR_PRIVATE_KEY
python symb.py --chain sepolia opt-in-network 0x683Ed12e213a6D78C338D4e18440C42bb936085A --private-key YOUR_OPERATOR_PRIVATE_KEY
python symb.py --chain mainnet opt-in-network 0x8560C667Ae72F28D09465B342A480daB28821f6b --private-key YOUR_OPERATOR_PRIVATE_KEY
Opt in to the vault
python symb.py --chain sepolia opt-in-vault VAULT_ADDRESS --private-key YOUR_OPERATOR_PRIVATE_KEY
python symb.py --chain sepolia opt-in-vault VAULT_ADDRESS --private-key YOUR_OPERATOR_PRIVATE_KEY
python symb.py --chain mainnet opt-in-vault VAULT_ADDRESS --private-key YOUR_OPERATOR_PRIVATE_KEY
Or you can use our Foundry scripts to opt in to Ditto network:
# Clone ditto-contracts repository
git clone https://github.com/dittonetwork/ditto-contracts
cd ditto-contracts
# Define parameters
NETWORK_OPT_IN_SERVICE = 0x58973d16FFA900D11fC22e5e2B6840d9f7e13401
NETWORK = 0x683Ed12e213a6D78C338D4e18440C42bb936085A
VAULT_OPT_IN_SERVICE = 0x95CC0a052ae33941877c9619835A233D21D57351
VAULT =< vault address from previous step s >
OPERATOR_REGISTRY = 0x6F75a4ffF97326A00e52662d82EA4FdE86a2C548
# Execute the script
forge script script/operator/04_OperatorOptInSetup.s.sol:SetupOperatorOptIn \
--sig "run(address,address,address,address,address)" \
$NETWORK_OPT_IN_SERVICE $NETWORK $VAULT_OPT_IN_SERVICE $VAULT $OPERATOR_REGISTRY \
--rpc-url https://ethereum-sepolia-rpc.publicnode.com \
--chain sepolia \
--private-key < your-private-ke y > \
--etherscan-api-key < etherscan api ke y > \
--broadcast
# Define parameters
NETWORK_OPT_IN_SERVICE = 0x58973d16FFA900D11fC22e5e2B6840d9f7e13401
NETWORK = 0x683Ed12e213a6D78C338D4e18440C42bb936085A
VAULT_OPT_IN_SERVICE = 0x95CC0a052ae33941877c9619835A233D21D57351
VAULT =< vault address from previous step s >
OPERATOR_REGISTRY = 0x6F75a4ffF97326A00e52662d82EA4FdE86a2C548
# Execute the script
forge script script/operator/04_OperatorOptInSetup.s.sol:SetupOperatorOptIn \
--sig "run(address,address,address,address,address)" \
$NETWORK_OPT_IN_SERVICE $NETWORK $VAULT_OPT_IN_SERVICE $VAULT $OPERATOR_REGISTRY \
--rpc-url https://ethereum-sepolia-rpc.publicnode.com \
--chain sepolia \
--private-key < your-private-ke y > \
--etherscan-api-key < etherscan api ke y > \
--broadcast
# Define parameters
NETWORK_OPT_IN_SERVICE = 0x7133415b33B438843D581013f98A08704316633c
NETWORK = 0x8560C667Ae72F28D09465B342A480daB28821f6b
VAULT_OPT_IN_SERVICE = 0xb361894bC06cbBA7Ea8098BF0e32EB1906A5F891
VAULT =< vault address from previous step s >
OPERATOR_REGISTRY = 0xAd817a6Bc954F678451A71363f04150FDD81Af9F
# Execute the script
forge script script/operator/04_OperatorOptInSetup.s.sol:SetupOperatorOptIn \
--sig "run(address,address,address,address,address)" \
$NETWORK_OPT_IN_SERVICE $NETWORK $VAULT_OPT_IN_SERVICE $VAULT $OPERATOR_REGISTRY \
--rpc-url https://ethereum-rpc.publicnode.com \
--chain mainnet \
--private-key < your-private-ke y > \
--etherscan-api-key < etherscan api ke y > \
--broadcast
Register in Ditto network middleware
To Register in Ditto network, you have to contact us and send this info:
Vault Address: <vault>
Operator Address: <operator>
Operator Public Key: <key>
If you have access to register by yourself, you can run this scripts:
# --- env vars ---
MIDDLEWARE = 0x9403942D5B9EbC1D2cF9Ff0960b688d64588B094 # Contact Ditto for this address
OPERATOR =< operator address > # Your operator address
KEY =< key > # Your operator's public key
VAULT =< vault address > # Optional: ONLY FOR OperatorSpecificDelegator and OperatorNetworkSpecificDelegator - Your vault address from previous steps
# ----------------
forge script script/middleware/OperatorMiddlewareScript.s.sol:OperatorMiddlewareScript \
--sig "registerOperator(address,address,address,bytes)" \
$MIDDLEWARE $OPERATOR $KEY $VAULT \
--rpc-url https://ethereum-sepolia-rpc.publicnode.com \
--chain sepolia \
--private-key < your-private-ke y > \
--etherscan-api-key < etherscan api ke y > \
--broadcast
# --- env vars ---
MIDDLEWARE = 0x9403942D5B9EbC1D2cF9Ff0960b688d64588B094 # Contact Ditto for this address
OPERATOR =< operator address > # Your operator address
KEY =< key > # Your operator's public key
VAULT =< vault address > # Optional: ONLY FOR OperatorSpecificDelegator and OperatorNetworkSpecificDelegator - Your vault address from previous steps
# ----------------
forge script script/middleware/OperatorMiddlewareScript.s.sol:OperatorMiddlewareScript \
--sig "registerOperator(address,address,address,bytes)" \
$MIDDLEWARE $OPERATOR $KEY $VAULT \
--rpc-url https://ethereum-sepolia-rpc.publicnode.com \
--chain sepolia \
--private-key < your-private-ke y > \
--etherscan-api-key < etherscan api ke y > \
--broadcast
# --- env vars ---
MIDDLEWARE =< middleware address > # Contact Ditto for this address
OPERATOR =< operator address > # Your operator address
KEY =< key > # Your operator's public key
VAULT =< vault address > # Optional: ONLY FOR OperatorSpecificDelegator and OperatorNetworkSpecificDelegator - Your vault address from previous steps
# ----------------
forge script script/middleware/OperatorMiddlewareScript.s.sol:OperatorMiddlewareScript \
--sig "registerOperator(address,address,address,bytes)" \
$MIDDLEWARE $OPERATOR $KEY $VAULT \
--rpc-url https://ethereum-rpc.publicnode.com \
--chain mainnet \
--private-key < your-private-ke y > \
--etherscan-api-key < etherscan api ke y > \
--broadcast
Troubleshooting
If you encounter any issues during the setup process, check our common troubleshooting solutions:
For further assistance, contact Ditto support.