Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.plasma.org/llms.txt

Use this file to discover all available pages before exploring further.

Non-validator nodes provide RPC access to the Plasma network by monitoring consensus clients and serving application requests. This guide covers deployment using the official non-validator-templates repository.

Prerequisites

Basic Linux administration skills
Docker and Docker Compose installed
A server that meets the hardware requirements

Available Networks

NetworkChain IDConsensus VersionExecution Version
mainnet97450.15.0Reth v1.8.3
testnet97460.15.0Reth v1.8.3
devnet97470.15.0Reth v1.8.3
All networks use the public plasma-consensus-public image — no GHCR authentication is required.

Quickstart

1

Install Docker

Connect to your server and ensure that Docker and Docker Compose are installed.
2

Clone the templates repository

git clone https://github.com/PlasmaLaboratories/non-validator-templates.git
cd non-validator-templates
3

Start your node

Replace {network} with mainnet, testnet, or devnet:
cd {network}/docker-compose
docker compose up -d
4

Verify containers are running

docker compose ps
docker compose logs -f plasma-consensus
5

Start monitoring (optional)

docker compose -f monitoring.yml up -d

Architecture Overview

Your non-validator node consists of two main components:

Plasma Execution Client

Based on Reth. Handles transaction execution, state management, and provides JSON-RPC endpoints for applications.

Plasma Observer Client

A lightweight client that monitors the Plasma consensus network without participating in block production or validation.
The Docker Compose setup orchestrates these components along with initialisation containers that handle JWT secret generation, key generation, and database setup automatically.

Directory Structure

Each network directory follows the same layout:
{network}/
├── docker-compose/
│   ├── docker-compose.yml        # Service definitions
│   ├── .env                      # Image versions and tags (source of truth)
│   ├── non-validator.toml        # Consensus configuration
│   ├── enodes.txt                # Execution bootstrap nodes
│   ├── monitoring.yml            # Monitoring stack
│   └── monitoring/               # Prometheus & Grafana configs
└── shared/                       # Validator keys & identities (read-only)
    ├── keys/                     # BLS12-381 validator public keys
    └── identities/               # Validator identity files

Setup Process Explained

The Docker Compose file defines four services that run in sequence:
1

OpenSSL Initialisation

Generates the JWT secret for secure Engine API communication and creates secp256k1 keys for your node’s network identity. These are only generated once and persist across restarts.
2

Consensus Database Initialisation

Initialises the consensus database with the genesis configuration for your chosen network and generates a peer ID for your node.
3

Execution Database Initialisation

Initialises the Reth execution database with the genesis state.
4

Container Deployment

Once initialisation completes, the execution and consensus clients start. Execution Client (Reth) starts first and exposes the JSON-RPC API and Engine API. Consensus Observer Client starts after the execution client is healthy and connects to the consensus network.

Configuration

All version numbers and image tags are defined in each network’s .env file — this is the single source of truth for software versions. The consensus client is configured via non-validator.toml.
SectionFieldsDescription
(top-level)engine_api_url, consensus_api_host, authrpc_jwtsecretExecution engine connection
[persistence]data_dirConsensus data storage path
[network]p2p_port, interval, timeout, identity_file_path, trusted_only, discovery.enabledP2P networking and peer discovery
[api]enabled, host, portConsensus API endpoint
[validators.*]validator_keystore_pk_file_path, identity_file_pathValidator committee
[network.bootstrap_nodes.*]api_host, p2p_port, peer_idConsensus bootstrap peers

NAT / External Address

For nodes behind NAT, configure an external address so that peers can discover and connect to your node:
[network]
external_address = "node.example.com:34070"

Port Configuration

PortServiceProtocolDescription
8545Execution RPCHTTPJSON-RPC API endpoint
8551Execution AuthHTTPEngine API (internal)
30303Execution P2PTCP/UDPPeer-to-peer networking
34070Consensus P2PTCPConsensus networking
35070Consensus APIHTTPConsensus health/API endpoint
9001MetricsHTTPPrometheus metrics
Firewall requirements: Ensure inbound/outbound on port 30303 (TCP/UDP) for execution P2P, inbound on port 34070 (TCP) for consensus P2P, and internal communication on port 8551 for the Engine API. The JSON-RPC interface on port 8545 is exposed by default — consider restricting access in production.

