a73e44de9a
- settle.ts: серверный планировщик (startScheduler, тик SMART_SETTLE_INTERVAL_MS) находит просроченные открытые ставки, берёт цену из истории на expire_time, сам зовёт close_bet; рассылает bet_closed - gateway.ts: ручка POST /close удалена (404); проверка 'одна открытая ставка на адрес' под withBetLock -> 409 с openBetId; bet_open по WS при создании; lastState прокидывается в settleOnce (без него лог спамил каждый тик) - settle.ts: пакетный getProgramAccounts вместо поштучного перебора по id (замер: 3 мс против 28 мс, 9.3x, 1 запрос вместо 15); фильтр не-Bet аккаунтов по BET_ACCOUNT_SIZE (Global исключён из unmapped) - check.ts: +38 проверок (decodeBet, openBetOf, dueForSettle, события, границы)