Setting Up a Node
caution
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 clientsPrysm 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 providerdanger
You cannot use a third-party provider for your execution client once the Ethereum merge goes live.
#
Running your own execution nodeAn 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:
- Using the Prysm installation script (Recommended)
- Using Docker
- Building from source with Bazel (Advanced)
tip
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:
- Linux
- Windows
- MacOS
- Arm64
Using Prysm.sh
./prysm.sh beacon-chain --http-web3provider=$HOME/Mainnet/geth.ipc
Using Bazel
bazel run //beacon-chain --config=release -- --http-web3provider=$HOME/Mainnet/geth.ipc
Using Prysm.bat
prysm.bat beacon-chain --http-web3provider=\\.\pipe\geth.ipc
Using Prysm.sh
./prysm.sh beacon-chain --http-web3provider=$HOME/Mainnet/geth.ipc
Using Bazel
bazel run //beacon-chain --config=release -- --http-web3provider=$HOME/Mainnet/geth.ipc
Using Prysm.sh
./prysm.sh 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 nodesIn 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 fileIf 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