Lido Local DevNet is a powerful tool for deploying and testing the Lido protocol in a local Ethereum network. It provides a streamlined process for launching Ethereum nodes, block explorers, Lido smart contracts, Lido oracles, and essential tooling.
- Run Ethereum + Lido locally – Deploy and test the full Lido protocol on your machine.
- One-command setup – Spin up a complete test environment with a single command.
- Multi-node support – Test the protocol on all available Ethereum node implementations.
- Highly customizable deployment – Fine-tune deployment parameters to fit specific testing needs.
- Modular execution – The project is structured as a set of commands, allowing you to rerun any step independently.
- Multiple parallel environments – Run several test networks on the same machine to validate different scenarios.
- Git branch-aware deployment – Deploy and execute scripts and from different Git branches, simulating real-world deployment workflows.
- Integrated tooling – Built-in support for block explorers, oracles, and auxiliary services to streamline testing.
- Seamless debugging – Restart individual services or redeploy specific components without affecting the entire setup.
- Node.js >=20,<23 (Install Node.js)
- npm (Install npm)
- Docker 27+ (Install Docker)
- Docker Compose V2 (Install Docker Compose)
- Kurtosis 1.11.1+ (Install Kurtosis)
- Foundry tools (Install Foundry)
- Just (Install Just)
- Make 4+ (Install Make - Linux:
sudo apt-get install build-essential) - Kubectl v1.30.+ (for k8s deployments) (Install Kubectl)`
- Helm 3.12+ (for k8s deployments) (Install Helm)`
Original docs are located in https://docs.kurtosis.com/k8s/
yarn && yarn build:allcp .env.sample .env./bin/run.js ssh tunnelContexts can be found by running: kubectl config get-contexts
kubectl config use-context <cluster context> # or whatever your k8s context isThe cluster can be accessible via SSH Tunnel.
kubectl cluster-infoUpdate once your kurtosis config at echo $(kurtosis config path) location
config-version: 6
should-send-metrics: false
kurtosis-clusters:
docker:
type: "docker"
cloud:
type: "kubernetes"
config:
kubernetes-cluster-name: "<cluster name from kubectl>" # change the cluster name if needed
storage-class: "ssd-hostpath"
enclave-size-in-megabytes: 256# tell kurtosis to work with k8s cluster
kurtosis cluster set cloud # or whatever your kurtosis cluster isKurtosis is required to launch Ethereum nodes
kurtosis engine startBelow is an example for launching the fusaka test stand.
If you need a different setup, refer to the test stands documentation.
./bin/run.js stands <stand-name> # (fusaka) or any other test stand nameFor contract verification, use the --verify flag:
./bin/run.js stands <stand-name> --verifyFor a full DSM infrastructure deployment, add the --dsm flag:
./bin/run.js stands <stand-name> --verify --dsmSince voting scripts require Python and Brownie, install the necessary dependencies:
./bin/run.js voting installIf errors occur, install any missing modules as prompted.
Next, add an account. Brownie does not automatically fetch account settings, but a console interface simplifies automation. Run the following command and enter the private key displayed in the logs:
./bin/run.js voting add-accountAfter adding an account, proceed with the voting process. See the voting documentation for more details. Below is an example for transitioning the protocol to the Pectra hard fork. If you need a different setup, refer to the documentation.
Before Pectra:
./bin/run.js voting enact-before-pectraAfter Pectra:
./bin/run.js voting enact-after-pectraThe network, infrastructure, and protocol have been successfully launched.
To stop the DevNet and remove all services, run:
./bin/run.js downTo run multiple devnets on a single cluster, change the DEVNET_NAME=<another_devnet> variable in .env file
All the commands will be executed in the context of the current devnet.
To get the latest information on available services, run:
./bin/run.js chain infoTo get the latest information on available services, run:
./bin/run.js configThis repository provides a high-level interface for managing DevNet. However, if you need to restart a specific service or deployment step, refer to the command documentation.
For a comprehensive understanding of the project architecture, including the command system, services, state management, and how to extend the project, please refer to the Architecture Guide.
If you want to start developing your own commands, read the short guide on the core API. For a deeper understanding of the architecture and design patterns, see the Architecture Guide.