2026-01-06 01:46:25 -08:00
|
|
|
# Besu Configuration: Mainnet vs Chain 138 Comparison
|
|
|
|
|
|
2026-02-12 15:46:57 -08:00
|
|
|
**Last Updated:** 2026-01-31
|
|
|
|
|
**Document Version:** 1.0
|
|
|
|
|
**Status:** Active Documentation
|
2026-01-06 01:46:25 -08:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Command Comparison
|
|
|
|
|
|
|
|
|
|
### Ethereum Mainnet Configuration
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
besu \
|
|
|
|
|
--network=mainnet \
|
|
|
|
|
--sync-mode=FULL \
|
|
|
|
|
--rpc-http-enabled \
|
|
|
|
|
--rpc-http-api=ETH,NET,WEB3 \
|
|
|
|
|
--rpc-http-cors-origins="*" \
|
|
|
|
|
--rpc-http-host=0.0.0.0 \
|
|
|
|
|
--rpc-http-port=8545
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**This configuration:**
|
|
|
|
|
- ✅ Connects to **Ethereum Mainnet** (chain ID 1)
|
|
|
|
|
- ✅ Downloads entire mainnet blockchain
|
|
|
|
|
- ✅ No genesis file needed (uses mainnet genesis)
|
|
|
|
|
- ✅ Public network with public discovery
|
|
|
|
|
- ✅ No permissioning
|
|
|
|
|
- ✅ Read-only APIs (ETH, NET, WEB3)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### Chain 138 Equivalent Configuration
|
|
|
|
|
|
|
|
|
|
For your **private/permissioned chain 138** network, the equivalent would be:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
besu \
|
|
|
|
|
--data-path=/data/besu \
|
|
|
|
|
--genesis-file=/genesis/genesis.json \
|
|
|
|
|
--network-id=138 \
|
|
|
|
|
--sync-mode=FULL \
|
|
|
|
|
--rpc-http-enabled \
|
|
|
|
|
--rpc-http-api=ETH,NET,WEB3 \
|
|
|
|
|
--rpc-http-cors-origins="*" \
|
|
|
|
|
--rpc-http-host=0.0.0.0 \
|
|
|
|
|
--rpc-http-port=8545 \
|
|
|
|
|
--permissions-nodes-config-file-enabled=true \
|
|
|
|
|
--permissions-nodes-config-file=/permissions/permissions-nodes.toml \
|
|
|
|
|
--static-nodes-file=/genesis/static-nodes.json \
|
|
|
|
|
--discovery-enabled=false \
|
|
|
|
|
--p2p-host=0.0.0.0 \
|
|
|
|
|
--p2p-port=30303 \
|
|
|
|
|
--miner-enabled=false
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**Key Differences:**
|
|
|
|
|
|
|
|
|
|
| Setting | Mainnet | Chain 138 |
|
|
|
|
|
|---------|---------|-----------|
|
|
|
|
|
| Network | `--network=mainnet` | `--network-id=138` |
|
|
|
|
|
| Genesis | Auto (mainnet) | `--genesis-file=/genesis/genesis.json` |
|
|
|
|
|
| Permissioning | Disabled | **Enabled** (local nodes only) |
|
|
|
|
|
| Discovery | Enabled (public) | Disabled (private) |
|
|
|
|
|
| Static Nodes | None | Required (`static-nodes.json`) |
|
|
|
|
|
| Node Allowlist | None | Required (`permissions-nodes.toml`) |
|
|
|
|
|
| Consensus | PoS (mainnet) | QBFT (your network) |
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Important Notes
|
|
|
|
|
|
|
|
|
|
### ❌ Don't Use Mainnet Config for Chain 138
|
|
|
|
|
|
|
|
|
|
The mainnet configuration you showed **will NOT work** for your chain 138 network because:
|
|
|
|
|
|
|
|
|
|
1. **`--network=mainnet`** will connect to Ethereum mainnet (chain ID 1), not your chain 138
|
|
|
|
|
2. **No genesis file** - mainnet uses hardcoded genesis, your network needs a custom genesis
|
|
|
|
|
3. **No permissioning** - mainnet is public, your network is permissioned
|
|
|
|
|
4. **Public discovery** - mainnet discovers any node, your network only connects to allowlisted nodes
|
|
|
|
|
|
|
|
|
|
### ✅ Use Chain 138 Configuration
|
|
|
|
|
|
|
|
|
|
Your current chain 138 configuration (in TOML format) already has all the correct settings:
|
|
|
|
|
- `network-id=138` (not mainnet)
|
|
|
|
|
- `genesis-file=/genesis/genesis.json` (required)
|
|
|
|
|
- `permissions-nodes-config-file-enabled=true` (required for private network)
|
|
|
|
|
- `discovery-enabled=false` (for VMID 2500 - strict local/permissioned nodes only)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Current Chain 138 Configuration (VMID 2500)
|
|
|
|
|
|
|
|
|
|
Your current configuration is correct for chain 138:
|
|
|
|
|
|
|
|
|
|
```toml
|
|
|
|
|
# config-rpc-core.toml (VMID 2500)
|
|
|
|
|
data-path="/data/besu"
|
|
|
|
|
genesis-file="/genesis/genesis.json"
|
|
|
|
|
network-id=138
|
|
|
|
|
sync-mode="FULL"
|
|
|
|
|
rpc-http-enabled=true
|
|
|
|
|
rpc-http-api=["ETH","NET","WEB3","ADMIN","DEBUG","TXPOOL"]
|
|
|
|
|
permissions-nodes-config-file-enabled=true
|
|
|
|
|
permissions-nodes-config-file="/permissions/permissions-nodes.toml"
|
|
|
|
|
static-nodes-file="/genesis/static-nodes.json"
|
|
|
|
|
discovery-enabled=false
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## If You Need Mainnet Access
|
|
|
|
|
|
|
|
|
|
If you want to run a separate Besu node for **Ethereum mainnet** (separate from chain 138), you would:
|
|
|
|
|
|
|
|
|
|
1. Use a **separate data directory** (different from `/data/besu`)
|
|
|
|
|
2. Run on **different ports** (e.g., 8547, 8548)
|
|
|
|
|
3. Use the mainnet configuration you showed
|
|
|
|
|
4. This would be a **completely separate node** from your chain 138 network
|
|
|
|
|
|
|
|
|
|
**Example separate mainnet node:**
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
besu \
|
|
|
|
|
--data-path=/data/besu-mainnet \
|
|
|
|
|
--network=mainnet \
|
|
|
|
|
--sync-mode=FULL \
|
|
|
|
|
--rpc-http-enabled \
|
|
|
|
|
--rpc-http-api=ETH,NET,WEB3 \
|
|
|
|
|
--rpc-http-cors-origins="*" \
|
|
|
|
|
--rpc-http-host=0.0.0.0 \
|
|
|
|
|
--rpc-http-port=8547 \
|
|
|
|
|
--rpc-ws-port=8548
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This would run alongside your chain 138 nodes but be completely separate.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
**Last Updated**: $(date)
|
|
|
|
|
|