Skip to content
You are reading Hyperledger Besu development version documentation and some displayed features may not be available in the stable release. You can switch to stable version using the version box at screen bottom.
Last update: October 13, 2021


This reference describes the syntax of the Hyperledger Besu Command Line Interface (CLI) subcommands.

To start a Besu node using subcommands, run:


If using Bash or Z shell, you can view subcommand suggestions by pressing the Tab key twice.

besu Tab+Tab


Provides blocks related actions.


besu blocks import [--skip-pow-validation-enabled] [--start-block=<LONG>] [--end-block=<LONG>] --from=<block-file>
besu blocks import --skip-pow-validation-enabled --start-block=100 --end-block=300 --from=/home/me/me_project/mainnet.blocks

Imports a block or range of blocks from the specified file into the blockchain database.

You can specify the starting index of the block range to import with --start-block. If omitted, the start block defaults to 0 (the beginning of the chain).

You can specify the ending index (exclusive) of the block range to import with --end-block. If omitted, all blocks after the start block will be imported.

Including --skip-pow-validation-enabled skips validation of the mixHash when importing blocks.


Use --skip-pow-validation-enabled when performing Ethereum Foundation hive testing.


besu blocks export [--start-block=<LONG>] [--end-block=<LONG>] --to=<block-file>
besu --network=rinkeby --data-path=/home/data/ blocks export --start-block=100 --end-block=300 --to=/home/exportblock.bin

Exports a block or range of blocks from storage to a file in RLP format.

If you omit --start-block, the start block defaults to 0 (the beginning of the chain), and if you omit --end-block, the end block defaults to the end of the chain.

If you are not running the command against the default network (MainNet), specify the --network or --genesis-file parameter.


This command provides node public key related actions.


To get the public key or address of a node, ensure you use the --data-path or --node-private-key-file option with the public-key command. Otherwise, a new node key is silently generated when starting Besu.


besu public-key export [--to=<key-file>]
besu --data-path=<node data path> public-key export
besu --data-path=<node data path> public-key export --to=/home/me/me_project/not_precious_pub_key

Outputs the node public key to standard output or to the file specified by --to=<key-file>.


besu public-key export-address [--to=<address-file>]
besu --data-path=<node data path> public-key export-address
besu --data-path=<node data path> public-key export-address --to=/home/me/me_project/me_node_address

Outputs the node address to standard output or to the file specified by --to=<address-file>.


Provides password related actions.


This command generates the hash of a given password. Include the hash in the credentials file for JSON-RPC API authentication.

besu password hash --password=<my-password>
besu password hash --password=myPassword123


Provides operator actions.


This command generates an IBFT 2.0 or QBFT genesis file.

besu operator generate-blockchain-config --config-file=<FILE> --to=<DIRECTORY> [--genesis-file-name=<FILE>] [--private-key-file-name=<FILE>] [--public-key-file-name=<FILE>]
besu operator generate-blockchain-config --config-file=config.json --to=myNetworkFiles

The configuration file has 2 nested JSON nodes. The first is the genesis property defining the IBFT 2.0 or QBFT genesis file, except for the extraData string. The second is the blockchain property defining the number of key pairs to generate.



Manually executing generate-log-bloom-cache is not required unless you set the --auto-log-bloom-caching-enabled command line option to false.

Generates cached log bloom indexes for blocks. APIs use the cached indexes for improved log query performance.


Each index file contains 100000 blocks. The last fragment of blocks less that 100000 are not indexed.

To generate cached log bloom indexes while the node is running, use the admin_generateLogBloomCache API.

besu operator generate-log-bloom-cache [--start-block=<BLOCK_NUMBER>] [--end-block=<BLOCK_NUMBER>]
besu --network=goerli --data-path=/project/goerli operator generate-log-bloom-cache --start-block=0 --end-block=100000


Provides RLP related actions.


Encodes the RLP hexadecimal string for use in a IBFT 2.0 or QBFT genesis file. Defaults to IBFT_EXTRA_DATA.

besu rlp encode [--from=<FILE>] [--to=<FILE>] [--type=<type>]
besu rlp encode --from=ibft_extra_data.json --to=extra_data_for_ibft_genesis.txt --type=IBFT_EXTRA_DATA
cat extra_data.json | besu rlp encode > rlp.txt

Supported types are:

IBFT 2.0 extra data

To generate the RLP encoded extraData string, specify a JSON input that is an array of validator addresses in ascending order.


Use the following JSON Schema to validate that your JSON data is well formed. To validate your JSON content, use an online validation tool, such as

  "$schema": "",
  "$id": "http://org.hyperledger.besu/cli_rlp_ibft_extra_data.json",
  "type": "array",
  "definitions": {},
  "title": "IBFT extra data",
  "description":"JSON format used as input to generate an IBFT extra data RLP string",
  "items": {
    "$id": "#/address",
    "type": "string",
    "title": "Validator address",
    "description":"The validator node address",
    "default": "",
    "examples": [

Example IBFT_EXTRA_DATA encoding



Runs a Retesteth-compatible server. Retesteth is a developer tool that can generate and run consensus tests against any Ethereum client running such a server.

The command accepts the following command line options:

besu retesteth [--data-path=<PATH>] [--rpc-http-host=<HOST>] [--rpc-http-port=<PORT>] [-l=<LOG VERBOSITY LEVEL>] [--host-allowlist=<hostname>[,<hostname>…]… or * or all]
besu retesteth --data-path=/home/me/me_node --rpc-http-port=8590 --host-allowlist=*
Questions or feedback? You can discuss issues and obtain free support on Hyperledger Besu chat channel.
For Hyperledger Besu community support, contact the mailing list