Running a Hyperledger Besu Node on the Ethereum Mainnet: Benefits, Requirements, and Setup

Contents

  • Current State of the Ethereum Network
  • The Benefits of Running a Hyperledger Besu Node
  • Hardware and Software Requirements
  • How to Run a Public Ethereum Besu Node
  • Getting Started and Contributing

Ethereum is an open source, public, permissionless peer-to-peer network of distributed nodes that send and receive transactions, validate those transactions and remotely execute smart contract's scripts.

These nodes are what make the Ethereum platform function and allow us to rely on a decentralized network of information.

Running a public node means participating in the Ethereum network by having your node do the work necessary to validate transactions and new blocks on the blockchain. You can run any mainnet Ethereum compatible client software on your node, including Besu.



Current State of the Ethereum Network

At the time of this article, there are approximately 7,200 running Ethereum nodes in the world. Of those, about 5000 are synced to mainnet. The rest are syncing and somewhat behind the latest best block in the blockchain.

Read "Ethereum by the Numbers" for a full snapshot of network activity.

The Benefits of Running a Hyperledger Besu Node

The benefits of running an Ethereum node are two-fold. On one hand, the ecosystem as a whole will benefit from having higher distribution and decentralization of the infrastructure itself. On the other hand, you might have personal reasons to run a node.

  • Ecosystem benefits
    • Further decentralize the Ethereum network by enabling more copies of the blockchain history for everyone to access.
    • Lower latency/increased diversity (in terms of which nodes people are able to consult).
  • Personal benefits
    • Blockchain data analysis on local machines instead of doing remote calls.
    • Sending your own transactions from a node you trust, and propagating it from there.
    • Developing purposes: if you're building your own dapp or service, you will certainly benefit from having your own node to run the dapp on while developing.

Reasons why you would choose to run a Hyperledger Besu node are also two-fold:

  • Network client variety
    • Helping the decentralization of the node-client share. The Ethereum network has lower risks of malfunctioning if the network is running on multiple clients, reducing risks of single points of failure. Historically, we've already seen the advantages of client diversity in the 2016 Devcon 2 Shanghai attack, where the network continued to function since the attack only affected a single client.
    • The Ethereum network currently has ~75% running on the same client software. Ideally, this should be more distributed and spread out among client software.
  • Besu-specific features
    • Tracing methods are now available in the Besu API, allowing you to request a transaction's ordered list of calls to other smart contracts and to replay a history of a transaction and every detail included in it, such as Opcode calls to the EVM.
    • Plugins are a reflection of Besu's internal modular design. They allow you to extend Besu's functionality and accessing additional data not available in the APIs or push data out to another third party application.
    • Monitoring on Besu is fairly straight-forward thanks to the Grafana/Prometheus integration. Use it to obtain metrics on your node performance and/or get logging data.

Hardware and Software Requirements

The hardware requirements for running a public mainnet node on Ethereum will depend on which client you choose. Besu will need at least 4GB of RAM and 750GB of hard disk space to run performantly. Storage will need to be SSDs or NVMe in order to keep up with the speeds needed to sync the chain.

There are a variety of node options that all have different requirements. Here is some approximate data for syncing to mainnet on different setups.

In terms of software requirements, Hyperledger Besu runs on Linux, MacOS, and Windows. It requires Java 11+ and some minor dependencies if building from source and testing.

Running a public Besu node is possible on several different hosting setups. The most common option for individual participants is running on an on-prem device such as a laptop, desktop computer, or server. However, cloud options like AWS or Azure are fully compatible with Besu. The main advantages of running on a cloud instance is the ease of setup, and the possibility of running and stopping instances remotely.

How to Run a Public Ethereum Besu Node

After installing Besu on your node, go through this checklist to make sure you know what you are setting up.

  • Which network do you want to participate in?
  • Do you want to be able to execute JSON-RPC calls on it?
  • Where do you want to store your blockchain data?
  • Do you want to monitor your node?
  • Do you want a full node, archival node, or pruned node?

The Besu options you need will depend on what usage you're giving your node. You can configure these options via command line arguments, environment variables, or configuration files. The following options show you how to run Besu with command line argument flags. Alternatively, read here for config file setup and environment variables.

Which network do you want to participate in?

If your goal is running a full, archival node, then no flags are necessary at all:

$ besu

Mainnet isn't the only public Ethereum network available. If you were planning on syncing another public network, choose a network from this list and use the --network flag.

--network=mainnet  # The main Ethereum network
--network=ropsten  # A PoW network similar to the current main Ethereum network
--network=rinkeby  # A PoA network using Clique
--network=goerli  # A PoA network using Clique
--network=dev  # A PoW network with a low difficulty to enable local CPU mining
--network=classic  # The main Ethereum Classic network
--network=mordor  # A PoW network
--network=kotti  # A PoA network using Clique

Do you want to be able to execute JSON-RPC calls on it?

For a full node, with an http port exposed, adding the --rpc-http-enabled flag will enable the RPC JsonRpcHttpService and allow you to send and request data from the Json-RPC endpoint. The default endpoint for this service is 127.0.0.1. Use --rpc-http-host=<new-host-ip> to edit the endpoint.

$ besu --rpc-http-enabled

Where do you want to store your blockchain data?

By default, Besu stores all blockchain data in the directory you installed Besu in, or ``/opt/besu/database` if using docker.

If you'd like to change this, use the data-path flag.

--data-path=/home/username/data/path/

For a fast-synced Besu node, add the --sync-mode=FAST flag. This will modify the way the blockchain's past data syncs on your storage device. For a comprehensive video of the differences between fast-sync and full sync, watch our video tutorial.

$ besu --sync-mode=FAST

Fast-synced node, with pruning, with an http port exposed:

$ besu --rpc-http-enabled --sync-mode=FAST --pruning-enabled=true

If you want to mine Ethereum using your node, then the miner-enabled flag is required. However, this type of usage is quite case-specific and requires tweaking and ensuring the miner is working properly. Review the Besu Command Line Options command line arguments for further options.

Getting Started and Contributing

These are some links in order to start your node running:

Want to contribute to the Besu project?

Hyperledger Besu is fully open source and only gets better with the help of the open source community and their contributions. If you want to help build Besu, check out our Contributing Guide or head over to our issues on our GitHub.