Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- ADD_CHAIN138_TO_LEDGER_LIVE: Ledger form done; public code review repo bis-innovations/LedgerLive; init/push commands - CONTRACT_DEPLOYMENT_RUNBOOK: Chain 138 gas price 1 gwei, 36-addr check, TransactionMirror workaround - CONTRACT_*: AddressMapper, MirrorManager deployed 2026-02-12; 36-address on-chain check - NEXT_STEPS_FOR_YOU: Ledger done; steps completable now (no LAN); run-completable-tasks-from-anywhere - MASTER_INDEX, OPERATOR_OPTIONAL, SMART_CONTRACTS_INVENTORY_SIMPLE: updates - LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE: bis-innovations/LedgerLive reference Co-authored-by: Cursor <cursoragent@cursor.com>
3.9 KiB
3.9 KiB
Besu Configuration: Mainnet vs Chain 138 Comparison
Last Updated: 2026-01-31
Document Version: 1.0
Status: Active Documentation
Command Comparison
Ethereum Mainnet Configuration
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:
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:
--network=mainnetwill connect to Ethereum mainnet (chain ID 1), not your chain 138- No genesis file - mainnet uses hardcoded genesis, your network needs a custom genesis
- No permissioning - mainnet is public, your network is permissioned
- 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:
# 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:
- Use a separate data directory (different from
/data/besu) - Run on different ports (e.g., 8547, 8548)
- Use the mainnet configuration you showed
- This would be a completely separate node from your chain 138 network
Example separate mainnet node:
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)