Skip to content
Tenzro
← All tutorials
Tutorial · Operate

Run a light node

Follow Network 1 without staking: run a light node that checks finality certificates and serves verified reads to your wallet or app.

Beginner15 min

A light node follows Tenzro Network 1 without proposing blocks or voting. It checks what it receives against finality certificates, the ML-DSA-65 signed certificates validators produce for every finalized checkpoint, so it does not have to trust the peer or RPC provider that served the data. Use one behind a wallet, a read-only service, a bridge relayer or any app that wants verified reads without the cost of a validator.

Prerequisites

  • Any Linux or macOS machine. A light node needs no GPU, no TPM and no stake.
  • The tenzro-node and tenzro binaries from Downloads or built from source.

1. Install the node

The same binary runs every role. The light role simply skips proposing and voting.

bash
git clone https://github.com/tenzro/tenzro-network.git
cd tenzro-network
cargo build --release -p tenzro-node -p tenzro-cli

2. Start in light mode

bash
tenzro-node --roles light --data-dir ./light-data

With no --genesis or --boot-nodes flags the node finds Network 1 through its bootstrap peers and anchors itself on the built-in Network 1 genesis. The RPC listens on 127.0.0.1:8545.

3. Let it catch up

A fresh light node does not replay the chain from genesis. It fetches a recent state snapshot from peers and accepts it only if the snapshot's state root matches a checkpoint carried by a valid finality certificate. From there it follows new checkpoints, checking each certificate's signatures against the validator set it already trusts.

Watch progress:

bash
tenzro node syncing
tenzro node status

syncing returns false once the node is at the head. A node that shows peers but a low height on a quiet chain is not stuck; it advances with the next finalized block.

4. Read finalized state

Point any SDK, wallet or script at the local RPC:

bash
curl -s http://127.0.0.1:8545 -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tenzro_getFinalizedBlock","params":[]}'

curl -s http://127.0.0.1:8545 -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tenzro_getBalance","params":["0x<address>"]}'

Expected output is a JSON-RPC result such as {"jsonrpc":"2.0","id":1,"result":"0x..."}. These are open methods and need no key.

From TypeScript, use the SDK against the local node:

ts
import { TenzroClient } from "tenzro-sdk";

const tz = TenzroClient.local();

5. Keep it running

Run the light node as a service so it stays current. Upgrades replace the binary and keep the data directory. Because a light node holds no stake, it can be stopped and restarted at any time; it resumes from the last checkpoint it verified.

Next steps