Skip to content
Tenzro
← All tutorials
Tutorial · Operate

Run a light node

Follow Tenzro Network 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 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

  • A Linux, Windows or macOS machine with a TPM 2.0 or a Secure Enclave, or a key held in another machine's TPM through a key holder: every node needs a hardware key and refuses to start without one. A light node needs no GPU and no stake.
  • The tenzro-node and tenzro binaries from Downloads, checked as described in Verify your download, or built from source. See Supported hardware.
  • On Linux, run tenzro-node tpm provision once before the first start.

1. Install the node

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

Easy path: install Tenzro (curl -fsSL https://downloads.tenzro.com/install.sh | sh on Linux and macOS, irm https://downloads.tenzro.com/install.ps1 | iex in PowerShell on Windows), then run tenzro to check the machine and set up your keys. See Install and first run. Then go to step 2.

Advanced: build from source.

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 --genesis genesis.toml

genesis.toml is the genesis file published with the release; check it first (see Verify your download). With no --boot-nodes the node finds the network through the genesis validators named in the archive's network profile. The RPC listens on 127.0.0.1:8545.

3. Let it catch up

On this release a fresh light node joins by block replay from genesis: it replays the chain from block 0, checking each finality certificate, and is in step when it reports the network's finalized height. Starting from a state snapshot whose root matches a certified checkpoint arrives in an update. 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

ExploreJoin the network