Create a Besu Network
This guide walks you through creating a new Hyperledger Besu blockchain network using ChainLaunch Pro.
Prerequisites
- ChainLaunch Pro 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 Pro 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 API
Create a network programmatically:
curl -X POST http://localhost:8080/api/v1/networks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "prod-besu-network",
"type": "besu",
"description": "Production Besu network",
"genesis": {
"chain_id": 2024,
"network_id": 2024,
"consensus": "IBFT_2",
"block_time": 12,
"difficulty": "0x1",
"gas_limit": "0x1c9c380",
"validators": [
"0xAA36A7D6FB3E7F6FF89A4ECEF5E27D28B37B74E3",
"0xBB36A7D6FB3E7F6FF89A4ECEF5E27D28B37B74E4",
"0xCC36A7D6FB3E7F6FF89A4ECEF5E27D28B37B74E5"
],
"accounts": {
"0xDD36A7D6FB3E7F6FF89A4ECEF5E27D28B37B74E6": {
"balance": "1000000000000000000000"
}
}
}
}'
Response:
{
"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 API
curl -X POST http://localhost:8080/api/v1/networks/network-123/nodes \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "validator-1",
"type": "validator",
"network_id": "network-123",
"port": 30303,
"rpc_port": 8545,
"ws_port": 8546,
"resources": {
"cpu": "2",
"memory": "4Gi"
}
}'
Step 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 API
curl -X POST http://localhost:8080/api/v1/networks/network-123/nodes \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "bootnode-1",
"type": "bootnode",
"network_id": "network-123"
}'
Step 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 API
Start all nodes:
curl -X POST http://localhost:8080/api/v1/networks/network-123/start \
-H "Authorization: Bearer YOUR_API_KEY"
Start specific node:
curl -X POST http://localhost:8080/api/v1/nodes/node-123/start \
-H "Authorization: Bearer YOUR_API_KEY"
Step 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 API:
curl -X GET http://localhost:8080/api/v1/nodes/node-123 \
-H "Authorization: Bearer YOUR_API_KEY"
Response:
{
"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
curl -X GET http://localhost:8080/api/v1/nodes/node-123/logs?tail=100 \
-H "Authorization: Bearer YOUR_API_KEY"
Peer 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