ChainScore Labs

Building on Hyperledger Besu

A comprehensive developer's guide to the enterprise-grade Ethereum client

Learn how to leverage Hyperledger Besu to build secure, scalable, and interoperable blockchain applications for enterprise use cases.

What is Hyperledger Besu?

An open-source, enterprise-focused Ethereum client

🔗

Ethereum Compatibility

Hyperledger Besu is an Ethereum client, meaning it implements the Ethereum protocol and can connect to the Ethereum mainnet, testnets, and private networks. It supports standard Ethereum APIs and tools, making it easy to migrate existing Ethereum applications.

🏢

Why Build on Besu?

Developers choose Besu for its enterprise features, including permissioning, privacy, and support for multiple consensus algorithms. It's written in Java, a widely used enterprise language, and is designed for performance and security.

🏗️

Architecture & Components

Key components include the Ethereum Virtual Machine (EVM), consensus algorithms (IBFT 2.0, QBFT, Clique, Ethash), networking (P2P), storage (RocksDB), and API interfaces (JSON-RPC, GraphQL, WebSocket). Besu is modular and designed for extensibility.

🤝

Open Source & Community

Besu is an open-source project under the Hyperledger umbrella, governed by a strong community. This ensures transparency, collaboration, and continuous development. Contributions and feedback are welcome.

Understanding Besu's Architecture

The technical components that make up Hyperledger Besu

Besu implements the EVM, a stack-based virtual machine that executes Ethereum smart contracts. The EVM is responsible for processing transactions and updating the state of the blockchain. Besu's EVM is compatible with standard Ethereum bytecode.

Installation and Setup

Getting started with Hyperledger Besu

📋

Prerequisites

Before installing Besu, you need: *Java 11+ (OpenJDK or Oracle JDK).* *Operating System:* Linux, macOS, or Windows. *Sufficient RAM and storage (depending on network size and usage).

⬇️

Binary Distribution

The easiest way to install Besu is to download the binary distribution from the official releases page. Extract the archive and run the `besu` executable. This method is suitable for most users.

🐳

Docker Image

Besu provides official Docker images, making it easy to run Besu in a containerized environment. Use `docker pull hyperledger/besu` to get the latest image. Docker is ideal for development, testing, and deployment.

🛠️

Building from Source

You can build Besu from source using Gradle. Clone the GitHub repository and run `./gradlew build`. This is useful for developers who want to contribute to Besu or customize the build.

⚙️

Configuration File

Besu uses a configuration file (typically in TOML format) to specify network settings, consensus algorithm, API endpoints, and other options. You can customize the configuration file to suit your specific needs. A sample configuration file is provided with the Besu distribution.

📄

Genesis File

For private networks, you need a genesis file (in JSON format) that defines the initial state of the blockchain. The genesis file specifies the initial balances, the consensus algorithm, and other network parameters. You can create a custom genesis file or use a pre-configured one.

▶️

Running Besu

To start Besu, run the `besu` executable with the appropriate command-line options or by specifying a configuration file. For example: `besu --config-file=config.toml`. Monitor the logs for any errors or warnings.

🌐

Connecting to a Network

Besu can connect to the Ethereum mainnet, testnets (e.g., Goerli, Ropsten), or private networks. The network is specified using the `--network` option or in the configuration file. For private networks, you'll need to configure the genesis file and network settings.

Network Configuration

Setting up and managing Besu networks

🌐

Public Networks

Besu can connect to public Ethereum networks, including: *Mainnet:* The production Ethereum network. *Goerli:* A Proof-of-Authority testnet. *Ropsten:* A Proof-of-Work testnet (deprecated). *Sepolia:* Proof of Stake testnet. Connecting to a public network requires no special configuration beyond specifying the network ID.

🔒

Private Networks

Besu is well-suited for creating and managing private Ethereum networks. Private networks are isolated from the public Ethereum network and are typically used for development, testing, or enterprise deployments. Setting up a private network requires configuring a genesis file and specifying the network settings.

📄

Genesis File Configuration

The genesis file (in JSON format) defines the initial state of a private network. Key parameters include: *`chainId`:* A unique identifier for the network. *`config`:* Contains consensus algorithm settings (e.g., `ibft2`, `qbft`, `clique`). *`alloc`:* Defines initial account balances. *`extraData`:* Used by consensus algorithms (e.g., validator addresses for IBFT 2.0).

