At the moment, the rust backend queries and ranks solutions of the different solvers based on formally and well-defined criterion, which can be roughly described as "the solution that provides the most utility to the orders". The solver with the best solution, according to this criterion, that has passed a transaction simulation of the batch settlement solution is then chosen for settlement submission. If the submission is successful, the solver batch gets executed on-chain; in such a case, all the fees from that batch go to the solver for covering its execution costs, as well as the rewards for being the winning solver. In the event that the submission fails, the driver runs again and refetches liquidity to start a new solution-finding process.