Overview
Celestia is a modular blockchain network designed to provide scalable data availability for decentralized applications. Unlike traditional monolithic blockchains, which bundle execution, consensus, and data availability into a single layer, Celestia separates these functions. This allows developers to build customizable blockchains-rollups or sovereign chains-without maintaining their own consensus network.
At its core, Celestia uses Data Availability Sampling (DAS), a technique that lets nodes verify data availability without downloading entire blocks. This improves scalability while maintaining security. Rollups publish their transaction data to Celestia, and Celestia ensures that data is available and verifiable.
Celestia’s modular architecture leads to three major advantages:
-
Scalability - DAS enables higher throughput as more light nodes join.
-
Sovereignty - Developers can launch independent chains relying on Celestia only for consensus and data availability.
-
Ease of deployment - Rollups can be deployed quickly without building validator sets.
In summary, Celestia is a data-availability-focused base layer that enables a modular approach to blockchain design, making decentralized networks more scalable, flexible, and efficient.
Public Endpoints
Guide
This guide provides a complete and reliable setup for running a Celestia mainnet node and validator. Here you’ll find everything you need - from downloading binaries and configuration files to initializing the node, managing keys, applying snapshots, and maintaining a stable validator environment. Follow the steps carefully to ensure a smooth and secure deployment on the Celestia network.
Prepare
Update and install packages
sudo apt update && sudo apt upgrade -y && \ sudo apt install curl tar wget clang pkg-config libssl-dev libleveldb-dev jq build-essential bsdmainutils git make ncdu htop screen unzip bc fail2ban htop -y
Installing Go
VER="1.22.0" cd $HOME && \ wget "https://golang.org/dl/go$VER.linux-amd64.tar.gz" && \ sudo rm -rf /usr/local/go && \ sudo tar -C /usr/local -xzf "go$VER.linux-amd64.tar.gz" && \ rm "go$VER.linux-amd64.tar.gz" && \ echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile && \ source $HOME/.bash_profile && \ go version
Binary
git clone https://github.com/celestiaorg/celestia-app.git celestia cd celestia git checkout 6.4.2 make install celestia-appd version --long | grep -e version -e commit # version: 6.4.2 # commit: 90990a85
Initialization
Initialize the node (replace VALIDATOR_NAME with your own)
celestia-appd init VALIDATOR_NAME --chain-id celestia && \ celestia-appd config chain-id celestia && \ celestia-appd config keyring-backend os
Genesis
Download genesis
wget https://storage.crouton.digital/mainnet/celestia/files/genesis.json -O $HOME/.celestia-app/config/genesis.json
Addrbook
Download addrbook
wget https://storage.crouton.digital/mainnet/celestia/files/addrbook.json -O $HOME/.celestia-app/config/addrbook.json
Configuration
EXTERNAL_IP=$(wget -qO- eth0.me) NODE_NUMBER="1" sed -i.bak \ -e "s/\(proxy_app = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$(($NODE_NUMBER + 266))58\"/" \ -e "s/\(laddr = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$(($NODE_NUMBER + 266))57\"/" \ -e "s/\(pprof_laddr = \"\)\([^:]*\):\([0-9]*\).*/\1localhost:$(($NODE_NUMBER + 60))60\"/" \ -e "/\[p2p\]/,/^\[/{s/\(laddr = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$(($NODE_NUMBER + 266))56\"/}" \ -e "/\[p2p\]/,/^\[/{s/\(external_address = \"\)\([^:]*\):\([0-9]*\).*/\1${EXTERNAL_IP}:$(($NODE_NUMBER + 266))56\"/; t; s/\(external_address = \"\).*/\1${EXTERNAL_IP}:$(($NODE_NUMBER + 266))56\"/}" \ -e "s/\(prometheus_listen_addr = \":\)\([0-9]*\).*/\1$(($NODE_NUMBER + 266))60\"/" $HOME/.celestia-app/config/config.toml sed -i.bak \ -e "/\[api\]/,/^\[/{s/\(address = \"tcp:\/\/\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 13))17\4/}" \ -e "/\[grpc\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 90))90\4/}" \ -e "/\[grpc-web\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 90))91\4/}" \ -e "/\[json-rpc\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 85))45\4/}" \ -e "/\[json-rpc\]/,/^\[/{s/\(ws-address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 85))46\4/}" $HOME/.celestia-app/config/app.toml echo "export NODE=http://localhost:$(($NODE_NUMBER + 266))57" >> $HOME/.bash_profile && \ source $HOME/.bash_profile && \ celestia-appd config node $NODE
Create a service file
sudo tee /etc/systemd/system/celestia-appd.service > /dev/null <<EOF [Unit] Description=celestia_node After=network.target [Service] User=$USER Type=simple ExecStart=$(which celestia-appd) start --home $HOME/.celestia-app Restart=on-failure LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
Start the node
sudo systemctl daemon-reload && \ sudo systemctl enable celestia-appd && \ sudo systemctl restart celestia-appd && \ sudo journalctl -u celestia-appd -f -o cat
Restore node from snapshot
sudo apt install lz4 -y && \ sudo systemctl stop celestia-appd && \ cp $HOME/.celestia-app/data/priv_validator_state.json $HOME/.celestia-app/priv_validator_state.json.backup && \ rm -rf $HOME/.celestia-app/data && \ curl https://storage.crouton.digital/mainnet/celestia/snapshots/celestia_latest.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.celestia-app && \ mv $HOME/.celestia-app/priv_validator_state.json.backup $HOME/.celestia-app/data/priv_validator_state.json && \ sudo systemctl restart celestia-appd && \ sudo journalctl -u celestia-appd -f
State Sync
Restore node from state sync
SNAP_RPC="https://celestia-mainnet-rpc.crouton.digital:443" && \ sudo systemctl stop celestia-appd && \ cp $HOME/.celestia-app/data/priv_validator_state.json $HOME/.celestia-app/priv_validator_state.json.backup && \ celestia-appd tendermint unsafe-reset-all --home $HOME/.celestia-app --keep-addr-book && \ peers="fb779c787dda02b66c061ce030f77682494cc4c8@65.21.231.168:11656" && \ sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.celestia-app/config/config.toml && \ LATEST_HEIGHT=$(curl -s "$SNAP_RPC/block" | jq -r .result.block.header.height) && \ BLOCK_HEIGHT=$((LATEST_HEIGHT - 1000)) && \ TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash) && \ echo "$LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH" && sleep 2 && \ sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC,$SNAP_RPC\"| ; s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"| ; s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\"\"|" $HOME/.celestia-app/config/config.toml && \ mv $HOME/.celestia-app/priv_validator_state.json.backup $HOME/.celestia-app/data/priv_validator_state.json && \ sudo systemctl restart celestia-appd && \ sudo journalctl -u celestia-appd -f
Upgrade Node
VER="v6.4.2" git clone https://github.com/celestiaorg/celestia-app.git celestia && \ cd $HOME && \ rm -rf celestia && \ git clone https://github.com/celestiaorg/celestia-app.git celestia && \ cd celestia && \ git checkout tags/$VER -b $VER && \ make install && \ sudo systemctl restart celestia-appd && \ sudo journalctl -u celestia-appd -f
Delete Node
sudo systemctl stop celestia-appd && \ sudo systemctl disable celestia-appd && \ sudo rm -rf /etc/systemd/system/celestia-appd.service && \ sudo rm "$(which celestia-appd)" && \ sudo rm -rf "$HOME/.celestia-app"
Key management
# This command generates a new wallet with a unique keypair. # Use this to create a secure, brand-new wallet for transactions. # Your wallet name = "wallet" celestia-appd keys add wallet
Validator management
celestia-appd tx staking create-validator \ --amount 1000000utia \ --moniker "VALIDATOR_NAME" \ --identity "" \ --website "" \ --details "" \ --from wallet \ --commission-rate 0.1 \ --commission-max-rate 0.2 \ --commission-max-change-rate 0.01 \ --min-self-delegation 1 \ --pubkey $(celestia-appd tendermint show-validator) \ --chain-id celestia \ --gas auto \ --gas-adjustment 1.4 \ --gas-prices 0.002utia \ -y
Validator commands
# Retrieves comprehensive information regarding the validator. # This command is utilized to fetch details about the current validator, including its address, public key, and associated data. # Your wallet name = "wallet" celestia-appd q staking validator $(celestia-appd keys show wallet --bech val -a)
Onchain
# Withdraw all accumulated rewards from your account. # This command retrieves and withdraws all rewards earned from staking. # Your wallet name = "wallet" celestia-appd tx distribution withdraw-all-rewards --from wallet --chain-id celestia --gas-adjustment=1.15 --gas auto --gas-prices 0.002utia -y