📍

Bootnodes

Bootnodes are used for node discovery in a P2P network. They provide a way for new nodes to find other nodes in the network. You can specify bootnodes in the configuration file or using the `--bootnodes` command-line option. In private networks, you typically configure at least one bootnode.

🆔

Network ID

The network ID is a unique identifier for a blockchain network. It prevents nodes from accidentally connecting to the wrong network. The network ID is specified in the genesis file (`chainId`) and in the Besu configuration.

📌

Static Nodes

You can configure static nodes, which are nodes that Besu will always connect to. This is useful for ensuring that a node remains connected to specific peers. Static nodes are specified in a `static-nodes.json` file.

🤝

Connecting Nodes

To connect nodes in a private network, ensure that: *They use the same genesis file.* *They have the same network ID.* *They can discover each other (via bootnodes or static nodes).* *Firewall rules allow P2P communication (typically on port 30303).*

🏢

Consortium Networks

Besu is often used to create consortium networks, where multiple organizations collaborate on a shared blockchain. Consortium networks typically use permissioning and private transactions to control access and protect sensitive data. Consensus algorithms like IBFT 2.0 or QBFT are well-suited for consortium networks.

Consensus Mechanisms

Understanding and configuring consensus in Besu

IBFT 2.0 (Istanbul Byzantine Fault Tolerant 2.0) is a consensus algorithm designed for private networks. It provides immediate finality, meaning that transactions are considered final as soon as they are included in a block. IBFT 2.0 requires a known set of validators, and it can tolerate up to 1/3 of faulty validators. It's a good choice for consortium networks where performance and finality are important.

Smart Contract Development

Building with Solidity and deploying on Besu

Hyperledger Besu, being an Ethereum client, primarily supports Solidity for smart contract development. Solidity is a high-level, object-oriented language specifically designed for writing smart contracts on the Ethereum Virtual Machine (EVM). It's the most widely used language for Ethereum development.

Besu API

Interacting with the Besu node through various APIs

📡

JSON-RPC API

Besu implements the standard Ethereum JSON-RPC API, allowing you to interact with the node using HTTP or WebSockets. This API provides methods for: *Querying blockchain data (blocks, transactions, accounts).* *Submitting transactions.* *Managing accounts.* *Controlling the node (e.g., starting and stopping mining). The JSON-RPC API is the most common way to interact with Besu programmatically.

🔎

GraphQL API

Besu offers a GraphQL API, providing a more flexible and efficient way to query blockchain data. GraphQL allows you to specify exactly the data you need, reducing over-fetching and improving performance. The GraphQL API is particularly useful for building complex applications that require specific data from the blockchain.

WebSocket API

The WebSocket API provides a real-time communication channel between your application and the Besu node. You can subscribe to events, such as new blocks or pending transactions, and receive updates as they happen. The WebSocket API is ideal for applications that need to react to blockchain events in real time.

⚙️

Admin API

The Admin API provides methods for managing the Besu node, including: *Adding and removing peers.* *Controlling mining.* *Retrieving node information.* *Managing permissions (if enabled). The Admin API is typically used for administrative tasks and requires appropriate authorization.

🐞

Debug API

The Debug API provides methods for debugging and tracing transactions. You can use it to: *Trace the execution of a transaction and inspect the EVM state.* *Profile gas usage.* *Inspect the call stack.* The Debug API is useful for understanding the behavior of smart contracts and identifying performance bottlenecks.

📚

Web3.js and Ethers.js

You can use popular JavaScript libraries like Web3.js and Ethers.js to interact with Besu's JSON-RPC API. These libraries provide convenient abstractions for working with Ethereum and simplify common tasks like sending transactions, interacting with smart contracts, and managing accounts.

Enabling APIs

APIs are enabled through the Besu configuration file or command-line options. You can specify which APIs to enable and which ports they should listen on. For security reasons, it's recommended to restrict access to sensitive APIs (e.g., Admin API) to authorized users or applications.

📖

API Documentation

Refer to the official Besu documentation for a complete list of API methods and their parameters. The documentation provides detailed information on how to use each API and includes examples.

Development Tools

Essential tools for building on Hyperledger Besu

🛠️

Truffle Suite

Truffle is a popular development framework for Ethereum that provides tools for compiling, testing, and deploying smart contracts. It integrates well with Besu and simplifies the development workflow. Truffle includes Ganache, a personal blockchain for development and testing.

