Besu
Chapter 10: Besu - Enterprise Ethereum Client
Section titled “Chapter 10: Besu - Enterprise Ethereum Client”Overview
Section titled “Overview”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.
10.1 What is Besu?
Section titled “10.1 What is Besu?”┌─────────────────────────────────────────────────────────────────────────────┐│ 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 ││ │└─────────────────────────────────────────────────────────────────────────────┘Comparison with Other Clients
Section titled “Comparison with Other Clients”| Feature | Besu | Geth | Erigon | Nethermind |
|---|---|---|---|---|
| Language | Java | Go | Go | C# |
| License | Apache 2.0 | LGPL | GPL | GPL |
| Enterprise | ✅ | ❌ | ❌ | ✅ |
| Privacy | ✅ | Limited | ❌ | ✅ |
| Permissioning | ✅ | ❌ | ❌ | ❌ |
| Snap Sync | ❌ | ✅ | ✅ | ✅ |
10.2 Installation
Section titled “10.2 Installation”Prerequisites
Section titled “Prerequisites”# Install Java (required)# Ubuntu/Debiansudo apt updatesudo apt install openjdk-17-jdk
# Verify Javajava --version
# Check memoryfree -hBinary Installation
Section titled “Binary Installation”# Download latest releasewget https://github.com/hyperledger/besu/releases/download/23.10.2/besu-23.10.2.tar.gz
# Extracttar -xzf besu-23.10.2.tar.gz
# Create symbolic linksudo ln -s /path/to/besu-23.10.2/bin/besu /usr/local/bin/besu
# Verify installationbesu --versionDocker Installation
Section titled “Docker Installation”# Pull imagedocker pull hyperledger/besu:latest
# Run containerdocker 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 Composecat > docker-compose.yml << EOFversion: '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=*" ]EOF10.3 Running Besu
Section titled “10.3 Running Besu”Quick Start
Section titled “Quick Start”# Start on Ethereum Mainnetbesu --network=mainnet
# Start on Goerli Testnetbesu --network=goerli
# Start on Sepolia Testnetbesu --network=sepoliaRPC Node Configuration
Section titled “RPC Node Configuration”# Full-featured RPC nodebesu \ --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=9545Configuration File
Section titled “Configuration File”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 modesync-mode: "FAST"
# Genesis# Besu uses default genesis for known networks10.4 Key Enterprise Features
Section titled “10.4 Key Enterprise Features”Permissioning
Section titled “Permissioning”┌─────────────────────────────────────────────────────────────────┐│ 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 │ ││ └─────────────────────────────────────────────────────────┘ ││ │└─────────────────────────────────────────────────────────────────┘Permissioning Configuration
Section titled “Permissioning Configuration”# Enable onchain permissioningbesu \ --permissions-nodes-enabled=true \ --permissions-accounts-enabled=true \ --permissions-contracts-enabled=true \ --permissions-contract-address=0x000... \ --permissions-nodes-contract-address=0x000...
# Enable offchain permissioningbesu \ --permissions-nodes-enabled=true \ --permissions-nodes-config-file=/etc/besu/nodes-permissions.json
# nodes-permissions.json{ "nodes": [ { "enode": "enode://...", "nodeId": "..." } ]}Privacy Features
Section titled “Privacy Features”# Enable privacybesu \ --privacy-enabled=true \ --privacy-marker-transaction-signing-key-file=/path/to/key \ --privacy-public-key-file=/path/to/public-key
# Private transaction groupsbesu \ --privacy-group-type=ONCHAIN \ --priva-cy-enabled=true10.5 Monitoring and Management
Section titled “10.5 Monitoring and Management”Prometheus Metrics
Section titled “Prometheus Metrics”# Enable metricsbesu \ --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_memoryJSON-RPC API
Section titled “JSON-RPC API”# Check sync statuscurl -X POST http://localhost:8545 \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'
# Get block numbercurl -X POST http://localhost:8545 \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
# Get peerscurl -X POST http://localhost:8545 \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}'10.6 Interview Questions
Section titled “10.6 Interview Questions”| Question | Answer |
|---|---|
| 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 |
Summary
Section titled “Summary”- 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
Next Chapter
Section titled “Next Chapter”In Chapter 11: Reth - Rust Ethereum Client, we’ll explore the Rust-based Ethereum client.
Last Updated: 2026-02-20