Common Operations

cd {network}/docker-compose

docker compose up -d                              # Start
docker compose -f monitoring.yml up -d            # Start monitoring
docker compose logs -f                            # Logs
docker compose down                               # Stop
docker compose -f monitoring.yml down             # Stop monitoring
docker compose down -v && docker compose up -d    # Clean restart

Monitoring Your Node

Once your node is operational, you can monitor its health and synchronisation status. For comprehensive monitoring setup and best practices, see the monitoring guide.
# Check container status
docker compose ps

# View execution client logs
docker compose logs -f plasma-execution

# View consensus observer client logs
docker compose logs -f plasma-consensus
Your node will begin synchronising immediately. Initial sync may take several minutes depending on network conditions and your hardware specifications.

Database Snapshots

Plasma publishes daily database snapshots for mainnet and testnet. Snapshots let you bootstrap a new node in hours instead of syncing from genesis, which can take significantly longer. Each snapshot contains two files — the consensus-layer database and the execution-layer database — uploaded to a requester-pays S3 bucket. You need an AWS account; standard S3 data-transfer rates apply.

Snapshot Prerequisites

RequirementDetails
AWS accountCredentials configured via aws configure or environment variables
AWS CLIv2 recommended (aws --version)
Disk spaceMainnet: ~400 GB free • Testnet: ~100 GB free
Data transfer out from us-east-2 is ~$0.09/GB for the first 10 TB/month. Transferring from an EC2 instance in the same region is free — running your node in us-east-2 is the most cost-effective option.

Snapshot Buckets

PropertyMainnetTestnet
Bucketplasma-mainnet-db-backupsplasma-testnet-db-backups
Regionus-east-2 (Ohio)us-east-2 (Ohio)
Access modelRequester-paysRequester-pays
Backup cadenceDailyDaily at 02:00 UTC
RetentionRolling (older backups removed automatically)3 days
Backups are organized into date-stamped folders (MM-DD-YY). Each folder contains two files:
FileDescription
Consensus database (.db on mainnet, .mdb on testnet)Full consensus-layer state
Execution database (.tar.gz)Tar archive of the Reth execution data/ directory

Download a Snapshot

# Set your target network's bucket
BUCKET="plasma-mainnet-db-backups"   # or "plasma-testnet-db-backups"

# List available snapshots
aws s3 ls "s3://${BUCKET}/" \
  --region us-east-2 \
  --request-payer requester

# Download the most recent snapshot
DATE="MM-DD-YY"   # replace with the latest date folder (e.g. 03-23-26)

aws s3 cp \
  "s3://${BUCKET}/${DATE}/" \
  ./backups/ \
  --recursive \
  --region us-east-2 \
  --request-payer requester

Restore from Snapshot

1

Stop your node

cd {network}/docker-compose
docker compose down
2

Restore the consensus database

Copy the snapshot into the consensus data directory:
# Mainnet (.db)
cp backups/consensus-backup-*.db /path/to/plasma-data-dir/

# Testnet (.mdb)
cp backups/consensus-backup-*.mdb /path/to/plasma-data-dir/
3

Restore the execution database

Extract the archive into the execution data directory:
tar -xzf backups/execution-backup-*.tar.gz -C /path/to/execution-data-dir/
4

Restart your node

docker compose up -d

Snapshot Troubleshooting

IssueCause / Fix
Access DeniedYou must include --request-payer requester on every command. The bucket rejects requests without it.
403 ForbiddenAWS credentials not configured. Run aws sts get-caller-identity to verify you have a valid session.
Empty bucket listingOlder backups are automatically cleaned up. If the bucket appears empty, a backup cycle may be in progress — check back later.
Wrong file extensionMainnet uses .db; testnet uses .mdb. Ensure you copy the correct file for your network.