Following this page, you can run a single node local network manually or by using the already prepared automated script. Running a single node setup is useful for developers who want to test their applications and protocol features because of its simplicity and speed. For more complex setups, please refer to the Multi Node Setup page.
The simplest way to start a local Evmos node is by using the provided helper script on the base level of the Evmos repository, which will create a sensible default configuration for testing purposes:
To avoid overwriting any data for a real node used in production, it was decided to store the automatically generated testing configuration at
~/.tmp-evmosd instead of the default
When working with the
local_node.sh script, it is necessary to extend all
evmosd commands, that target the local test node, with the
--home ~/.tmp-evmosd flag. This is mandatory, because the
home directory cannot be stored in the
evmosd configuration, which can be seen in the output below. For ease of use, it might be sensible to export this directory path as an environment variable:
$ export TMP=$HOME/.tmp-evmosd`
$ evmosd config --home $TMP
You can customize the local node script by changing the configuration variables. See the following excerpt from the script for ideas on what can be adjusted:
# Customize the name of your keys, the chain-id, moniker of the node, keyring backend, and more
# Remember to change to other types of keyring like 'file' in-case exposing to outside world,
# otherwise your balance will be wiped quickly
# The keyring test does not require private key to steal tokens from you
# Set dedicated home directory for the evmosd instance
# to trace evm
# Adjust this set a different maximum gas limit
jq '.consensus_params["block"]["max_gas"]="10000000"' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
This guide helps you create a single validator node that runs a network locally for testing and other development related uses.
Initialize the chain
Before actually running the node, we need to initialize the chain, and most importantly its genesis file. This is done
# The argument $MONIKER is the custom username of your node, it should be human-readable.
evmosd init $MONIKER --chain-id=$CHAINID
You can edit this
moniker later by updating the
The command above creates all the configuration files needed for your node and validator to run, as well as a default
genesis file, which defines the initial state of the network. All these
configuration files are in
~/.evmosd by default, but you can overwrite the
location of this folder by passing the
Adding Genesis Accounts
Before starting the chain, you need to populate the state with at least one account using the keyring:
evmosd keys add my_validator
Once you have created a local account, go ahead and grant it some
aevmos tokens in your chain's genesis file. Doing
so will also make sure your chain is aware of this account's existence:
evmosd add-genesis-account my_validator 10000000000aevmos
Now that your account has some tokens, you need to add a validator to your chain.
For this guide, you will add your local node (created via the
init command above) as a validator of your chain.
Validators can be declared before a chain is first started via a special transaction included in the genesis
file called a
# Create a gentx
# NOTE: this command lets you set the number of coins.
# Make sure this account has some coins with the genesis.app_state.staking.params.bond_denom denom
evmosd add-genesis-account my_validator 1000000000stake,10000000000aevmos
gentx does three things:
- Registers the
validatoraccount you created as a validator operator account (i.e. the account that controls the validator).
- Self-delegates the provided
amountof staking tokens.
- Link the operator account with a Tendermint node pubkey that will be used for signing blocks. If no
--pubkeyflag is provided, it defaults to the local node pubkey created via the
evmosd initcommand above.
For more information on
gentx, use the following command:
evmosd gentx --help
By default, the genesis file do not contain any
gentx is a transaction that bonds
staking token present in the genesis file under
accounts to a validator, essentially creating a
validator at genesis. The chain will start as soon as more than 2/3rds of the validators (weighted
by voting power) that are the recipient of a valid
gentx come online after
gentx can be added manually to the genesis file, or via the following command:
# Add the gentx to the genesis file
This command will add all the
gentxs stored in
~/.evmosd/config/gentx to the genesis file.
Run Single Node
Finally, check the correctness of the
Now that everything is set up, you can finally start your node:
To check all the available customizable options when running the node, use the
You should see blocks come in.
The previous command allow you to run a single node. This is enough for the next section on interacting with this node, but you may wish to run multiple nodes at the same time, and see how consensus happens between them.
You can then stop the node using
To run a node with the same key every time: replace
evmosd keys add $KEY in
echo "your mnemonic here" | evmosd keys add $KEY --recover
Evmos currently only supports 24 word mnemonics.
You can generate a new key/mnemonic with:
evmosd keys add $KEY
To export your Evmos key as an Ethereum private key (for use with Metamask for example):
evmosd keys unsafe-export-eth-key $KEY
For more about the available key commands, use the
evmosd keys -h
Keyring backend options
The instructions above include commands to use
test as the
keyring-backend. This is an unsecured
keyring that doesn't require entering a password and should not be used in production. Otherwise,
Evmos supports using a file or OS keyring backend for key storage. To create and use a file
stored key instead of defaulting to the OS keyring, add the flag
--keyring-backend file to any
relevant command and the password prompt will occur through the command line. This can also be saved
as a CLI config option with:
evmosd config keyring-backend file
For more information about the Keyring and its backend options, click here.
To enable tracing when running the node, modify the last line of the
local_node.sh script to be the following command,
$TRACERis the EVM tracer type to collect execution traces from the EVM transaction execution (eg.
$TRACESTOREis the output file which contains KVStore tracing (eg.
evmosd start --evm.tracer $TRACER --tracestore $TRACESTORE --pruning=nothing $TRACE --log_level $LOGLEVEL --minimum-gas-prices=0.0001aevmos --json-rpc.api eth,txpool,personal,net,debug,web3
Clearing data from chain
Alternatively, you can reset the blockchain database, remove the node's address book files, and reset the
priv_validator.json to the genesis state.
If you are running a validator node, always be careful when doing
evmosd unsafe-reset-all. You should never use
this command if you are not switching
IMPORTANT: Make sure that every node has a unique
priv_validator.json. Do not copy the
from an old node to multiple new nodes. Running two nodes with the same
priv_validator.json will cause you to double sign!
First, remove the outdated files and reset the data.
rm $HOME/.evmosd/config/addrbook.json $HOME/.evmosd/config/genesis.json
evmosd tendermint unsafe-reset-all --home $HOME/.evmosd
Your node is now in a pristine state while keeping the original
If you had any sentry nodes or full nodes setup before, your node will still try to connect to them,
but may fail if they haven't also been upgraded.
Data for the evmosd binary should be stored at ~/.evmosd, respectively by default. To delete the existing binaries and configuration, run:
rm -rf ~/.evmosd
To clear all data except key storage (if keyring backend chosen) and then you can rerun the full node installation commands from above to start the node again.
Recording Transactions Per Second (TPS)
In order to get a progressive value of the transactions per second, we use Prometheus to return the values. The Prometheus exporter runs at address http://localhost:8877 so please add this section to your Prometheus installation config.yaml file like this
- job_name: 'evmos'
- targets: ['localhost:8877']
and then run Prometheus like this
and then visit the Prometheus dashboard at http://localhost:9090/ then navigate to the expression area and enter the following expression
which will show the rate of transactions processed.
Evmos currently only supports 24 word mnemonics.