🏗️

Hardhat

Hardhat is another widely used development environment for Ethereum. It offers similar features to Truffle, including compiling, testing, and deploying contracts. Hardhat is known for its flexibility and extensibility.

🌐

Remix IDE

Remix is a web-based IDE for writing, compiling, deploying, and debugging Solidity smart contracts. It's a great tool for beginners and for quickly prototyping contracts. Remix can connect to Besu nodes using JSON-RPC.

📚

Web3.js / Ethers.js

These are popular JavaScript libraries for interacting with Ethereum nodes, including Besu. They provide convenient abstractions for sending transactions, interacting with smart contracts, and managing accounts. Web3.js and Ethers.js are essential for building client-side applications that interact with Besu.

💻

Visual Studio Code

Visual Studio Code is a popular code editor with extensions for Solidity development. These extensions provide syntax highlighting, code completion, debugging, and other features that improve developer productivity. It can be integrated with Truffle, Hardhat, and other tools.

⛓️

Ganache

Ganache is a personal blockchain for Ethereum development, part of the Truffle Suite. It simulates an Ethereum network and allows you to quickly deploy and test smart contracts without needing to connect to a public network or a Besu node. Ganache provides a user-friendly interface for managing accounts and inspecting transactions.

🔑

EthSigner

EthSigner is a transaction signing application that can be used with Besu. It allows you to securely manage your private keys and sign transactions. EthSigner can be used in conjunction with Web3.js or Ethers.js to build applications that require transaction signing.

🔎

Block Explorers

Block explorers (e.g., Etherscan for public networks, or custom explorers for private networks) allow you to view transactions, blocks, and accounts on the blockchain. They are useful for debugging and understanding the state of the network. You can build your own block explorer using tools like BlockScout.

Testing & Deployment

Best practices for validating and launching Besu applications

Unit tests verify the behavior of individual components of your application, typically smart contract functions. Development frameworks like Truffle and Hardhat provide testing frameworks (e.g., Mocha, Chai) for writing and running unit tests. You can use mock objects and simulated data to test your contracts in isolation.

Privacy Features

Implementing private transactions with Orion and Besu

🔒

Private Transactions

Besu supports private transactions, which allow you to keep the transaction payload (data and smart contract code) confidential between a subset of participants. Private transactions are not visible on the public blockchain, ensuring data privacy.

🔑

Orion

Orion is a private transaction manager that integrates with Besu to enable private transactions. It handles the encryption, decryption, and distribution of private transaction payloads. Orion uses Tessera for key management and encryption.

👥

Privacy Groups

Private transactions are sent to *privacy groups*, which are sets of participants who can view and execute the transaction. A privacy group is identified by a unique ID. Only members of the privacy group can access the transaction data.

📦

Off-Chain Data Storage

The payload of a private transaction is not stored on the public blockchain. Instead, it is stored off-chain by the Orion nodes of the participants in the privacy group. The blockchain only stores a hash of the encrypted payload, which serves as proof of the transaction.

📌

Privacy Marker Transaction

When a private transaction is submitted, Besu creates a *privacy marker transaction* on the public blockchain. This marker transaction contains a hash of the encrypted payload and identifies the privacy group. The marker transaction allows other nodes to track the state of private contracts.

⚙️

Configuring Besu and Orion

To use private transactions, you need to: *Install and configure Orion.* *Configure Besu to connect to Orion.* *Use the `privacy` API methods (e.g., `eth_sendPrivateTransaction`) to send private transactions.* The Besu and Orion documentation provides detailed instructions on configuration.

💻

Developing with Privacy

When developing applications with private transactions, you need to: *Identify which data needs to be private.* *Define privacy groups for your transactions.* *Use the `privacy` API methods in your client application (e.g., Web3.js, Ethers.js) to send private transactions.* *Consider the implications of off-chain data storage for your application's architecture.*

🏢

Use Cases

Private transactions are useful for a variety of enterprise use cases, such as: *Supply chain management:* Keeping track of sensitive product information. *Financial transactions:* Protecting the details of trades and settlements. *Healthcare:* Sharing patient data securely between authorized providers. *Identity management:* Protecting personally identifiable information.

Permissions Management

Controlling access to the Besu network

⛓️

On-Chain Permissioning

