This guide walks you through creating a new Hyperledger Besu blockchain network using ChainLaunch.
Prerequisites
- ChainLaunch server running and accessible
- User account with
NETWORK_CREATEpermission - Basic understanding of blockchain networks and Besu
Network Parameters
Before creating a network, decide on these parameters:
| Parameter | Description | Example |
|---|---|---|
| Network Name | Unique identifier for your network | prod-besu-network |
| Consensus Mechanism | PoW, PoA, Clique, or IBFT 2.0 | IBFT_2 |
| Chain ID | Unique identifier for the chain (prevent replay attacks) | 2024 |
| Network ID | P2P network identifier | 2024 |
| Block Time | Target block production time in seconds | 12 |
| Validator Count | Initial number of validators | 3-5 |
| Initial Accounts | Pre-funded accounts for testing | See below |
Step 1: Create Network via UI
Navigate to Networks
- Click Networks in the main menu
- Click Create Network button
- Select Besu from the network type options
Enter Basic Information
-
Network Name
- Enter a descriptive name:
prod-networkordev-testnet - Must be unique across your system
- Only alphanumeric characters and hyphens
- Enter a descriptive name:
-
Description (optional)
- Document the network's purpose
- Example:
Production network for our DeFi platform
Configure Genesis Parameters
-
Consensus Mechanism
- Select from: Proof of Work, Proof of Authority, Clique, IBFT 2.0
- Recommended: IBFT 2.0 for production networks
-
Chain ID
- Enter a unique number (typically 1000-9999 for private networks)
- Example:
2024 - Used to identify the chain
-
Network ID
- Enter peer discovery ID (can be same as Chain ID)
- Example:
2024 - Used for P2P networking
-
Block Time
- Enter target block production in seconds
- IBFT: 12-15 seconds recommended
- PoA: 5-15 seconds
- Default:
12
Configure Consensus Parameters
For IBFT 2.0:
- Block Period: Seconds between blocks (default: 5)
- Request Timeout: Timeout for block proposals (default: 10s)
- Epoch Length: Blocks per epoch (default: 30000)
- Round Change Timeout: Timeout for round changes (default: 3s)
For Proof of Authority:
- Signer Count: Number of initial signers (validators)
- Signer Period: Seconds between signers producing blocks
- Allow In-Mining Block: Allow mining while signing (yes/no)
Create Initial Accounts
ChainLaunch can pre-fund test accounts with ETH:
- Click Add Account
- Enter public address (or generate new key)
- Enter initial balance in ETH
- Repeat for each account
Example Initial Accounts:
0x123456... : 1000 ETH (Deployer)
0x789012... : 500 ETH (Test user 1)
0x345678... : 500 ETH (Test user 2)
Set Validators
- Click Add Validator
- Enter validator address
- Repeat for desired number of validators
- Recommended: 3-5 validators for consensus
Configure Advanced Options
-
Fork ID (advanced)
- Leave default unless upgrading network version
-
Difficulty (for PoW only)
- Set mining difficulty target
-
Gas Limit
- Maximum gas allowed per block
- Default:
30000000(30M)
-
Extradata
- Additional data to include in genesis block
- Usually empty or reserved for DAO voting
Review and Create
- Review all parameters
- Check validator addresses are correct
- Click Create Network
- Wait for genesis block generation
Step 2: Create Network via CLI
Create a network programmatically. Pass a JSON config file matching the platform's network shape (see the --config examples):
chainlaunch networks besu create \
--name prod-besu-network \
--description "Production Besu network" \
--config /path/to/besu-network.jsonResponse:
{
"id": "network-123",
"name": "prod-besu-network",
"type": "besu",
"status": "created",
"genesis_block_hash": "0x...",
"chain_id": 2024,
"created_at": "2024-01-15T10:30:00Z"
}Step 3: Deploy Validator Nodes
After creating the network, deploy validator nodes:
Via UI
- Go to Networks → prod-besu-network
- Click Add Node
- Select Validator Node
- Enter node name (e.g.,
validator-1) - Configure resources:
- CPU: 2-4 cores recommended
- Memory: 4-8 GB recommended
- Click Create
- Repeat for each validator (3-5 recommended)
Via CLI
chainlaunch besu create \
--name validator-1 \
--network-id 123 \
--p2p-port 30303 \
--rpc-port 8545 \
--key-id 1Step 4: Deploy Bootnode (Optional)
For networks with multiple validator groups, deploy a bootnode:
Via UI
- Go to Networks → prod-besu-network
- Click Add Node
- Select Bootnode
- Enter node name (e.g.,
bootnode-1) - Click Create
Via CLI
chainlaunch besu create \
--name bootnode-1 \
--network-id 123 \
--key-id 2Step 5: Start the Network
Via UI
- Go to Networks → prod-besu-network
- Click Start Network
- Select all nodes to start
- Click Confirm
- Wait for nodes to initialize (2-5 minutes)
Via CLI
Start all nodes (no network start API today — start each node):
for n in validator-1 validator-2 bootnode-1; do
chainlaunch nodes start "$n"
doneStart specific node:
chainlaunch nodes start validator-1 # by slug
chainlaunch nodes start 123 # by numeric IDStep 6: Verify Network Health
Check Node Status
Via UI:
- Go to Networks → prod-besu-network
- View node status (should show "Running")
- Check block height increasing
Via CLI:
chainlaunch nodes get validator-1Response:
{
"id": "node-123",
"name": "validator-1",
"status": "running",
"block_height": 42,
"peer_count": 2,
"uptime_seconds": 300
}Query Network via JSON-RPC
Get latest block number:
curl -X POST http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_blockNumber",
"params": [],
"id": 1
}'Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x2a"
}Get validator list:
curl -X POST http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "ibft_getValidatorsByBlockNumber",
"params": ["latest"],
"id": 1
}'Consensus-Specific Configuration
IBFT 2.0 (Recommended for Production)
{
"ibft": {
"blockperiod": 5,
"epochlength": 30000,
"requesttimeoutms": 10000,
"roundchangetimeoutms": 3000,
"messageQueueLimit": 1000,
"duplicateMessageLimit": 100,
"futureRoundsLimit": 1000,
"transmitOnEmptyPayload": true
}
}Proof of Authority (Quick Testing)
{
"clique": {
"period": 15,
"epoch": 30000
}
}Proof of Work (Ethereum Compatible)
{
"ethash": {
"fixeddifficulty": 1000,
"minBlockTime": 1
}
}Common Issues & Solutions
Validators Won't Start Consensus
Problem: Nodes running but no blocks being created
- Verify all validator addresses are in genesis file
- Check validator count is at least 2
- Ensure all validators are in "Running" state
- Check node logs for errors
Solution:
# View node logs
chainlaunch nodes logs validator-1 --tail 100Peer Connection Issues
Problem: Nodes isolated, not discovering each other
- Check bootnode is running
- Verify network connectivity between nodes
- Check enode URLs match
- Review firewall settings
Solution:
# Check peer count via RPC
curl -X POST http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "net_peerCount",
"params": [],
"id": 1
}'High Block Time
Problem: Blocks produced slower than expected
- Check CPU/memory utilization
- Verify network latency between validators
- Reduce block period in genesis
- Check for slow disk I/O
Next Steps
- Monitor Network - Setup Prometheus