Prerequisites
Hardware
| Component | Requirement |
|---|---|
| OS | Linux AMD64, Linux ARM64 |
| CPU / RAM | 4 Physical Cores, 32GB RAM |
| Storage | 1TB minimum (more for long-term); Local SSD or on-instance storage preferred; network volumes require at least 1000 IOPS |
Software
Check EVM Execution Clients for the current recommended Beacon Kit and Bera-Reth releases for your network, then download each binary from its GitHub release page:- BeaconKit — on the Beacon Kit releases page, open the tagged release for your network and download the build for your OS and architecture. Make it executable and place it in your PATH (e.g.,
~/.local/bin/). - Bera-Reth — on the Bera-Reth releases page, open the matching tagged release and download the build 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 (
mainnetorbepolia) and node identity - Fetch parameters — download consensus-layer genesis and network configuration
- Set up BeaconKit — initialize the consensus client and generate keys
- Set up execution client — initialize the Reth datadir for your chain
- Fetch snapshots (optional) — restore snapshots to speed up initial sync
- 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 downloads consensus-layer configuration files.
setup- and run- scripts start the execution client and beacond.
Step 2 - Configure environment
Editenv.sh to set your node’s configuration. Open the file and modify these values:
env.sh
- CHAIN: Set to
mainnetorbepolia. - 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: Set this to the full path where you installed
bera-reth. The expression provided finds it in your $PATH.
Step 3 - Fetch parameters
Thefetch-berachain-params.sh script downloads consensus-layer network parameters for the chain you configured:
genesis.json and kzg-trusted-setup.json match the values above for your chosen network.
Step 4 - Set up BeaconKit
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 network parameters where BeaconKit expects them and shows you an important hash from the genesis file.
Step 5 - Set up the execution client
Thesetup-reth.sh script creates the Reth datadir and initializes it with --chain set to your configured network (mainnet or bepolia). Pruning follows the EL_ARCHIVE_NODE setting in env.sh.
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 7). If you’ve already started syncing, you’ll
need to stop the clients, clean the data directories, then restore snapshots.
6a - Obtain snapshots
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 — already on disk from Step 1 — downloads the latest official Berachain snapshots for both the beacon-kit consensus layer and the execution layer. It reads the snapshot index atsnapshots.berachain.com, picks the most recent files matching your options, and saves them to adownloads/directory.
--networkor-n:mainnetorbepolia(default:mainnet)--typeor-t:prunedorarchive(default:pruned)--outputor-o: Download directory (default:downloadsin the current working directory)--el-client: Execution snapshot type prefix in the CSV (default:reth)--beacon-only: Beacon-kit snapshot only--execution-onlyor--el-only: Execution-layer snapshot only--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 BeaconKit 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
Official Reth snapshot archives listdb/, rocksdb/, and blobstore/ at the root of the tarball (not under a data/ directory). Your bera-reth node --datadir must be the directory that contains those folders. In this layout that is var/reth/data (see setup-reth.sh / env.sh), so pass -C var/reth/data to tar.
Step 7 - Run both clients
Launch two terminal windows. In the first, run the consensus client:Step 8 - 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