# SPEC — Lighter micro market-maker (paper-first)

## Objectif
Market-making micro sur **BTC perp Lighter** (tier Standard, fees maker/taker **0%/0%**), d’abord en **paper** contre le carnet public live.

## Capital (verrouillé pour cette phase)
- **Equity paper : 1 000 USD** (pas 20–30k)
- Lots : **10–25 USD** notionnel / côté
- Kill switch : **−1 % / jour** → **−10 USD**
- Inventaire max : ~**400 USD** notionnel (`max_inventory_btc` ~0.005)
- Plafond soft fills : 8–12k/jour (à 1k on en fera beaucoup moins)
- **Important :** les anciennes cibles **250–500 $/jour** correspondaient à un working capital **20–30k**. Ce n’est **pas** l’objectif à 1 000 $.

## Venue
- REST : `https://mainnet.zklighter.elliot.ai`
- WS : `wss://mainnet.zklighter.elliot.ai/stream`
- Marché : BTC perp — `market_id` découvert via `orderBookDetails` (**BTC = 1** au 2026-10-25 ; ETH = 0)
- Live : clés via env uniquement (`LIGHTER_API_PRIVATE_KEY`, `LIGHTER_ACCOUNT_INDEX`, `LIGHTER_API_KEY_INDEX` ∈ 4–254). **Aucune clé dans le repo.**

## Boucle
1. Discover market + stream order book (WS) / REST fallback
2. Mid = (best bid + best ask) / 2
3. Quote bid/ask = mid ± half_spread, décalé par **inventory skew**
4. Paper : fill maker si le carnet croise nos prix (ou mid traverse la quote)
5. Risk : kill −1 %, max inventaire, max fills/jour
6. Status → `data/status.json` + console + `dashboard.html`

## Modes
- `mode: paper` (défaut) — jamais d’ordres signés
- Live : non branché dans ce scaffold ; nécessitera `LIVE=1` + `live_enabled: true` + SignerClient post-only

## Fichiers
- `scripts/run_paper.py` — entrée
- `src/` — market_data, quoter, paper_engine, risk, status, bot
- `config.yaml` / `config.example.yaml`
