How to Become a Farcaster Validator with Snapchain #265
christopherwxyz
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
How to Become a Farcaster Validator with Snapchain
A practical guide to running your own Snapchain node and becoming a Farcaster network validator, based on Uno's production experience operating a validator on GKE.
Table of Contents
Background
Snapchain is the decentralized, peer-to-peer network that powers the Farcaster social protocol. It is a blockchain-like data layer that stores all Farcaster messages (casts, reactions, user data, etc.) across a sharded validator set.
Validators participate in consensus to produce blocks. Read nodes sync blocks from the network and serve API queries without participating in consensus.
Start by running a read node. This proves you can operate reliable infrastructure and is a prerequisite for being considered as a validator.
Architecture: Shards and Consensus
Snapchain uses 3 shards today, numbered 0, 1, and 2:
Why Shard 0 Matters Most
Shard 0 is the most important shard to sync first:
When you query
/v1/info, you will see separateblockDelayvalues for each shard. Shard 0 should reach single-digit block delay first, followed by shards 1 and 2.Consensus
Snapchain uses Malachite BFT consensus. Each shard has its own validator set, and validator sets can change at specific block heights. The current network has 6 validators (5 operated by Neynar/Farcaster, 1 by Uno).
System Requirements
Minimum (Read Node)
Recommended (Validator)
Uno runs on an n2-highmem-16 (16 vCPUs, 128 GB RAM) with a 1 TB persistent disk. The Snapchain container requests 8 CPU / 64 GB memory with limits of 14 CPU / 64 GB.
Quick Start: Running a Read Node
The easiest way to get started is with Docker on a dedicated server or VM.
1. Bootstrap
This downloads
snapchain.shand runs the initial setup. You will be prompted for your operator FID (your Farcaster account ID) and asked to acknowledge that read nodes do not earn rewards.2. Start the Node
This starts the Snapchain container using
docker composewith the officialfarcasterxyz/snapchain:latestimage. The default configuration runs as a read node (read_node = true).3. Wait for Snapshot Sync
A new node downloads ~200 GB of historical snapshots before it begins syncing live blocks. This takes 2–4 hours depending on your bandwidth and disk speed.
Monitor progress:
You will see snapshot chunks downloading (
chunk_0001.bin,chunk_0002.bin, etc.) followed by decompression and database loading.4. Verify Sync Status
curl -s http://localhost:3381/v1/info | jqSample output:
{ "version": "0.11.5", "shardInfos": [ { "shardId": "0", "maxHeight": "29000000", "blockDelay": "2", "numMessages": "...", "numFidRegistrations": "..." }, { "shardId": "1", "maxHeight": "29000000", "blockDelay": "3", ... }, { "shardId": "2", "maxHeight": "29000000", "blockDelay": "2", ... } ] }Your node is synced when
blockDelayvalues for all shards are in the single digits.5. Query the Node
Managing the Node
The bootstrap script sets up a cron job to auto-upgrade on a randomized schedule (weekdays, 0–6 AM) to prevent all nodes upgrading simultaneously.
Monitoring Your Node
Basic Health Check
Grafana Dashboard
The bootstrap installs a Grafana instance on port 3000 with StatsD metrics collection:
Production Monitoring
For production deployments, we recommend pushing
blockDelayper shard to your monitoring system and alerting whenblockDelay > 300sfor more than 5 minutes. See the monitoring CronJob section for a GCP Cloud Monitoring example.Becoming a Validator
Snapchain validators are not permissionless — you cannot simply stake tokens and join. Validators are coordinated by Neynar (who acquired Farcaster protocol operations). Onboarding is coordinated directly with the Neynar team as of March 2026.
Prerequisites
Before approaching Neynar about becoming a validator:
Step-by-Step Onboarding Process
Once Neynar agrees to onboard you as a validator, the process is:
Step 0: Have a Synced Read Node
Either stand up a new read node and wait for it to sync, or use an existing read node that is already tracking chain head. Your node must be fully synced (
blockDelayin single digits for all shards) before proceeding.Step 1: Generate a Validator Keypair
Generate an Ed25519 keypair. The Snapchain repo provides a command for this:
# From the snapchain repo cargo run --bin keygenThis produces a private key (your signing key — keep secret) and a public key (shared with other validators).
Step 2: Share Your Node Details with Neynar
Neynar needs three things to update their configs:
/v1/infoendpoint, but provide it if you have itAlso ensure port 3382 (UDP) allows outbound traffic — this is the gossip port.
Step 3: Convert Your Read Node to Validator Mode
Using the validator config template (see Validator Configuration below):
read_node = falseSNAPCHAIN_CONSENSUS__PRIVATE_KEYenvironment variable to your private keyannounce_addressto your public IP gossip addressannounce_rpc_addressto your public IP HTTP addressAt this point, your node will not sign blocks yet — it is not in the validator set. But it will start tracking consensus, which validates that your setup is correct.
Step 4: Choose Cutover Block Heights
Once your node is running healthily as a validator (tracking consensus without errors):
effective_atblock heights) with Neynar so all existing validators can update their configsExample staggering (approximately 3 days apart per shard):
Step 5: Cutover
blockDelayfor your shards — it should remain in single digitsUno's Validator Cutover (Reference)
Uno was added as the 6th validator on Feb 23, 2026. Activation was staggered across shards:
Validator Configuration
The key difference between a read node and a validator is the
config.toml. Here is an annotated validator configuration:Production Deployment (Kubernetes/GKE)
For production validators, we recommend Kubernetes for reliability. Here is Uno's architecture:
Infrastructure Overview
Key Decisions
dedicated=snapchain:NoSchedule) to prevent other workloads from being scheduled on the same nodesnapchain.farcaster.xyzpoints to the TCP load balancer IP (your DNS, we use a different, non-public domain)Monitoring CronJob
A CronJob runs every 2 minutes, scrapes
/v1/info, and pushesblockDelayper shard to GCP Cloud Monitoring:Auto-Update
A GitHub Actions workflow runs daily at 6 PM UTC to check for new Snapchain releases. If a new version is found, it automatically updates the image tag in Terraform and opens a PR.
Networking and Ports
/v1/info)All three ports must be open and reachable from the internet for a validator. For a read node, inbound on 3382 is required for gossip peering.
Firewall Rules
Environment Variables and Secrets
Required for Validators
SNAPCHAIN_CONSENSUS__PRIVATE_KEYSNAPCHAIN_ONCHAIN_EVENTS__RPC_URLSNAPCHAIN_BASE_ONCHAIN_EVENTS__RPC_URLSNAPCHAIN_L1_RPC_URLOptional
RUST_LOGwarnwarn,informalsystems_malachitebft_sync=error,snapchain::network::gossip=errorRUST_BACKTRACEfullfor debuggingRPC Providers
You need RPC access to three chains:
Use a reliable provider (Alchemy, Infura, QuickNode, or self-hosted) with sufficient rate limits. A validator makes continuous RPC calls to track onchain events.
Operational Tips
Initial Sync
blockDelayto drop to single digitsload_db_from_snapshot = truefor first start, can be left on for subsequent restartsFile Descriptors
Ensure your system allows at least 65,535 open file descriptors:
Disk Space
Retainreclaim policy prevent accidental data lossUpgrading
farcasterxyz/snapchain:latest./snapchain.sh upgradeValidator Key Management
validator_setsRelay Mode
Read nodes can serve as relay points for the network without participating in consensus. This is the default mode (
read_node = true). Running a relay is valuable for:Common Issues
blockDelaystuck at high valuesload_db_from_snapshot = trueand snapshot endpoint is accessibleannounce_addressmatches your actual public IP and UDP port is openReferences
All reactions