Files
proxmox/docs/archive/QBFT_VALIDATOR_KEY_INVESTIGATION.md

3.8 KiB

QBFT Validator Key Configuration Investigation

Date: $(date)
Issue: Validators are connected but not producing blocks - they're looking for sync targets instead


Problem Summary

  • 5 validators connected to network
  • All configuration files correct
  • Validator keys present at /keys/validators/validator-{N}/
  • Validators are searching for "sync targets" instead of producing blocks
  • Still at block 0 (genesis)

Critical Finding

Log Message Pattern:

Unable to find sync target. Currently checking 8 peers for usefulness

This suggests that Besu thinks these nodes need to sync from other nodes, rather than recognizing them as validators that should produce blocks.


Current Configuration

Validator Config (config-validator.toml)

miner-enabled=false
miner-coinbase="0x0000000000000000000000000000000000000000"
sync-mode="FULL"

Validator Keys Location

  • /keys/validators/validator-{N}/key.priv Present
  • /keys/validators/validator-{N}/address.txt Present
  • /keys/validators/validator-{N}/key.pem Present

Genesis Configuration

  • QBFT config: {blockperiodseconds: 2, epochlength: 30000, requesttimeoutseconds: 10}
  • No validators array (correct for dynamic validators)
  • extraData contains 5 validator addresses (RLP-encoded)

Research Findings

1. Validator Key Discovery

  • Besu may need explicit configuration to find validator keys
  • Keys are at /keys/validators/validator-{N}/ but Besu might not auto-discover them
  • Documentation mentions "Each validator node references its key directory in config-validator.toml" but we don't see this in current config

2. QBFT Dynamic Validators

  • Network uses dynamic validator management (no static validators array in genesis)
  • Initial validator set comes from extraData field
  • Validators still need to know their own key to sign blocks

3. Miner Configuration

  • miner-enabled=false is correct for QBFT (QBFT doesn't use mining)
  • But miner-coinbase might need to be set to validator address for QBFT to recognize the node as a validator

Possible Solutions to Investigate

Option 1: Set miner-coinbase to Validator Address

miner-coinbase="0x<validator-address>"
  • Each validator would use its own address from /keys/validators/validator-{N}/address.txt
  • This might tell Besu "I am a validator, produce blocks"

Option 2: Configure Validator Key Path

  • Research if Besu has a validator-keys-path or similar config option
  • Or if keys need to be in a specific location that Besu checks by default

Option 3: Verify Key Loading

  • Check logs for messages about loading validator keys
  • If no key loading messages, Besu may not be finding/using the keys

Option 4: Check Initial Validator Set

  • For dynamic validators, verify that the initial set from extraData is correct
  • Ensure all 5 validators are in the initial set

Next Steps

  1. Verify validator addresses match genesis extraData (DONE - all match)
  2. Check logs for validator key loading messages
  3. Research if miner-coinbase should be set to validator address
  4. Test setting miner-coinbase to each validator's address
  5. Check if Besu needs explicit validator key path configuration

Key Insight

The fact that validators are looking for "sync targets" instead of producing blocks suggests that Besu doesn't recognize these nodes as validators.

In QBFT, validators should:

  • NOT be looking for sync targets
  • Be actively participating in consensus
  • Proposing blocks based on their turn in the validator rotation

This is likely a validator key configuration issue rather than a network connectivity issue.


Last Updated: $(date)
Status: Investigating validator key configuration for QBFT block production