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: Download Bera-Reth 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 with the genesis state
- 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 obtains copies of the genesis file and other configuration files.
Then we have setup- and run- scripts for 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_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: 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 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.sh script creates a runtime directory and configuration for the execution client. It configures the node with pruning settings according to 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:mainnetortestnet(default:mainnet; selects the snapshot index host as above)--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 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
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. Extracting into var/reth/ would place db/ next to genesis.json and would not match --datadir.
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