Skip to main content

Installation

General intro​

This guide helps you set up a Initia node - a machine that syncs the entire blockchain, allowing you to interact with the network or become a validator in the future.

Install Required Packages​

These tools are essential for downloading, compiling, and running your node. They’re standard packages used in almost every node setup.

sudo apt update && sudo apt upgrade -y
sudo apt install curl git wget htop tmux build-essential jq make lz4 gcc unzip -y

Install Go​

Go (or Golang) is the programming language Initia is built with. We need it to build the node binary initiad from source code.

cd $HOME
sudo rm -rf /usr/local/go
wget https://go.dev/dl/go1.23.6.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.23.6.linux-amd64.tar.gz
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile
source ~/.bash_profile
[ ! -d ~/go/bin ] && mkdir -p ~/go/bin
go version
which go
rm -rf go1.23.6.linux-amd64.tar.gz

Download and build binary​

Option 1: Build from source

cd $HOME
rm -rf core
git clone https://github.com/initia-labs/initia
cd initia
git checkout v1.1.4
make install
initiad version
which initiad

Option 2: Download Prebuilt Binary

wget -O initiad https://snapshots.onnode.org/mainnet/initia/interwoven-1/initiad
chmod +x initiad
mv initiad $HOME/go/bin
initiad version
which initiad

Initialize the node​

Set node configuration

initiad config chain-id interwoven-1

Initialize the node

initiad init you-node-name --chain-id interwoven-1

Download Genesis & Addrbook Files

genesis.json defines the starting state of the chain. addrbook.json helps your node discover peers.

curl -Ls https://snapshots.onnode.org/mainnet/initia/interwoven-1/genesis.json > $HOME/.initia/config/genesis.json
curl -Ls https://snapshots.onnode.org/mainnet/initia//interwoven-1/addrbook.json > $HOME/.initia/config/addrbook.json

Add seed

Seed nodes help your node find and connect to the network. It’s like a bootstrap contact list.

sed -i -e "s|^seeds *=.*|seeds = \"[email protected]:29656\"|" $HOME/.initia/config/config.toml

Set minimum gas price

This tells your node to accept transactions with at least 0.005uatom gas price. Required for block creation.

sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \"0.015uluna\"|" $HOME/.initia/config/app.toml

Pruning & Indexer Settings

Pruning saves disk space by deleting older data. Disabling indexer also reduces storage load.

sed -i \
-e 's|^pruning *=.*|pruning = "custom"|' \
-e 's|^pruning-keep-recent *=.*|pruning-keep-recent = "100"|' \
-e 's|^pruning-keep-every *=.*|pruning-keep-every = "0"|' \
-e 's|^pruning-interval *=.*|pruning-interval = "10"|' \
$HOME/.initia/config/app.toml

sed -i 's/indexer = "kv"/indexer = "null"/g' $HOME/.initia/config/config.toml

Download Snapshot​

Instead of syncing the chain from scratch (which can take days), a snapshot lets your node start from a recent blockchain state and catch up quickly.

wget -O initia_latest.tar.lz4 https://snapshots.onnode.org/mainnet/initia/initia_latest.tar.lz4 && lz4 -c -d initia_latest.tar.lz4 | tar -x -C $HOME/.initia

Create service​

This lets your node run in the background like a service and auto-restart if it crashes.

sudo tee /etc/systemd/system/initiad.service > /dev/null << EOF
[Unit]
Description=initia node service
After=network-online.target
[Service]
User=$USER
ExecStart=$(which initiad) start
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF

Start the service and check the logs. This shows real-time logs to help you monitor your node’s sync progress and status.

sudo systemctl daemon-reload
sudo systemctl enable initiad
sudo systemctl restart initiad
sudo journalctl -u initiad -f

Check If Your Node Is Synced​

Run the following command to watch your node's sync status in real time:

watch -n 1 "curl -s localhost:26657/status | jq"

You're fully synced when "catching_up": false, your node is fully synced with the network and ready to use.

{
"latest_block_height": "1234567",
"latest_block_time": "2025-10-25T10:31:37Z",
"catching_up": false
}

Set up Sidecar​

The Connect Sidecar consists of two main elements:

  1. An on-chain component that retrieves price data from the sidecar with each block, forwards these prices to the blockchain through vote extensions, and compiles prices from all validators involved.

  2. A sidecar process dedicated to polling price information from various providers and delivering this data to the on-chain component.

Step 1: Clone the Repository and build binaries​

# Clone repository
cd $HOME
rm -rf connect
git clone https://github.com/skip-mev/connect.git
cd connect
git checkout v2.3.0

# Build binaries
make build

# Move binary to local bin
mv build/connect /usr/local/bin/
rm -rf build

Step 2: Run Sidecar​

Create systemd service​
sudo tee /etc/systemd/system/initia-sidecar.service > /dev/null <<EOF
[Unit]
Description=Initia Connect Sidecar
After=network-online.target

[Service]
User=$USER
ExecStart=$(which connect) --market-map-endpoint 127.0.0.1:9090 --log-disable-file-rotation
Restart=on-failure
RestartSec=30
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF
Enable and start systemd service​
sudo systemctl daemon-reload
sudo systemctl enable initia-sidecar.service
sudo systemctl start initia-sidecar.service

Step 3: Verify Connect​

To verify Connect is working, run the following command:

curl 'http://localhost:8080/connect/oracle/v2/prices' | jq .

The output of the command should look similar to this:

{
"prices": {
"ATOM/USD": "920650000",
"BITCOIN/USD": "3980283250000",
"DYDX/USD": "273682500",
"ETHEREUM/BITCOIN": "5842000",
"ETHEREUM/USD": "232550500000",
"POLKADOT/USD": "638800000",
"SOLANA/USD": "8430350000"
},
"timestamp": "2024-01-23T01:15:09.776890Z"
}

Step 4: Enable Oracle Vote Extension​

In order to utilize the Connect oracle data in the Initia node, the Oracle setting should be enabled in the app.toml file.

###############################################################################
### Oracle ###
###############################################################################
[oracle]
# Enabled indicates whether the oracle is enabled.
enabled = "true"

# Oracle Address is the URL of the out of process oracle sidecar. This is used to
# connect to the oracle sidecar when the application boots up. Note that the address
# can be modified at any point, but will only take effect after the application is
# restarted. This can be the address of an oracle container running on the same
# machine or a remote machine.
oracle_address = "127.0.0.1:8080"

# Client Timeout is the time that the client is willing to wait for responses from
# the oracle before timing out.
client_timeout = "250ms"

# MetricsEnabled determines whether oracle metrics are enabled. Specifically
# this enables instrumentation of the oracle client and the interaction between
# the oracle and the app.
metrics_enabled = "true"

interval = "1500ms"
price_ttl = "10s"

Restart service after configuration changes

sudo systemctl restart initia.service

Step 5: Check the systemd logs​

To check service logs use command below:

journalctl -fu initia-sidecar.service -o cat