Skip to main content

Setting Up a Node


Running an execution node alongside Prysm will be required at the time of the Ethereum proof-of-stake transition

Ethereum proof-of-stake is a massive upgrade to the Ethereum blockchain, which will start off as a proof of stake chain that runs in parallel to the current proof of work chain. In order to become a validator in Ethereum proof-of-stake, users have to do a one-way "burn" of their ETH into a smart contract on the proof of work chain. The way the system works is through two pieces of software known as consensus and execution clients. Consensus clients are software, such as Prysm, that run proof-of-stake consensus. These clients communicate with execution clients, such as go-ethereum, which process smart contracts, transactions, and execute EVM code. Both pieces of software are needed to run Ethereum.

The instructions below show information about which execution clients can be run with Prysm, and how to set one up yourself.

Supported clients#

Prysm nodes can use any sort of Ethereum execution node as long as it supports reading smart contract logs. Users can choose one of the following execution clients:

Using a third-party provider#


You cannot use a third-party provider for your execution client once the Ethereum merge goes live.

Running your own execution node#

An execution node is required in order to run Prysm after the Ethereum merge. We'll be giving an example of running a go-ethereum node on mainnet.

First, install go-ethereum here.

geth --datadir="$HOME/Mainnet" --http

You should wait for your node to sync and then will be able to access its endpoint via http://localhost:8545 by default.

Next, in a separate terminal window, you can run a Prysm beacon node according to our installation instructions for your operating system:


By default, Prysm will try to connect to an execution node via http at http://localhost:8545 if an endpoint is not configured via command-line flags. For HTTP connections, execution nodes also require authentication. You can find instructions on setting up authentication here.

then connect to your execution node with:


./ beacon-chain --http-web3provider=$HOME/Mainnet/geth.ipc

Using Bazel

bazel run //beacon-chain --config=release -- --http-web3provider=$HOME/Mainnet/geth.ipc

Adding fallback execution nodes#

In case your execution node unexpectedly goes down, you can specify a list of fallback eth1 nodes that your beacon node can always reach out to. To use this functionality, you can add the following flag to the beacon node:

Using regular flags#

--http-web3provider=<YOUR MAIN ENDPOINT> --fallback-web3provider=<PROVIDER 1> --fallback-web3provider=<PROVIDER 2>

You can specify your main provider and as many --fallback-web3provider as you need. Here's what a real setup could look like:

--http-web3provider=http://localhost:8545 --fallback-web3provider=http://localhost:8546

Where your main provider is your local go-ethereum node running on port 8545, then you can fallback to another provider if needed.

Prysm will automatically use your main provider always

In case your main provider comes back from the dead, Prysm will detect that and switch over to it for primary usage automatically. This will save you any costs on your fallback providers.

Using a config file#

If you are running Prysm and specifying command line flags via a config.yaml file, you can do the following:

http-web3provider: http://localhost:8545fallback-web3provider:- http://localhost:8546