Create Besu Nodes
This guide covers creating validator, bootnode, and fullnode instances for your Besu network.
Prerequisites
- ChainLaunch running at
http://localhost:8100 - A Besu network created
Node Types
| Type | Purpose | Consensus | Stores state |
|---|---|---|---|
| Validator | Creates and validates blocks | Yes | Yes |
| Bootnode | Peer discovery entry point | No | No |
| Fullnode | Syncs chain, serves RPC queries | No | Yes |
Create Nodes via UI
- Go to Nodes in the left sidebar
- Click Besu Node
- Fill in the configuration:
| Field | Description | Example |
|---|---|---|
| Name | Unique node name | validator-0 |
| Network | Select your Besu network | my-besu-network |
| Node Type | Validator, Bootnode, or Fullnode | Validator |
| P2P Port | Peer-to-peer communication | 30303 |
| RPC HTTP Port | JSON-RPC endpoint | 8545 |
| RPC WebSocket Port | WebSocket endpoint | 8546 |
| Metrics Port | Prometheus metrics | 9545 |
- Click Create Node
The node starts automatically and connects to the network.
Create Nodes via CLI
# Create a Besu testnet with 4 validators in one command
chainlaunch testnet besu --name my-besu --nodes 4 --mode docker
# Individual node creation is done through the API (see below)
Create Nodes via API
Validator Node
curl -X POST http://localhost:8100/api/v1/nodes \
-H "Content-Type: application/json" \
-d '{
"name": "validator-0",
"platform": "BESU",
"nodeType": "BESU_FULLNODE",
"networkId": 1,
"config": {
"p2pPort": 30303,
"rpcHttpPort": 8545,
"rpcWsPort": 8546,
"metricsPort": 9545
}
}'
Bootnode
curl -X POST http://localhost:8100/api/v1/nodes \
-H "Content-Type: application/json" \
-d '{
"name": "bootnode-0",
"platform": "BESU",
"nodeType": "BESU_FULLNODE",
"networkId": 1,
"config": {
"p2pPort": 30303,
"isBootnode": true
}
}'
Node Lifecycle
Start / Stop / Restart
# Start a node
curl -X POST http://localhost:8100/api/v1/nodes/{nodeId}/start
# Stop a node
curl -X POST http://localhost:8100/api/v1/nodes/{nodeId}/stop
# Restart a node
curl -X POST http://localhost:8100/api/v1/nodes/{nodeId}/restart
View Logs
curl http://localhost:8100/api/v1/nodes/{nodeId}/logs?tail=100
Check Status
curl http://localhost:8100/api/v1/nodes/{nodeId} | jq '.status'
Connecting to a Node
Once a validator or fullnode is running, connect to it 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}'
# Get peer count
curl -X POST http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}'
# Get sync status
curl -X POST http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'
Resource Planning
| Node Type | CPU | Memory | Disk |
|---|---|---|---|
| Validator | 2 cores | 4 GB | 20 GB+ |
| Bootnode | 1 core | 1 GB | 5 GB |
| Fullnode | 2 cores | 4 GB | 50 GB+ |
tip
For QBFT/IBFT consensus, you need at least 4 validators to tolerate 1 Byzantine fault (3f + 1 where f is the number of faulty nodes).
Next Steps
- Manage Validators to add/remove validators from a running network
- Configure Monitoring for Prometheus metrics
- Besu Overview for consensus mechanism details