Node Requirements
Hardware, software, and configuration for running a Materios node
This page covers what you need to run a Materios node, whether as a validator (block producer + finalizer) or a full node (sync and serve RPC).
Hardware Requirements
Validator Node
CPU
2 vCPUs
4 vCPUs
RAM
1 GB
2 GB
Disk
20 GB SSD
50 GB SSD
Network
10 Mbps, static IP
100 Mbps, static IP
OS
Linux (x86_64)
Ubuntu 22.04+ or Debian 12+
Actual observed usage on the staging network: ~800 MiB RAM, <1% CPU, ~12 GB disk after several weeks of operation. Requirements will grow as chain history accumulates.
Full Node / Archive
CPU
2 vCPUs
4 vCPUs
RAM
2 GB
4 GB
Disk
50 GB SSD
100 GB SSD
Network
10 Mbps
100 Mbps
Archive nodes retain all historical state and serve RPC queries. They require more disk and memory than validators.
External Operator (Cert Daemon Only)
External attestation committee members run only the cert daemon, not a full Substrate node. Requirements are minimal:
CPU
1 vCPU
RAM
512 MB
Disk
1 GB
Network
Outbound HTTPS + WSS
Software
Container Image
The Materios node is distributed as a Docker image built from the monorepo.
Note: A pre-built container image is not yet publicly available. For now, you must build from source (see below). A published image on GHCR will be announced once the repository is public.
Build toolchain (if building from source):
Rust 1.88.0 with
wasm32-unknown-unknowntargetSystem packages:
protobuf-compiler,clang,libclang-dev,libssl-dev,pkg-config,make,cmakePolkadot SDK:
polkadot-stable2409-5
The resulting image is ~224 MB uncompressed (~56 MB compressed).
Runtime
spec_name:
materiosspec_version: 105
Block time: 6 seconds
Network Ports
30333
TCP
P2P (libp2p)
Yes (inbound + outbound)
9944
TCP
JSON-RPC (HTTP + WebSocket)
Validators: localhost only. Full nodes: as needed.
9615
TCP
Prometheus metrics
Optional
Security note: Validators should bind RPC to 127.0.0.1 only. Never expose --unsafe-rpc-external or --rpc-methods unsafe on a public-facing validator.
Configuration
Validator Node
Key flags:
--chain staging
Use the Materios staging chain spec
--validator
Enable block production and finality voting
--base-path
Where chain data is stored
--node-key
Persistent P2P identity (32 hex bytes). Generate with subkey generate-node-key
--name
Human-readable name shown in telemetry
Full Node (Non-Validator)
Full nodes omit --validator and can safely expose RPC externally with --rpc-cors for serving queries.
Environment Variables
Bootnodes
New nodes need at least one bootnode to discover peers. Bootnodes will be provided during the onboarding process. Contact the Flux Point Studios team for current bootnode addresses.
Session Keys
Validators require two session keys:
Aura
sr25519
Block authoring
Grandpa
ed25519
Finality voting
Generating Keys
Inserting Keys
Keys are inserted into the running node via RPC:
Keys persist to the node's keystore on disk. After insertion, restart the node for Grandpa keys to take effect.
Security: Keep mnemonics secure. Never share them. The author_insertKey RPC should only be accessible on localhost.
Chain Spec
The chain specification file defines genesis state, initial authorities, and network parameters. The raw chain spec for the staging network is included in the repository at ops/chain-spec-raw.json.
To verify you have the correct chain spec:
Monitoring
Health Check
Response includes peers (connected peer count), isSyncing (whether the node is catching up), and shouldHavePeers (whether the node expects peers).
Prometheus Metrics
If --prometheus-port 9615 is set, metrics are available at http://localhost:9615/metrics for integration with Grafana or other monitoring tools.
Key Metrics to Watch
Block height: Should advance every 6 seconds
Peer count: Validators should have at least 2 peers
Finalized block: Should trail head by no more than a few blocks
Memory usage: Typical ~800 MiB, investigate if >2 GB
Docker Compose Example
Note: Replace <your-32-byte-hex-node-key> with your actual node key. For production, consider passing sensitive values via environment variables or Docker secrets rather than command-line arguments.
Syncing a New Node
New nodes sync from genesis by default. The staging network is young, so a full sync completes in minutes. As the chain grows, snapshot-based syncing may be offered.
During sync, the node will show isSyncing: true in the health check. Wait for sync to complete before inserting validator keys.
Troubleshooting
0 peers
Firewall blocking port 30333
Open TCP 30333 inbound
isSyncing stuck
Wrong chain spec or no bootnodes
Verify genesis hash, add bootnodes
Not producing blocks
Keys not inserted or wrong key type
Re-insert keys, restart node
Finality stalled
Grandpa key mismatch or <2/3 validators online
Check key insertion, check peer connectivity
High memory (>4 GB)
Possible leak or archive mode on limited RAM
Restart node, check --pruning setting
Last updated

