Run a Full Node

Run a Full Node

A Dora Vota full node consists of a local copy of the entire blockchain, including its block history and states. Running a full node is essential for participating in network operations like validating transactions, joining consensus, and broadcasting events to other network participants.

In this guide, we will walk you through the process of setting up and running a Dora Vota full node.

Node configurations

Hardware requirements

Below is the recommended hardware configuration for running a Dora Vota full node.

vota-ash8 cores32GB1TB NVME
vota-testnet4 cores16GB500GB NVME
vota-sf16 cores32GB500GB NVME

Recommended validator configuration

Commonly used ports

dorad uses the following TCP ports. Toggle their settings to match your environment.

  • 26656: The default port for P2P. This port is used to communicate with other nodes and must be open to join a network. However, it does not have to be open to the public. For validator nodes, configuring persistent_peers and closing this port to the public are recommended.

Additional ports:

  • 1317: The default port for interacting with the dorad API server for HTTP RESTful requests. This allows applications and services to interact with the dorad instance through RPC.
  • 26660: The default port for interacting with the Prometheus database, which can be used to monitor the environment. In the default configuration, this port is not open.
  • 26657: The default port for RPC. Because this port is used for querying and sending transactions, it must be open to serve queries from dorad.

These ports are all customizable in ~/.dora/config/config.toml and ~/.dora/config/app.toml.

Configure chain settings

The following information describes the most important node configuration settings found in the ~/.dora/config/ directory. This is the structure of ~/.dora/config:

    • app.toml
    • client.toml
    • config.toml
    • genesis.json
    • node_key.json
    • priv_validator_key.json
    • app.toml: Configuration of dorad
    • client.toml: Configurations for the cli wallet (ex dorad)
    • config.toml: Tendermint configuration file
    • genesis.json: Gensesis transactions
    • node_key.json: Private key used for node authentication in the p2p protocol (its corresponding public key is the nodeid)
    • priv_validator_key.json: Key used by the validator on the node to sign blocks

    Start a node

    To instate a Dora Vota node, the first step is to download and install dorad on your machine. Make sure you check out and install the same version as the chain you want to join.

    A moniker is the custom username of your node. It should be human-readable. It’s set at the time of node setup and can be used to provide a more descriptive and friendly name to identify the node, as opposed to using an IP address or a public key hash which can be hard to remember or recognize.

    Init commands

    export VERSION=0.3.1
    export CHAIN_ID="vota-ash"
    export MONIKER="replace-with-your-moniker-name"
    git clone
    cd doravota && git checkout $VERSION
    make install
    dorad init --chain-id "$CHAIN_ID" "$MONIKER"

    Repalce genesis file

    Configure to sync chain data

    Now that we have set up some peers, you can add them into config.toml to sync Dora Vota chain data.

    # Comma separated list of seed nodes to connect to
    seeds = "s0db68229c58e9b5a488b2dfaf0f593d161bb94d4@,660773dfb97e197e4b300c4cbdb2dff203f78d47@"
    # Comma separated list of nodes to keep persistent connections to
    persistent_peers = "s0db68229c58e9b5a488b2dfaf0f593d161bb94d4@,660773dfb97e197e4b300c4cbdb2dff203f78d47@"

    The configuration above is mainly used for P2P node discovery. Before starting the node, you can synchronize it to a specified block height using the snapshot service. Then, you can synchronize to the latest block using the P2P nodes configured above, which reduces the synchronization time.

    Running dorad node service

    Register dorad as a systemd service

    dorad should be running at all times. It’s recommended you register dorad as a systemd service so that it will automatically restart if your system reboots.

    Create the definition file

    Create the definition file in /etc/systemd/system/dorad.service.

    ExecStart=<PATH_TO_DORAD>/dorad start
    • <USER>: Enter the user (likely your username or root, unless you created a user specifically for dorad).
    • <PATH_TO_DORAD>: Enter the path to the dorad executable, which is likely /home/<YOUR_USER>/go/bin/dorad or /usr/go/bin. Confirm this by checking the location of dorad.

    Run the program upon startup

    After registering dorad as a system service, you can set the program to run upon startup.

    systemctl daemon-reload
    systemctl enable dorad

    Start the service and check the log

    sudo systemctl start dorad
    sudo journalctl -u dorad -f --no-hostname -o cat

    Use dorad docker image to start node

    As an alternative, you can also use Docker (opens in a new tab) (make sure to install it).

    For Linux users, it’s recommended to run the Docker daemon in Rootless Mode (opens in a new tab).

    Pull Docker image

    You can pull the Docker image from the following repositories image: dorafactory/doravota (opens in a new tab)

    For example, to connect to the Dora Vota Mainnet, use the following command:

    docker pull dorafactory/doravota

    Set up path

    By default, the Docker image runs the dorad binary, so you should specify the arguments for dorad after the image name. For better usage, mount an external volume at /root/.dora to persist the daemon home path across different runs. For example, if you want to add a key:

    docker run --rm -it -v ~/.dora:/root/.dora dorafactory/doravota keys add test-key

    And then list all keys:

    docker run --rm -it -v ~/.dora:/root/.dora dorafactory/doravota keys list

    It’s also important to note that, when running a node in a network, you’ll need to expose the container ports for external connectivity. The image exposes the following ports:

    • 1317: Rest server
    • 26656: Tendermint P2P
    • 26657: Tendermint RPC

    To simplify using the Docker container, you can set an alias with the home path and the proper image tag, like:

    alias dorad="docker run --rm -it -v ~/.dora:/root/.dora dorafactory/doravota"

    After setting the alias with the above tip, you can use other dorad commands without typing the verbose Docker run command. For the sake of comprehensive documentation, the full Docker command is shown. Just remember that by setting the alias you can simply use dorad instead of the Docker command.