Формулы:

Формулы позволяют находить курс для валютной пары, даже если биржа напрямую не предоставляет цен для данной пары. Например, нам нужно рассчитать цену BTC -> RUB. Прямого курса нет, но можно рассчитать его через 3ю валюту: BTC -> KGS -> RUB.

Кроме расчета курса при обменах, формулы еще используются для указания мин и макс суммы обмена и скидок. Например, для BTC -> RUB можно задать лимит в любой активной валюте - DOGE или USDT. Он будет пересчитан автоматически по текущему курсу. Поэтому формулы выделены отдельно и не привязаны к направлениям.

Сейчас для каждой пары валют можно задать только одну формулу.

/api/formula

Метод: GET
Описание: Загружает сохраненную формулу.
Права: 🟡 админка.

Параметры:

Ответ:

{
  "type": "success",
  "message": null,
  "data": {
    "id": 1,
    "from": "RUB",
    "to": "ETH",
    "tag": "Cbr_RUB_EUR * Binance_EUR_EURI_buy * Binance_EURI_ETH_buy",
    "reserve": "auto",
    "lastUpdated": "2025-06-16 21:48:34",
    "isEnabled": true,
    "price": 0.000004825993433195978,
    "spread": 0.13220134023363964
  },
  "action": null
}

Подробности:

Если формула не найдена, возвращается warning:
Ответ:

{
  "type": "warning",
  "message": "Формула не найдена",
  "data": null,
  "action": null
}

/api/formula

Метод: PUT, POST
Описание: Добавляет новую формулу (PUT) или сохраняет (POST).
Права: 🔴 админка + isEditDirection.

Запрос:

{
  "from": "RUB",
  "to": "ETH",
  "tag": "Cbr_RUB_ZAR * Binance_ZAR_ETH_buy",
  "reserve": "auto",
  "isEnabled": true
}

Все параметры обязательны. Подробности:

Ответ:

{
  "type": "success",
  "message": "Формула RUB -> ETH добавлена",
  "data": null,
  "action": null
}

/api/formulas/generate

Метод: GET
Описание: Составляет новую формулу.
Права: 🔴 админка + isEditDirection, т.к. поиск занимает время.

Параметры:

Пример файла kurs.json:

[
    {
        "from": "BTC",
        "to": "USDT",
        "price": 95000.0
    }
]

Алгоритм поиска для auto:

Ответ:

{
  "type": "success",
  "message": null,
  "data": {
    "referentPrice": 0.000004826192891183676,
    "referentSource": "CoinMarketCap",
    "list": [
      {
        "path": "RUB -> USDT -> INJ -> ETH",
        "price": 0.000004826162837544283,
        "tag": "Cbr_RUB_USDT * Bybit_USDT_INJ_buy * Binance_INJ_ETH_buy",
        "spread": 1.7976931348623157e+308
      }
    ]
  },
  "action": null
}

/api/formulas

Метод: GET
Описание: Запрашивает список формул.
Права: 🟡 админка.

Параметры:

Ответ:

{
  "type": "success",
  "message": null,
  "data": {
    "items": [
      {
        "id": 1,
        "from": "RUB",
        "to": "ETH",
        "tag": "Cbr_RUB_ZAR * Binance_ZAR_ETH_buy",
        "reserve": "auto",
        "lastUpdated": "2025-06-16 22:07:03",
        "isEnabled": true,
        "price": 4.822979924657339e-7,
        "spread": 0.2135622607997012
      }
    ],
    "total": 1,
    "page": 1,
    "pageSize": 100
  },
  "action": null
}

/api/formulas

Метод: DELETE
Описание: Удаляет формулы. Хотя они добавляются автоматически, этот метод тоже может пригодиться. Например, если одна из валют больше не нужна в обменнике.
Права: 🔴 админка + isEditDirection.
Параметры:

Права: isEditCurrency

Ответ:

{
  "type": "success",
  "message": "Удалены формулы: BTC -> USDT, BTC -> ETH",
  "data": null,
  "action": null
}