feat(relayer): авто-закрытие ставок, WS-события, одна открытая ставка на адрес

- 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, события, границы)
This commit is contained in:
Caffeine
2026-09-13 18:49:26 +03:00
parent 0b136c6502
commit a73e44de9a
6 changed files with 843 additions and 91 deletions
+2
View File
@@ -73,6 +73,8 @@ spec:
value: {{ .Values.smart.priceHistory | quote }}
- name: SMART_PRICE_RETENTION_HOURS
value: {{ .Values.smart.priceRetentionHours | quote }}
- name: SMART_SETTLE_INTERVAL_MS
value: {{ .Values.smart.settleIntervalMs | quote }}
- name: GW_PORT
value: {{ .Values.port | quote }}
- name: GW_BETTOR_KEYSTORE
+1
View File
@@ -28,6 +28,7 @@ smart:
startBalance: 10000000000
priceHistory: '/app/data/price-history.db'
priceRetentionHours: 24
settleIntervalMs: 2000
nats:
url: 'nats://192.168.88.93:4222'