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β
Official documentation: https://docs.skip.build/connect/validators/quickstart
The Connect Sidecar consists of two main elements:
-
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.
-
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