🖥️Light node (Shwap)

In this guide, we install the Light node on a separate server and use data from Consensus Full Node!

Server preparation

apt update && apt upgrade -y
apt install curl build-essential git wget jq make gcc tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev lz4 -y

Install GO

ver="1.23.1" && \
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
ufw allow 2121 comment light_node

Node installation

cd $HOME
rm -rf celestia-node
git clone https://github.com/celestiaorg/celestia-node && cd celestia-node
git checkout tags/v0.20.2
make build
make install

celestia version
#Semantic version: v0.20.2
#Commit: b24d47fe29d2b244d501194956412cb7bb60f30f
#https://docs.celestia.org/developers/celestia-node-key/
make cel-key
mv $HOME/celestia-node/cel-key /usr/local/bin/

cel-key add light_wallet --keyring-backend test --node.type light
# show wallet address
cel-key list --node.type light --keyring-backend test

Initializing the light

--core.ip use the address of our remote RPC node

--p2p.network use the chain id of our network

--core.rpc.port use the RPC port from our RPC node

--core.grpc.port use the gRPC port from our RPC node

--keyring.keyname use the name of the wallet we created

celestia light init \
  --core.ip <RPC_NODE_IP> \
  --core.rpc.port 26657 \
  --core.grpc.port 9090 \
  --keyring.keyname light_wallet

Create a service file

tee <<EOF >/dev/null /etc/systemd/system/celestia-light.service
[Unit]
Description=celestia-light mainnet daemon
After=network-online.target

[Service]
User=$USER
ExecStart=$(which celestia) light start \
  --metrics.tls=true --metrics --metrics.endpoint otel.celestia.observer \
  --keyring.keyname light_wallet
  
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable celestia-light
systemctl restart celestia-light && journalctl -u celestia-light -f -o cat

Don't forget to save the catalog with keys!!! .celestia-light/keys

Update

systemctl stop celestia-light
cd $HOME
rm -rf celestia-node
git clone https://github.com/celestiaorg/celestia-node && cd celestia-node
git checkout tags/v0.16.0
make build
make install
make cel-key

celestia version
#Semantic version: v0.16.0
#Commit: 6744f648649ebb5fee1b27faf7aca96ecf4519b2
# update config
celestia light config-update
systemctl restart celestia-light && journalctl -u celestia-light -f -o cat

Node transfer

For Light nodes there is no concept of double signature and if suddenly there is a need to transfer node ID to a new server, then it does not matter to us whether the old server is working or not available. The main thing is that we have a copy of two files located at /root/.celestia-light-mocha-4/keys/

Please note that we do not necessarily need to change the keyring-test wallet Let's look at the most suitable option for saving the Node ID, assuming that the old server is working:

  1. Start a new server and fully sync the Light

  2. Stop Light on the new server and replace the two files in /root/.celestia-light-mocha-4/keys/

  3. Be sure to give the necessary rights chmod 600 /root/.celestia-light-mocha-4/keys/*

  4. Restart Light on the new server and wait for full synchronization

  5. Stop the old server

Useful commands

Find out Light node id

# first, let's generate an authorization token
AUTH_TOKEN=$(celestia light auth admin)
echo $AUTH_TOKEN

# we get the peerId of our node
curl -X POST \
     -H "Authorization: Bearer $AUTH_TOKEN" \
     -H 'Content-Type: application/json' \
     -d '{"jsonrpc":"2.0","id":0,"method":"p2p.Info","params":[]}' \
     http://localhost:26658
#  another way to get Node ID
celestia p2p info --node.store ~/.celestia-light/

Working with wallets

# show wallet address
cel-key list --node.type light --keyring-backend test

# check balance
celestia state balance --node.store ~/.celestia-light/

# restore wallet
cel-key add light_wallet --keyring-backend test --node.type light  --recover

Status

celestia header sync-state --node.store  ~/.celestia-light/

Delete

systemctl stop celestia-light
systemctl disable celestia-light
rm /etc/systemd/system/celestia-light.service
systemctl daemon-reload
cd $HOME && \
rm -rf .celestia-light .celestia-ap celestia-node && \
rm -rf $(which celestia)

Last updated