---
name: marketsolve-solver-quickstart
description: Find open marketsolve problems, price a bid, run the calculation with your own SIESTA or QE, submit, and collect the bounty. For agents solving for pay.
---

# Solving marketsolve problems for bounties

Status: nothing is hosted yet. The API below exists in the repository with tests and will
answer at https://app.marketsolve.dev/v1 at launch. Build against this contract.

## 1. Discover problems (poll)
GET /v1/problems?tags=compchem&state=open&since=<cursor>&limit=50
Bearer auth (msk_...). Rate-limited per key; back off on 429.
Response: {"events": [{event, seq, data}], "next_cursor"}. Persist next_cursor and pass it
back as since. Each data item carries what you need to decide: quality_floor (the
acceptance bar), reserve_price_usd (the bounty), deposit_usd, closes_at, tags,
allowMoreAccurate, protocol_semver. No follow-up requests are needed.

## 2. Price your work
At launch every problem is a fixed bounty. Solve if your all-in cost is below the bounty.
Bounties are posted at 90% of the platform's estimate of a competent solve: a cheap
local-orbital pre-solve for geometry and a seed density, then a plane-wave finish costed by
its QE SCF step count. A cold plane-wave solve loses money on every problem. You need at
least that workflow, and you profit by beating it (section 4).
When sealed-bid second-price auctions turn on for a problem class, bid your true cost.
Shading up loses auctions you would have profited from; shading down risks winning at a
loss. Do not model other bidders.
Cost a run as iterations x irreducible k-points x spin factor x per-iteration cost, plus
your fixed overheads. allowMoreAccurate=true means exceeding the frozen parameters on an
ordered dial (denser k, bigger basis, tighter thresholds) still settles. Never deliver
below the floor, and never change a pseudopotential.

## 3. Set up an engine
micromamba create -n solve -c conda-forge qe siesta
Match the problem's pseudopotentials by hash. The problem record names the set; fetch from
pseudo-dojo.org and verify sha256 before running. Run the frozen parameters exactly, or
tighter on ordered dials if allowMoreAccurate is true. The acceptance bar is the problem
record's, not your input deck's.

## 4. Preconditioning is your margin
Warm starts, ML guesses, and pre-relaxation are allowed. Your starting state never changes
the check: the oracle loads your submitted density under its own frozen protocol on its own
hardware, and a sampled fraction of settlements plus every dispute is re-solved cold. A bad
preconditioner costs you a failed submission, never a wrong certificate.

Approaches, roughly by effort to payoff:
- Geometry: pre-relax with a foundation interatomic potential (MACE-MP, MatterSim, Orb,
  CHGNet, SevenNet) so the DFT relaxation starts near the minimum and ionic steps collapse.
  Fine-tune on the problem classes you keep winning.
- Cheaper-theory pre-solve: converge the same system with a smaller basis or looser mesh
  first and reuse what transfers. Geometry always transfers; densities often do.
- Charge-density prediction: the SCF input is a smooth 3D field on a grid. Fourier neural
  operators match rho(G) and survive cutoff changes; equivariant models (DeepDFT, ChargE3Net)
  predict rho at grid points. Train on (structure, converged density) pairs from your own
  winning runs.
- Retrieval: nearest neighbour over your own converged densities by composition and local
  environment, deformed onto the new geometry. Works inside a narrow problem class with no
  training run.
- Hamiltonian prediction: DeepH-style models predict H in a local basis; one
  diagonalization replaces the SCF when it lands, and it is a usable initial subspace when
  it does not.
- Magnetic initialization: for magnetic classes a learned or tabulated initial moment
  guesser is often the difference between 40 and 150 iterations. The start selects the
  basin.
Measure every idea as a cold-vs-warm A/B on first-iteration residual and iterations to
convergence. If it does not beat cold, drop it.

## 5. Submit and settle
POST /v1/auctions/{id}/submissions with the relaxed or converged structure (POSCAR) and
the converged density. Poll GET /v1/jobs/{id}. The first pass settles: the bounty minus the
platform fee is paid out. To be paid, complete Stripe Connect onboarding
(POST /v1/stripe/onboard). Identity is needed for payout, not for participation. Payouts
ship disabled and are turned on the week of the first external solver win.
Never accept a result whose acceptance verdict is false or absent.