Besu supports on-chain permissioning, where access control rules are managed by smart contracts. This allows for dynamic and decentralized management of permissions. You can define rules for: *Adding and removing nodes.* *Restricting access to specific accounts.* *Controlling the ability to deploy and execute smart contracts.*

⚙️

Local Permissioning

Besu also supports local permissioning, where access control rules are defined in configuration files on each node. This allows for centralized management of permissions. You can use local permissioning to: *Specify a list of allowed nodes (enode URLs).* *Restrict access to specific RPC methods.* *Control which accounts can connect to the node.

🌐

Node Permissioning

Node permissioning controls which nodes can connect to the network. It's typically used in private or consortium networks to ensure that only authorized nodes participate. You can use on-chain smart contracts or local configuration files to manage node permissions.

👤

Account Permissioning

Account permissioning controls which accounts can perform actions on the network, such as deploying smart contracts or sending transactions. You can use on-chain smart contracts to define rules for account permissions, allowing for fine-grained control over access.

📜

Permissioning Smart Contracts

For on-chain permissioning, you typically deploy one or more smart contracts that manage the permissioning rules. These contracts define functions for adding, removing, and checking permissions. The Besu documentation provides examples of permissioning smart contracts.

⚙️

Permissioning Configuration

For local permissioning, you use configuration files (e.g., `permissions_config.toml`) to specify the rules. The configuration file defines allowed nodes, accounts, and RPC methods. The Besu documentation provides details on the configuration file format.

Combining Permissioning Models

You can combine on-chain and local permissioning models to achieve different levels of control. For example, you might use on-chain permissioning for dynamic management of node permissions and local permissioning for restricting access to specific RPC methods.

🏢

Use Cases

Permissioning is crucial for enterprise use cases where access control is required, such as: *Consortium networks:* Ensuring that only authorized organizations can join the network. *Private networks:* Restricting access to sensitive data and operations. *Regulated environments:* Complying with access control requirements.

Monitoring and Logging

Tracking the health and performance of your Besu node

📝

Logging

Besu provides detailed logging capabilities, allowing you to track the node's activity and diagnose issues. You can configure the logging level (e.g., DEBUG, INFO, WARN, ERROR) and the output destination (e.g., console, file). The logs provide information about block processing, transaction processing, networking, and other node operations.

📊

Metrics

Besu exposes a variety of metrics that can be used to monitor the node's performance and health. These metrics include: *Block height.* *Number of peers.* *Transaction pool size.* *Gas price.* *CPU usage.* *Memory usage.* You can use monitoring tools like Prometheus and Grafana to collect and visualize these metrics.

📈

Prometheus Integration

Besu integrates with Prometheus, a popular open-source monitoring system. Besu exposes a Prometheus endpoint that provides metrics in a format that Prometheus can understand. You can configure Prometheus to scrape the Besu metrics and store them for analysis and visualization.

📉

Grafana Integration

Grafana is a data visualization and dashboarding tool that can be used to create dashboards for Besu metrics. You can use Grafana to visualize the metrics collected by Prometheus and create alerts based on specific conditions. Grafana dashboards provide a real-time view of the Besu node's performance and health.

📡

JSON-RPC Monitoring

You can use Besu's JSON-RPC API to query node information and monitor its status. For example, you can use the `eth_blockNumber` method to get the current block height or the `net_peerCount` method to get the number of connected peers. This allows you to build custom monitoring scripts or integrate Besu with other monitoring tools.

🔔

Alerting

You can configure alerts based on Besu metrics to notify you of potential issues. For example, you can set up alerts for: *High CPU usage.* *Low disk space.* *Low peer count.* *Stalled block production.* Alerting helps you identify and address problems proactively.

🔍

Log Analysis

Analyzing Besu's logs can help you identify and troubleshoot issues. You can use log analysis tools (e.g., ELK stack, Splunk) to collect, process, and analyze the logs. Log analysis can help you identify patterns, detect anomalies, and understand the root cause of problems.

🔥

Tracing

Besu provides a tracing API (using `debug_traceTransaction`) to inspect the execution of individual transactions. Traces provide detailed information about the EVM operations performed, gas usage, and state changes, making it helpful to identify the cause of transaction failures or unexpected behavior. Tracing is essential for debugging smart contract execution.

Security Best Practices

Protecting your Besu node and applications

