Prerequisites
Hardware
| Component | Requirement |
|---|---|
| OS | Linux AMD64, Linux ARM64 |
| CPU / RAM | 4 Physical Cores, 16GB RAM |
| Storage | 1TB minimum (more for long-term); Local SSD or on-instance storage preferred; network volumes require at least 1000 IOPS |
Software
Install the required binaries before starting:- Beacon-Kit: Download the appropriate binary from the releases page for your OS and architecture. Make it executable and place it in your PATH (e.g.,
~/.local/bin/). - Execution client: Choose either Bera-Reth or Bera-Geth. Download the binary for your OS and architecture, make it executable, and place it in your PATH.
What you’ll do
- Download scripts — clone helper scripts that automate configuration
- Configure environment — set environment variables for your network (mainnet or Bepolia) and node identity
- Fetch parameters — download genesis files and network configuration
- Set up Beacon-Kit — initialize the consensus client and generate keys
- Set up execution client — initialize Reth or Geth with the genesis state
- Fetch snapshots (optional) — restore snapshots to speed up initial sync
- Fetch address book (optional) — download peer list for faster startup
- Run both clients — launch them in separate terminals; they communicate via JWT auth
Step 1 - Download scripts
Make an area to work in, then clone the Berachain node scripts. These scripts handle configuration, parameter fetching, and client startup.If you’re a Unix traditionalist, use
/opt/beranode as your working directory.env.sh contains environment variables used in the other scripts.
fetch-berachain-params.sh obtains copies of the genesis file and other configuration files.
Then we have setup- and run- scripts for various execution clients and beacond.
Step 2 - Configure environment
Editenv.sh to set your node’s configuration. Open the file and modify these values:
env.sh
- CHAIN_SPEC: Set to
testnetormainnet. - MONIKER_NAME: A name of your choice for your node.
- WALLET_ADDRESS_FEE_RECIPIENT: The address that receives priority fees for blocks sealed by your node. If your node will not be a validator, this won’t matter.
- EL_ARCHIVE_NODE: Set to
trueif you want the execution client to be a full archive node. - MY_IP: Sets the IP address your chain clients advertise to other peers on the network. In a cloud environment such as AWS or GCP where you are behind a NAT gateway, you must specify this address or allow the default
curl canhazip.comto auto-detect it.
- LOG_DIR: This directory stores log files.
- BEACOND_BIN: Set this to the full path where you installed
beacond. The expression provided finds it in your $PATH. - BEACOND_DATA: Set this to where the consensus data and config should be kept.
- RETH_BIN or other chain client: Set this to the full path where you installed the chain client.
Step 3 - Fetch parameters
Thefetch-berachain-params.sh script downloads the key network parameters for the chain you have configured:
genesis.json, eth-genesis.json, and kzg-trusted-setup.json match the values above for your chosen network.
Step 4 - Set up Beacon-Kit
The scriptsetup-beacond.sh invokes beacond init and beacond jwt generate. This script:
- Runs
beacond initto create the filevar/beacond/config/priv_validator_key.json. This contains your node’s private key. Especially if you intend to become a validator, keep this file safe. It cannot be regenerated, and losing it means you will not be able to participate in the consensus process. - Runs
beacond jwt generateto create the filejwt.hex. This contains a secret shared between the consensus client and execution client so they can securely communicate. If you suspect it has been leaked, delete it then generate a new one withbeacond jwt generate -o $JWT_PATH. - Rewrites the
beacondconfiguration files to reflect settings chosen inenv.sh. - Places the mainnet parameters where Beacon-Kit expects them and shows you an important hash from the genesis file.
Step 5 - Set up the execution client
Thesetup-reth and setup-geth scripts create a runtime directory and configuration for their respective chain clients. The scripts configure the node with pruning settings according to the EL_ARCHIVE_NODE setting in env.sh.
If you’re using Bera-Reth, run setup-reth.sh. If you’re using Bera-Geth, run setup-geth.sh instead.
Here’s an example using setup-reth:
Step 6 - Fetch snapshots (optional)
Snapshots are collections of files from a node’s backend that represent its state at a specific time. Restoring a snapshot is much faster than syncing from the network, so this step can dramatically speed up your initial sync on a new node.Do this step before starting your clients (Step 8). If you’ve already started syncing, you’ll need to stop the clients, clean the data directories, then restore snapshots.
6a - Obtain snapshot
Berachain and the community offer snapshots for Mainnet and Bepolia. You can download snapshots at the following links.- Awesome Berachain Validators is a community-maintained list; all of them have great download speed.
-
Or, use the
fetch-berachain-snapshot.jsscript to download official Berachain snapshots. The script fetches the latest snapshots fromsnapshots.berachain.comand automatically downloads both the beacon-kit and execution layer snapshots matching your configuration.
--clientor-c: Execution client (rethorgeth, default:reth)--networkor-n: Network (mainnetortestnet, default:mainnet)--typeor-t: Snapshot type (prunedorarchive, default:pruned)--helpor-h: Show help message
6b - Stop clients
If you’ve already started your clients, shut downbeacond and your execution client now. Otherwise, skip to 6c.
6c - Clean existing chain data
To clean the Beacon Kit and reth data store:6d - Install Beacon-Kit snapshot
The snapshots distributed by Berachain are designed to be installed in the beacond home directory, which contains bothconfig and data:
6e - Install execution layer snapshot
Extract the execution layer snapshot. The example below usesreth (for geth, use var/geth/ or var/bera-geth/):
Step 7 - Fetch address book (optional)
Thebeacond address book contains a list of nodes to communicate with. Starting with one dramatically improves startup time.
Step 8 - Run both clients
Launch two terminal windows. In the first, run the consensus client:Step 9 - Testing your node (optional)
Now that your RPC is running, verify that the network is working by performing a few RPC requests.Check sync status
To check the sync status of the consensus layer, in another terminal run the following to retrieve the current block height from the consensus client:catching_up is set to true, it is still syncing.
EL block number
CL block number
Next steps
Your node is now running and syncing. For production deployments, see:- Production Checklist — Best practices for running nodes in production
- Monitoring — Set up monitoring and alerts for your node
- Become a Validator — Guide to becoming a validator on Berachain