# QBFT Consensus Fix: Removing ethash from Genesis **Date**: 2025-12-20 **Root Cause**: Genesis file had both `ethash: {}` and `qbft: {...}`, causing Besu to default to ethash (proof-of-work) instead of QBFT ## Problem Besu was not recognizing validators and blocks were not being produced because: - Genesis config had both `ethash: {}` and `qbft: {...}` - Besu defaulted to ethash (proof-of-work) consensus instead of QBFT - This caused validators to not be recognized (empty validator set) - No blocks could be produced (ethash requires mining, which isn't configured) ## Solution Removed `ethash: {}` from the genesis.json config section, keeping only `qbft: {...}`. ### Before: ```json { "config": { "clique": null, "ethash": {}, "qbft": { "blockperiodseconds": 2, "epochlength": 30000, "requesttimeoutseconds": 10 } } } ``` ### After: ```json { "config": { "clique": null, "qbft": { "blockperiodseconds": 2, "epochlength": 30000, "requesttimeoutseconds": 10 } } } ``` ## Results After deploying the fixed genesis.json: - ✅ Validators are now recognized: `qbft_getValidatorsByBlockNumber` returns 5 validators - ✅ QBFT consensus is active (validators list populated) - ✅ Services are running correctly Blocks should now start being produced with a 2-second block period. ## Action Taken 1. Removed `ethash: {}` from `smom-dbis-138-proxmox/config/genesis.json` 2. Deployed updated genesis.json to all nodes (VMIDs 1000-1004, 1500-1503, 2500-2502) 3. Cleared all databases (to reinitialize with correct genesis) 4. Restarted all Besu services ## Verification ```bash # Validators are now recognized $ curl -X POST --data '{"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockNumber","params":["latest"],"id":1}' http://localhost:8545 { "result": [ "0x11563e26a70ed3605b80a03081be52aca9e0f141", "0x1c25c54bf177ecf9365445706d8b9209e8f1c39b", "0x22f37f6faaa353e652a0840f485e71a7e5a89373", "0x573ff6d00d2bdc0d9c0c08615dc052db75f82574", "0xc4c1aeeb5ab86c6179fc98220b51844b74935446" ] } ``` ## Lesson Learned For QBFT consensus networks, the genesis file should **only** have the `qbft` config, not both `ethash` and `qbft`. Having both causes Besu to default to ethash, which is incompatible with QBFT validator-based consensus.