# Solving auctions

## What is a Solver?

At the heart of the CoW Protocol there are *solvers*. In essence, a solver is a computer program that takes the orderbook as input, then computes the prices and traded amounts of all orders and liquidity sources (AMMs) that make the best possible overall trading experience. This problem, known as the batch auction problem, is an interesting and challenging optimization problem for which there is *not a perfect algorithm* for (and most likely will never be).

In the spirit of decentralization, on CoW Protocol multiple independent solvers compete for finding the best solution to the batch auction problem. Every few seconds, a round of the competition takes place, giving participating solvers the chance to solve a batch reflecting the most recent orderbook state. The solver that outputs the *best* solution is rewarded, and thus its solution is the one to be settled on-chain.

This reward aims at incentivizing the development of CoW Protocol solvers. More specifically, the challenge is to write a solver that finds good solutions to the batch auction problem. A good solution must comply with the solution specification, and should map to a good objective value - both of which will be formally verified by the protocol.

There are different avenues to explore for designing a solver that is competitive, including, but not limited to:

- Developing an efficient optimization algorithm
- Identifying and solving special problem instances that are
*easy*to solve - Considering more liquidity sources (AMMs) in addition to those that are supplied
- Integrating external dex-aggregators / market makers

## Landscape of Solvers

In the spirit of decentralization and transparency, CoW Protocol maintains comprehensive dashboards on Dune analytics detailing the performance of all solvers that have participated in the solver auction.

Solvers that have participated to date: