Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/axelarnetwork/axelar-core/llms.txt

Use this file to discover all available pages before exploring further.

Once your node is built and configured, running it is a matter of invoking axelard start. The daemon embeds CometBFT in-process and begins syncing the chain state from either genesis or a state sync snapshot. This page covers the start command and its most important flags, available monitoring endpoints, snapshot management, and the operational commands you’ll reach for most often.

Starting the Node

axelard start --home ~/.axelar
The process is long-running. It will block and emit structured log lines to stdout. Use a process manager (systemd, supervisord, or Docker) to keep it running across reboots.

Key Flags

--home
string
Path to the node home directory. Defaults to $HOME/.axelar. Override this when running multiple nodes on the same host.
--log_level
string
Log verbosity: trace, debug, info, warn, error, fatal, or panic. Defaults to info. Use debug when diagnosing issues.
--log_format
string
plain (default, human-readable) or json (structured, better for log aggregators like Loki or Datadog).
--p2p.laddr
string
P2P listen address. Default tcp://0.0.0.0:26656. Change the port if it conflicts with another service.
--rpc.laddr
string
CometBFT RPC listen address. Default tcp://127.0.0.1:26657. Bind to 127.0.0.1 unless you intentionally expose the RPC.
--minimum-gas-prices
string
Override app.toml minimum gas prices at runtime. Example: 0.007uaxl.
--pruning
string
Override the pruning strategy. One of default, nothing, everything, or custom.
--p2p.seeds
string
Comma-separated list of ID@host:port seed nodes passed directly without editing config.toml.
--halt-height
uint
Stop the node gracefully at a specific block height. Useful for planned upgrades.
--grpc.enable
bool
Enable or disable the gRPC server. Defaults to true.

Full Example

axelard start \
  --home ~/.axelar \
  --log_level info \
  --log_format json \
  --p2p.laddr tcp://0.0.0.0:26656 \
  --rpc.laddr tcp://127.0.0.1:26657 \
  --minimum-gas-prices 0.007uaxl \
  --grpc.address localhost:9090 \
  --api.enable \
  --api.address tcp://localhost:1317

Syncing Strategies

Replay every block from block 1. This is the most trustless option but can take days for a mature chain.
# Ensure state sync is disabled in config.toml
axelard config set config statesync.enable false
axelard start --home ~/.axelar
You can monitor progress by querying the local RPC:
curl -s http://localhost:26657/status | jq '.result.sync_info'

Health Check

The axelard health-check command validates that the node, the broadcaster account, and the optional tofnd daemon are all reachable and functional:
axelard health-check \
  --node tcp://localhost:26657 \
  --operator-addr axelarvaloper1...

Flags

--node
string
CometBFT RPC endpoint to check. Defaults to tcp://localhost:26657.
--operator-addr
string
Validator operator address (axelarvaloper1...) to check on-chain registration.
--tofnd-host
string
Hostname of the tofnd signing daemon. Defaults to localhost.
--tofnd-port
string
Port of the tofnd daemon. Defaults to 50051.
--skip-broadcaster
bool
Skip the broadcaster account check.
--skip-tofnd
bool
Skip the tofnd connectivity check. Useful for non-validator full nodes.

Monitoring Endpoints

A running axelard node exposes several endpoints:
EndpointDefault AddressPurpose
CometBFT RPChttp://localhost:26657Block queries, transaction broadcast, node status
REST APIhttp://localhost:1317Cosmos SDK REST / Swagger UI
gRPClocalhost:9090Cosmos SDK gRPC queries and transactions
gRPC-WebProxied via gRPC portBrowser-compatible gRPC
Prometheushttp://localhost:26660/metricsNode metrics for Grafana

Enable Prometheus

Prometheus metrics are emitted by CometBFT. Enable the endpoint in config.toml:
[instrumentation]
prometheus = true
prometheus_listen_addr = ":26660"
namespace = "cometbft"
Then restart the node and point your Prometheus scrape config at http://<node-ip>:26660/metrics.

Useful RPC Queries

# Node sync status
curl -s http://localhost:26657/status | jq '.result.sync_info'

# Latest block height
curl -s http://localhost:26657/abci_info | jq '.result.response.last_block_height'

# Node ID
curl -s http://localhost:26657/status | jq -r '.result.node_info.id'

# Connected peers
curl -s http://localhost:26657/net_info | jq '.result.n_peers'

Snapshot Management

Snapshots let you quickly restore a node without replaying the full chain history. The axelard snapshots family of commands manages the local snapshot store.

List Available Snapshots

axelard snapshots list --home ~/.axelar

Export a Snapshot

Take a snapshot of the current application state and save it to the snapshot store:
axelard snapshots export --home ~/.axelar
The node must not be running when you export a snapshot manually. For live exports, configure state-sync.snapshot-interval in app.toml and restart the node.

Load a Snapshot Archive

Load a portable .tar.gz archive into the local snapshot store:
axelard snapshots load snapshot.tar.gz --home ~/.axelar

Restore from a Snapshot

Apply a previously loaded snapshot to reset application state:
axelard snapshots restore <height> <format> --home ~/.axelar

Dump a Snapshot

Export a snapshot from the store as a portable archive:
axelard snapshots dump <height> <format> --home ~/.axelar

Operational Commands

Rolling Back One Block

If the node has diverged due to an incorrect app hash, roll back one block:
axelard rollback --home ~/.axelar
Use --hard to remove the last block entirely (not just revert state):
axelard rollback --hard --home ~/.axelar
Only use --hard if instructed by the Axelar team or if you fully understand the implications. The blocks are not removed from the chain — upon restart, transactions from the removed block will be re-executed.

Pruning Historical State

Manually prune old state without running the full node:
# Use the default strategy (keep last 362880 states)
axelard prune default --home ~/.axelar

# Keep only the most recent 100 states
axelard prune custom --pruning-keep-recent 100 --home ~/.axelar

# Archive: keep nothing (delete everything except the 2 latest)
axelard prune everything --home ~/.axelar

Resetting CometBFT State

This is a destructive operation that deletes all chain data. Use only on a node you intend to re-sync from scratch.
axelard comet unsafe-reset-all --home ~/.axelar

Running as a systemd Service

Create /etc/systemd/system/axelard.service:
[Unit]
Description=Axelar Core Node
After=network-online.target

[Service]
User=axelard
ExecStart=/usr/local/bin/axelard start --home /home/axelard/.axelar --log_format json
Restart=on-failure
RestartSec=5s
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
Enable and start:
sudo systemctl daemon-reload
sudo systemctl enable axelard
sudo systemctl start axelard
journalctl -fu axelard

Running with Docker

The official Docker image sets up the home directory at /home/axelard/.axelar and reads several environment variables:
VariablePurpose
HOME_DIRBase directory (default /home/axelard)
TOFND_HOSTHostname of the tofnd signing daemon
AXELARD_CHAIN_IDChain ID (default axelar-testnet-lisbon-3)
AXELARD_KEYRING_BACKENDKeyring backend type (default file)
PEERS_FILEPath to a file containing comma-separated seed peers
CONFIG_PATHDirectory with custom config.toml, app.toml, and vald.toml
PRESTART_SCRIPTPath to a shell script that runs before node startup
NODE_MONIKERNode moniker
docker run -d \
  --name axelard \
  -e AXELARD_CHAIN_ID=axelar-dojo-1 \
  -e NODE_MONIKER=my-node \
  -v ~/.axelar:/home/axelard/.axelar \
  -p 26656:26656 \
  -p 26657:26657 \
  axelar/core

Build docs developers (and LLMs) love