Single Node
This guide will help you set up a single node network on LagomChain. Running a single node is ideal for developers testing applications, smart contracts, and blockchain functionality due to its speed and simplicity.
For multi-node deployments, refer to the Multi-Node Setup Guide.
Prerequisite Readings
Automated Script
The simplest way to start a local LagomChain node is by using the provided helper script on the base level of the LagomChain repository, which will create a sensible default configuration for testing purposes:
tip
To avoid overwriting any data for a real node used in production, it was decided to store the automatically generated testing configuration at ~/.tmp-lagomd
instead of the default ~/.lagomd
.
When working with the local_node.sh
script, it is necessary to extend all lagomd
commands, that target the local test node, with the --home ~/.tmp-lagomd
flag. This is mandatory, because the home
directory cannot be stored in the lagomd
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:
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:
Manual Deployment
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 with the init
subcommand:
tip
You can edit this moniker
later by updating the config.toml
file.
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 ~/.lagomd
by default, but you can overwrite the location of this folder by passing the --home
flag.
Genesis Procedure
Adding Genesis Accounts
Before starting the chain, you need to populate the state with at least one account using the keyring:
Once you have created a local account, go ahead and grant it some alagom
tokens in your chain's genesis file. Doing so will also make sure your chain is aware of this account's existence:
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 gentx
:
A gentx
does three things:
Registers the
validator
account you created as a validator operator account (i.e. the account that controls the validator).Self-delegates the provided
amount
of staking tokens.Link the operator account with a Tendermint node pubkey that will be used for signing blocks. If no
--pubkey
flag is provided, it defaults to the local node pubkey created via thelagomd init
command above.
For more information on gentx
, use the following command:
Collecting gentx
gentx
By default, the genesis file do not contain any gentxs
. A 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 genesis_time
.
A gentx
can be added manually to the genesis file, or via the following command:
This command will add all the gentxs
stored in ~/.lagomd/config/gentx
to the genesis file.
Run Single Node
Finally, check the correctness of the genesis.json
file:
Now that everything is set up, you can finally start your node:
tip
To check all the available customizable options when running the node, use the --help
flag.
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 Ctrl+C
.
Further Configuration
Key Management
To use the same key every time, replace:
With:
LagomChain only supports 24-word mnemonics.
Export a Private Key for MetaMask
For more key management options:
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, LagomChain 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:
tip
For more information about the Keyring and its backend options, click here.
Enable Tracing
To enable tracing when running the node, modify the last line of the local_node.sh
script to be the following command, where:
$TRACER
is the EVM tracer type to collect execution traces from the EVM transaction execution (eg.json|struct|access_list|markdown
)$TRACESTORE
is the output file which contains KVStore tracing (eg.store.txt
)
Clearing data from chain
Reset Data
Alternatively, you can reset the blockchain database, remove the node's address book files, and reset the priv_validator.json
to the genesis state.
danger
If you are running a validator node, always be careful when doing lagomd unsafe-reset-all
. You should never use this command if you are not switching chain-id
.
danger
IMPORTANT: Make sure that every node has a unique priv_validator.json
. Do not copy the priv_validator.json
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.
Your node is now in a pristine state while keeping the original priv_validator.json
and config.toml
. 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.
Delete Data
Data for the lagomd
binary should be stored at ~/.lagomd, respectively by default. To delete the existing binaries and configuration, run:
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
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.
Last updated