# Simple Local Testnet These scripts allow for running a small local testnet with multiple beacon nodes and validator clients. This setup can be useful for testing and development. ## Requirements The scripts require `lcli` and `lighthouse` to be installed on `PATH`. From the root of this repository, run: ```bash make make install-lcli ``` ## Starting the testnet Start a local eth1 ganache server ```bash ./ganache_test_node.sh ``` Assuming you are happy with the configuration in `vars.env`, deploy the deposit contract, make deposits, create the testnet directory, genesis state and validator keys with: ```bash ./setup.sh ``` Generate bootnode enr and start a discv5 bootnode so that multiple beacon nodes can find each other ```bash ./bootnode.sh ``` Start a beacon node: ```bash ./beacon_node.sh ``` e.g. ```bash ./beacon_node.sh $HOME/.lighthouse/local-testnet/node_1 9000 8000 ``` In a new terminal, start the validator client which will attach to the first beacon node: ```bash ./validator_client.sh ``` e.g. to attach to the above created beacon node ```bash ./validator_client.sh $HOME/.lighthouse/local-testnet/node_1 http://localhost:8000 ``` You can create additional beacon node and validator client instances with appropriate parameters. ## Additional Info ### Adjusting number and distribution of validators The `VALIDATOR_COUNT` parameter is used to specify the number of insecure validator keystores to generate and make deposits for. The `NODE_COUNT` parameter is used to adjust the division of these generated keys among separate validator client instances. For e.g. for `VALIDATOR_COUNT=80` and `NODE_COUNT=4`, the validator keys are distributed over 4 datadirs with 20 keystores per datadir. The datadirs are located in `$DATADIR/node_{i}` which can be passed to separate validator client instances using the `--datadir` parameter. ### Starting fresh Delete the current testnet and all related files using: ```bash ./clean.sh ``` ### Updating the genesis time of the beacon state If it's been a while since you ran `./setup` then the genesis time of the genesis state will be far in the future, causing lots of skip slots. Update the genesis time to now using: ```bash ./reset_genesis_time.sh ``` > Note: you probably want to drop the beacon node database and the validator > client slashing database if you do this. When using small validator counts > it's probably easy to just use `./clean.sh && ./setup.sh`.