ADR-007: источник цены SOL = upstream binance-market (NATS / WS)
- README: новая секция «Внешние зависимости» — binance-market как общий инфраструктурный upstream, а не часть игры (~/common-projects/invest/binance-market, контракт: NATS market.price.solusdt или WS /ws/price). - docs/DECISIONS: добавлен ADR-007 с обоснованием; ADR-006 получил апдейт-сноску. - docs/ECONOMY: «Курс и балансы» — указано, откуда берётся реальная цена SOL. - TASKS: задачи «Цена SOL: реальный источник» (Фаза 0) и «PriceSource: реальная цена» (Фаза 2) переведены из TODO в IN_PROGRESS, со ссылкой на ADR-007 и binance-market; test-front задача тоже помечена.
This commit is contained in:
+32
-1
@@ -64,5 +64,36 @@
|
||||
сравнивает entry/exit_price цены SOL.
|
||||
- **Цена SOL сейчас** — случайная заглушка (`RandomPriceSource`). Позже заменяется на реальную
|
||||
(провайдер/оракул). Это отдельная задача, не блокирует Фазу 1 (контракт от способа получения цены не зависит).
|
||||
**→ Обновление 2026-09-11:** реальный источник выбран — см. ADR-007.
|
||||
- **Следствие:** фантики = касса/валюта ввода-вывода; контракт оперирует токеном, но исход считает
|
||||
по цене SOL. Экономика токена (ADR-002 живой курс) не влияет на логику «вверх/вниз».
|
||||
по цене SOL. Экономика токена (ADR-002 живой курс) не влияет на логику «вверх/вниз».
|
||||
|
||||
---
|
||||
|
||||
## ADR-007 — Источник цены SOL = upstream-сервис `binance-market`
|
||||
- **Дата:** 2026-09-11
|
||||
- **Статус:** принято
|
||||
- **Суть:** цена SOL для `PriceSource` берётся из уже работающего в инвест-кластере сервиса
|
||||
`binance-market` (репо `subochev/binance-market`), а не из своей оракуль-логики и не из прямого
|
||||
опроса Binance. Контракт между игрой и сервисом — публичный:
|
||||
- **NATS-подписка** на топик `market.price.solusdt` (предпочтительно, в кластере); либо
|
||||
- **WebSocket** `ws://<binance-market>:8080/ws/price?symbol=solusdt` (fallback / внешние сети).
|
||||
Источник цены внутри `binance-market` — last-trade (`aggTrade.p` с биржи Binance), тики идут
|
||||
на каждой сделке → фактически real-time.
|
||||
- **За:**
|
||||
- Уже работает и развёрнут в кластере `kube` (ns `invest`), chart `binom/binance-market`,
|
||||
последний релиз v10. Не надо поднимать ещё один процесс ради цены.
|
||||
- Есть и NATS, и WS-контракт — обе формы потребления готовы.
|
||||
- Покрытие `solusdt` уже в списке символов; дополнительных подписок не требуется.
|
||||
- Цена приходит в тиках сделок (не сэмплинг раз в N секунд) — лучшее разрешение для
|
||||
сравнения entry/exit в round-based игре.
|
||||
- Общий сервис инвест-кластера, используется не только этой игрой; его судьба — не наша забота.
|
||||
- **Против:**
|
||||
- Один источник (Binance). Если Binance недоступен — игра без цены. Заглушка-fallback
|
||||
на `RandomPriceSource` остаётся как dev-only.
|
||||
- Зависимость по латентности от стороннего сервиса. В кластере это несколько мс,
|
||||
приемлемо.
|
||||
- **Результат:** задачи «TODO Цена SOL: реальный источник» (Фаза 0) и «PriceSource: реальная цена
|
||||
(вместо RandomPriceSource)» (Фаза 2) переводятся в `IN_PROGRESS` со ссылкой на это решение.
|
||||
Никаких новых подписок/оракулов не делаем — только интеграция в релейере (`smart-updown-token`/
|
||||
`relayer` или `smart-updown-server`). Внешний статус сервиса см. README → «Внешние зависимости».
|
||||
+4
-1
@@ -21,7 +21,10 @@
|
||||
|
||||
## Курс и балансы
|
||||
- **Валюта ставки:** наши фантики (токен Binary Rocket).
|
||||
- **Предмет ставки:** направление цены SOL (вверх/вниз) — ADR-006. Сейчас цена SOL — случайная заглушка, позже — реальная.
|
||||
- **Предмет ставки:** направление цены SOL (вверх/вниз) — ADR-006. **Источник реальной цены SOL**
|
||||
— upstream-сервис `binance-market` (см. ADR-007 и README → «Внешние зависимости»). Потребление:
|
||||
NATS-топик `market.price.solusdt` (предпочтительно) или WS `ws://<binance-market>:8080/ws/price?symbol=solusdt`.
|
||||
В dev/test допускается оставить `RandomPriceSource`-заглушку.
|
||||
- **Курс:** живой рыночный (ADR-002). Ввод/вывод через swap pump.fun; баланс игрока — в фантиках.
|
||||
- **Фантик = 1 токен-единица/10^6.**
|
||||
- **Баланс игрока:** в ATA (Associated Token Account) на mint; читается `getTokenAccountBalance`.
|
||||
|
||||
Reference in New Issue
Block a user