At block height N, candidate block headers are broadcast.
NodeCoordinator emits features: mempool size, proposer ID, block timing, etc.
Validator runs ONNX model to score each candidate block (score ∈ [0, 1]).
Sends signed vote:
{ "candidateHash": "...", "score": 0.93 }
Weighted average (stake × reputation) is computed per candidate. Highest score → finalized.