For the complete documentation index, see llms.txt. This page is also available as Markdown.

Run a local validium node

Who this is for: operators deploying their own Lumia Prism node from a fresh Linux host. This is the deployment tutorial referenced from RPC node overview and zkNode overview: it's the same permissionless, self-hosted validium execution node under both names; see the naming note on the zkNode overview page.

Prerequisites:

  • A Linux x86_64 host meeting hardware requirements

  • Docker Engine with Compose v2

  • An Ethereum L1 RPC endpoint

Steps

1

Prepare the host

Install base packages, Docker, and a firewall; confirm your clock is synced and you have enough free disk before starting:

host-prep.sh
sudo apt-get update && sudo apt-get install -y git curl jq tar chrony ufw
curl -fsSL https://get.docker.com | sudo sh
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw enable
df -h /
2

Get the deployment repository

clone-and-configure.sh
git clone <repository-url>
cd <repository-directory>
cp .env.example .env
3

Configure the network

Set your L1 RPC endpoint and confirm the chain identity matches Lumia mainnet's chain ID from /reference/networks: do not retype network values here; pull them from that page.

Sanity-check your L1 endpoint answers before proceeding:

check-l1-endpoint.sh
curl -s -X POST -H 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}' "<L1_RPC_URL>" | jq -r .result
# expect 0x1 for Ethereum mainnet
4

Bootstrap from a snapshot

bootstrap-snapshot.sh
curl -fL -C - -o snapshot.tar.gz "<snapshot-url>"
echo "<published-sha256>  snapshot.tar.gz" | sha256sum -c
mkdir -p data && tar -xzf snapshot.tar.gz --strip-components=1 -C data

The exact snapshot URL and checksum change over time: get the current ones from the repository your operator's guide points you to, not from a static copy in this doc.

5

Start the node

docker-compose-up.sh
docker compose up -d
docker compose logs -f

Verify it worked

Run these checks. Your node is synced only when all of them pass:

verify-sync.sh
# Chain identity: compare against the chain ID in /reference/networks
curl -s -X POST -H 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}' \
  http://127.0.0.1:8545 | jq -r .result

# Local head should advance between two calls a minute apart
curl -s -X POST -H 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
  http://127.0.0.1:8545 | jq -r .result

Troubleshooting

Common failures during this deployment are covered in depth on Node troubleshooting: check there before assuming something is broken.

Last updated

Was this helpful?