{
 "sources": [
  {
   "url": "https://github.com/benedictbrady/amm-challenge/blob/6b6921f8d463314aa7c96234e1be25a25245f704/README.md",
   "quote": "2. **Arbitrageurs trade** — They push each AMM's spot price toward `p`, extracting profit"
  },
  {
   "url": "https://github.com/benedictbrady/amm-challenge/blob/6b6921f8d463314aa7c96234e1be25a25245f704/README.md",
   "quote": "3. **Retail orders arrive** — Random buy/sell orders get routed optimally across AMMs"
  },
  {
   "url": "https://github.com/benedictbrady/amm-challenge/blob/6b6921f8d463314aa7c96234e1be25a25245f704/README.md",
   "quote": "Higher fees mean arbitrageurs need larger mispricings to profit, so your AMM stays \"stale\" longer—bad for edge."
  },
  {
   "url": "https://github.com/benedictbrady/amm-challenge/blob/6b6921f8d463314aa7c96234e1be25a25245f704/README.md",
   "quote": "Retail flow splits optimally between AMMs based on fees—lower fees attract more volume."
  },
  {
   "url": "https://github.com/benedictbrady/amm-challenge/blob/6b6921f8d463314aa7c96234e1be25a25245f704/README.md",
   "quote": "Edge = Σ (amount_x × fair_price - amount_y)   for sells (AMM sells X)"
  },
  {
   "url": "https://github.com/benedictbrady/amm-challenge/blob/6b6921f8d463314aa7c96234e1be25a25245f704/README.md",
   "quote": "- Per-step volatility `σ ~ U[0.088%, 0.101%]` (varies across simulations)"
  },
  {
   "url": "https://github.com/benedictbrady/amm-challenge/blob/6b6921f8d463314aa7c96234e1be25a25245f704/README.md",
   "quote": "- Arrival rate `λ ~ U[0.6, 1.0]` orders per step"
  },
  {
   "url": "https://github.com/benedictbrady/amm-challenge/blob/6b6921f8d463314aa7c96234e1be25a25245f704/contracts/src/IAMMStrategy.sol",
   "quote": "uint256 timestamp;   // Simulation step number"
  },
  {
   "url": "https://github.com/benedictbrady/amm-challenge/blob/6b6921f8d463314aa7c96234e1be25a25245f704/contracts/src/IAMMStrategy.sol",
   "quote": "uint256 reserveX;    // Post-trade X reserves (WAD precision)"
  },
  {
   "url": "https://github.com/benedictbrady/amm-challenge/blob/6b6921f8d463314aa7c96234e1be25a25245f704/contracts/src/AMMStrategyBase.sol",
   "quote": "uint256[32] public slots;"
  },
  {
   "url": "https://github.com/benedictbrady/amm-challenge/blob/6b6921f8d463314aa7c96234e1be25a25245f704/amm_competition/evm/executor.py",
   "quote": "GAS_LIMIT_TRADE = 250_000"
  },
  {
   "url": "https://github.com/benedictbrady/amm-challenge/blob/6b6921f8d463314aa7c96234e1be25a25245f704/amm_competition/market/arbitrageur.py",
   "quote": "- Buy X from AMM (AMM sells X): Δx_out = x - sqrt(k / (γ·p))  (profit-maximizing)"
  },
  {
   "url": "https://github.com/benedictbrady/amm-challenge/blob/6b6921f8d463314aa7c96234e1be25a25245f704/amm_competition/market/router.py",
   "quote": "Implements optimal order splitting so that the marginal price is equal"
  },
  {
   "url": "https://github.com/benedictbrady/amm-challenge/blob/6b6921f8d463314aa7c96234e1be25a25245f704/amm_competition/competition/match.py",
   "quote": "rng = np.random.default_rng(seed=i)"
  },
  {
   "url": "https://api.imdnotdead.fun/artifacts/c33720874aa1285e9dc766540b8a90410118a8e8b840d949ea0dcc211bdb27c1",
   "quote": "uint256 constant ELAPSED_CAP = 8;"
  },
  {
   "url": "https://api.imdnotdead.fun/artifacts/c33720874aa1285e9dc766540b8a90410118a8e8b840d949ea0dcc211bdb27c1",
   "quote": "uint256 constant TAIL_KNEE = 600 * BPS;"
  }
 ]
}