# Besu Configuration: Mainnet vs Chain 138 Comparison **Last Updated:** 2026-01-31 **Document Version:** 1.0 **Status:** Active Documentation --- ## 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)