Skip to content

Besu

Chapter 10: Besu - Enterprise Ethereum Client

Section titled “Chapter 10: Besu - Enterprise Ethereum Client”

Besu is an enterprise-grade Ethereum client developed by Hyperledger. Written in Java, it’s designed for organizations requiring permissioned networks, private transactions, and enterprise-level security features. Besu supports both public and private blockchain networks.


┌─────────────────────────────────────────────────────────────────────────────┐
│ BESU OVERVIEW │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ BESU CLIENT │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Public │ │ Permission │ │ Privacy │ │ │
│ │ │ Networks │ │ Networks │ │ (Private) │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Ethereum │ │ Consensus │ │ Standard │ │ │
│ │ │ Mainnet │ │ (IBFT) │ │ EVM │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ Key Characteristics: │
│ ━━━━━━━━━━━━━━━━━━━━━ │
│ • Open source (Apache 2.0) │
│ • Written in Java │
│ • Enterprise-focused │
│ • Supports public and private networks │
│ • Built-in permissioning │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
FeatureBesuGethErigonNethermind
LanguageJavaGoGoC#
LicenseApache 2.0LGPLGPLGPL
Enterprise
PrivacyLimited
Permissioning
Snap Sync

Terminal window
# Install Java (required)
# Ubuntu/Debian
sudo apt update
sudo apt install openjdk-17-jdk
# Verify Java
java --version
# Check memory
free -h
Terminal window
# Download latest release
wget https://github.com/hyperledger/besu/releases/download/23.10.2/besu-23.10.2.tar.gz
# Extract
tar -xzf besu-23.10.2.tar.gz
# Create symbolic link
sudo ln -s /path/to/besu-23.10.2/bin/besu /usr/local/bin/besu
# Verify installation
besu --version
Terminal window
# Pull image
docker pull hyperledger/besu:latest
# Run container
docker run -d \
--name besu-node \
-p 30303:30303 \
-p 8545:8545 \
-v /data/besu:/data \
hyperledger/besu:latest \
--network=mainnet \
--data-path=/data \
--rpc-http-enabled=true
# Docker Compose
cat > docker-compose.yml << EOF
version: '3.8'
services:
besu:
image: hyperledger/besu:latest
container_name: besu-node
ports:
- "30303:30303"
- "8545:8545"
volumes:
- ./data:/data
environment:
- BESU_OPTS=-Xmx2g
command: [
"--network=mainnet",
"--data-path=/data",
"--rpc-http-enabled=true",
"--rpc-http-cors-origins=*",
"--host-allowlist=*"
]
EOF

Terminal window
# Start on Ethereum Mainnet
besu --network=mainnet
# Start on Goerli Testnet
besu --network=goerli
# Start on Sepolia Testnet
besu --network=sepolia
Terminal window
# Full-featured RPC node
besu \
--network=mainnet \
--data-path=/data/besu \
--rpc-http-enabled=true \
--rpc-http-host=0.0.0.0 \
--rpc-http-port=8545 \
--rpc-http-api=ETH,NET,WEB3,DEBUG,TRACE \
--rpc-http-cors-origins="*" \
--ws-enabled=true \
--ws-host=0.0.0.0 \
--ws-port=8546 \
--ws-api=ETH,NET,WEB3 \
--p2p-enabled=true \
--p2p-host=0.0.0.0 \
--p2p-port=30303 \
--max-peers=50 \
--metrics-enabled=true \
--metrics-host=0.0.0.0 \
--metrics-port=9545
config.yaml
network: "mainnet"
data-path: "/data/besu"
rpc-http:
enabled: true
host: "0.0.0.0"
port: 8545
apis: ["ETH","NET","WEB3","DEBUG","TRACE"]
cors-allowed-origins: ["*"]
ws:
enabled: true
host: "0.0.0.0"
port: 8546
p2p:
enabled: true
host: "0.0.0.0"
port: 30303
metrics:
enabled: true
host: "0.0.0.0"
port: 9545
# Sync mode
sync-mode: "FAST"
# Genesis
# Besu uses default genesis for known networks

┌─────────────────────────────────────────────────────────────────┐
│ BESU PERMISSIONING │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Besu provides three types of permissioning: │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ONCHAIN PERMISSIONING │ │
│ │ ━━━━━━━━━━━━━━━━━━━━━ │ │
│ │ - Smart contract-based │ │
│ │ - Network permissioning contract │ │
│ │ - Node permissioning contract │ │
│ │ - Account permissioning contract │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ OFFCHAIN PERMISSIONING │ │
│ │ ━━━━━━━━━━━━━━━━━━━━ │ │
│ │ - Local permission file │ │
│ │ - /etc/besu/permissions_config.toml │ │
│ │ - Immediate effect without onchain transactions │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
Terminal window
# Enable onchain permissioning
besu \
--permissions-nodes-enabled=true \
--permissions-accounts-enabled=true \
--permissions-contracts-enabled=true \
--permissions-contract-address=0x000... \
--permissions-nodes-contract-address=0x000...
# Enable offchain permissioning
besu \
--permissions-nodes-enabled=true \
--permissions-nodes-config-file=/etc/besu/nodes-permissions.json
# nodes-permissions.json
{
"nodes": [
{
"enode": "enode://...",
"nodeId": "..."
}
]
}
Terminal window
# Enable privacy
besu \
--privacy-enabled=true \
--privacy-marker-transaction-signing-key-file=/path/to/key \
--privacy-public-key-file=/path/to/public-key
# Private transaction groups
besu \
--privacy-group-type=ONCHAIN \
--priva-cy-enabled=true

Terminal window
# Enable metrics
besu \
--metrics-enabled=true \
--metrics-host=0.0.0.0 \
--metrics-port=9545
# Important metrics to monitor
# - besu_blockchain_height
# - besu_sync_combined_peers
# - besu_transaction_pool_transactions
# - besu_vm_execution_time
# - besu_process_memory
Terminal window
# Check sync status
curl -X POST http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'
# Get block number
curl -X POST http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
# Get peers
curl -X POST http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}'

QuestionAnswer
What is Besu?Enterprise Ethereum client by Hyperledger, written in Java
What makes Besu enterprise-friendly?Permissioning, privacy features, enterprise support
What is Besu’s consensus mechanism?IBFT2 (Istanbul Byzantine Fault Tolerant)
Does Besu support snap sync?No, uses fast sync instead
What programming language is Besu written in?Java

  • Besu is an enterprise-grade Ethereum client
  • Excellent for permissioned networks
  • Built-in permissioning and privacy features
  • Supports both public and private networks
  • Good choice for enterprise use cases

In Chapter 11: Reth - Rust Ethereum Client, we’ll explore the Rust-based Ethereum client.


Last Updated: 2026-02-20