⬆️

Keep Besu Updated

Regularly update your Besu node to the latest version. New releases often include security patches and bug fixes that address potential vulnerabilities. Subscribe to the Besu security announcements to stay informed about security updates.

🔑

Secure Your Private Keys

Protect your private keys carefully. Private keys are used to sign transactions and access your accounts. Never share your private keys with anyone. Use secure key management solutions, such as hardware wallets or key management services. Avoid storing private keys in plain text.

🔒

Restrict RPC Access

Restrict access to Besu's RPC APIs, especially the Admin API. Use firewall rules to allow access only from trusted IP addresses or applications. Disable unnecessary RPC methods. Use authentication and authorization mechanisms if needed.

🔐

Use a Strong Password

If you use a password to protect your private keys or access the Besu node, use a strong and unique password. A strong password should be long, complex, and difficult to guess. Avoid using common passwords or passwords that you use for other accounts.

👀

Monitor Your Node

Regularly monitor your Besu node for any unusual activity or suspicious behavior. Use monitoring tools (e.g., Prometheus, Grafana) to track key metrics and set up alerts for potential issues. Review the logs for any errors or warnings.

🧱

Use a Firewall

Use a firewall to protect your Besu node from unauthorized access. Configure the firewall to allow only necessary inbound and outbound traffic. Block unnecessary ports and protocols. Restrict access to the P2P port (typically 30303) to trusted nodes.

🛡️

Secure Your Operating System

Keep your operating system and other software up to date with the latest security patches. Use a secure operating system configuration. Follow security best practices for your operating system.

📜

Smart Contract Security

When developing smart contracts, follow secure coding practices. Validate all inputs, handle errors properly, and avoid common vulnerabilities (e.g., reentrancy, integer overflows). Thoroughly test your smart contracts and consider conducting security audits.

🔄

Use a Reverse Proxy

Consider using a reverse proxy (like Nginx or Apache) in front of your Besu node. This adds another layer of security, can handle TLS/SSL encryption, and can provide load balancing if you have multiple Besu nodes.

Real-World Examples

Use cases and deployments of Hyperledger Besu

📦

Supply Chain Management

Besu is being used in supply chain management solutions to track goods and materials as they move through the supply chain. Private transactions can be used to protect sensitive information, such as pricing and inventory levels. Permissioning ensures that only authorized parties can update the supply chain data.

💰

Financial Services

Besu is used in financial services applications, such as asset tokenization, digital identity, and payments. Private transactions can be used to protect transaction details, and permissioning ensures regulatory compliance. Besu's Ethereum compatibility allows for integration with existing financial infrastructure.

Energy Sector

Besu is used in the energy sector for applications such as energy trading, carbon credit tracking, and renewable energy certificates. Permissioning and private transactions are crucial for protecting sensitive energy data. Besu's scalability and performance make it suitable for handling large volumes of energy transactions.

🏛️

Government and Public Sector

Besu is being used in government and public sector applications, such as digital identity, voting systems, and land registries. Permissioning and private transactions are essential for protecting sensitive government data and ensuring the integrity of public records.

⚕️

Healthcare

Besu can enable sharing of patient records between healthcare providers while keeping the patient data private using private transactions.

🏢

Consortium Networks

Besu is often used to build consortium networks, where multiple organizations collaborate on a shared blockchain. Examples include: *The Energy Web Foundation:* A consortium of energy companies using Besu for decentralized energy solutions. *Covantis*: A consortium focusing on agricultural commodity trading. *LACChain:* A regional blockchain network in Latin America and the Caribbean.

Future of Besu

Upcoming developments and roadmap for the project

The Besu roadmap includes ongoing development in areas such as: *Performance and Scalability:* Improving the performance and scalability of the Besu client, including optimizations to the EVM, networking, and storage. *Ethereum Compatibility:* Keeping up with the latest Ethereum upgrades and EIPs (Ethereum Improvement Proposals). *Consensus Algorithms:* Enhancing existing consensus algorithms and potentially adding support for new ones. *Privacy:* Improving privacy features and exploring new privacy technologies. *Developer Experience:* Enhancing the developer tools and documentation to make it easier to build on Besu.* Security Features:

Frequently Asked Questions

Common questions about developing with Hyperledger Besu

Ready to Build on Hyperledger Besu?

Take the next steps in your enterprise Ethereum development journey