RustMinerSystem

Документация

API proxy ports и fee wallets

Создание и изменение proxy ports RustMinerSystem, lossless pumping, импорт, проверка pool, endpoints fee wallets и hot replacement кошелька/worker name.

API proxy ports и fee wallets

Эти вызовы напрямую меняют поведение proxy. Создайте backup и считайте X-ACCESS-TOKEN высокопривилегированным credential. Модели ниже получены из готового frontend и проверены безопасными read-only запросами к запущенному экземпляру.

Endpoints и ответы

Метод Путь Успешный ответ
GET /api/ports PortRecord[].
GET /api/port/{id} Один PortRecord.
GET /api/port/{id}/lossless/ok { "is_ok": boolean }, проверка применимости lossless-режима к текущей конфигурации.
POST /api/port/new ID нового порта; число -1 означает неподдерживаемую валюту.
POST /api/port/{id} ID или success scalar; затем повторите GET.
POST /api/port/{id}/start HTTP 200 принимает операцию; проверьте server.status.
POST /api/port/{id}/stop HTTP 200 принимает операцию; проверьте server.status.
DELETE /api/port/{id} HTTP 200 после удаления.
POST /api/ports/import Массив ошибок по портам; пустой массив означает отсутствие зарегистрированных ошибок.
POST /api/ping HTTP 200 при успешной проверке соединения.
GET /api/lossless/pools Текущий список платформ пулов для lossless-режима.

{id} — это server.id, возможно строка, а не listen port. Исключение: /api/stat/port/{id} использует server.port.

Полный PortRecord

Каждая запись содержит server, wallets[], stat и setting.

Поля server

Поле Тип Правило и значение
id string Созданный сервером ID записи и path parameter для edit.
port number Обязательный listen port, целое 1–65534.
name string Необязательное отображаемое имя.
currency string Ключ или name из /api/currency/config.
category string category из той же записи валюты.
protocol number 0 TCP, 1 TLS/SSL, 2 RMS, 3 TTS, 5 RMS2, 6 RMS3, 8 RMS3 ZSTD, 9 transparent relay.
limit_connections number 0–65535; 0 без ограничения.
pool_address string Обязательный основной upstream host:port.
pool_address2 string/null Необязательный резервный upstream.
connect_mode number Основной upstream: 0 TCP, 1 TLS/SSL; старые данные могут содержать 5 RMS2 и 6 RMS3.
connect_mode2 number Протокол резервного upstream, тот же enum.
mode number 0 traditional efficient, 1 compatible, 2 lossless pumping.
proxy_addr string/null Legacy-поле единого кошелька/subaccount. Для lossless не обязательно; при редактировании сохраняйте значение GET.
proxy_device string/null Legacy-поле единого worker name. Для lossless не обязательно; при редактировании сохраняйте значение GET.
pattern_addr string Legacy patterns замены кошелька. Текущий UI всегда отправляет пустую строку; для новых настроек используйте hot-replacement rules.
replace_addr string Legacy target замены кошелька. Текущий UI всегда отправляет пустую строку.
nc number Compatibility flag 0/1.
status number Только ответ: runtime state порта.
error string Только ответ: последняя ошибка порта.
created_at / updated_at string Только ответ: timestamps.

KENC задается как protocol=1, setting.et_mode=1, SOCKS5 — protocol=0, setting.et_mode=2.

Поля wallets[]

Поддерживается до десяти fee wallets. Строки с нулевым ratio текущий frontend не отправляет.

Поле Тип Правило и значение
id string ID fee wallet; передается при edit.
server_id string Обязателен для hot update; это server.id, а не номер порта. В create/edit порта не передается.
addr string Обязательный fee wallet или subaccount.
device string Обязательное имя fee worker.
pool_address string Pool для fee wallet; compatible и lossless modes используют основной pool порта.
pool_protocol number 0 TCP, 1 TLS/SSL.
ratio number Дробь 0–1; 0.01 означает 1%.
created_at / updated_at string Только ответ: timestamps.

Поля setting

Поле Тип Default Значение
port number server.port Связанный listen port.
cp_name string "" Compatibility-reserved, отдельного поля UI нет.
cp_mode number 1 Compatibility mode; сохраняйте значение из GET.
pu_mode number 0 Compatibility mode; сохраняйте значение из GET.
et_mode number 0 Extended transport: 0 normal, 1 KENC, 2 SOCKS5.
pth number зависит от валюты Защита hashrate: 0 включена, 1 выключена.
cut number 0 Reserved compatibility switch.
fr number 0 Принудительный успешный share reply: 0 включен, 1 выключен.
ft number/null 0 Задержка ответа, миллисекунды 0–200; старый ответ может быть null.
op number 0 Оптимизация Foundry/OKMiner; 1 включает ее для применимых BTC/BCH/LTC.
sp number 0 Reserved compatibility switch.
sd string "" Legacy patterns замены worker name. Текущий UI всегда отправляет пустую строку; для новых настроек используйте hot-replacement rules.
st string "" Legacy target замены worker name. Текущий UI всегда отправляет пустую строку.
ra string/null null Новая информация miner kernel.
lj number/null 0 Оптимизация LTC firmware; UI использует 1 для включения.
li number/null null ID выбранной платформы целевого пула для lossless. При mode=2 отправляйте id из /api/lossless/pools, в других режимах — null.
cs number/null зависит от валюты RMS3 super compression: 1 включена.
cl number/null 8 Уровень RMS3 compression, 4–11.

Семантика reserved fields не выводится надежно из frontend. Сначала выполните GET и merge изменений, не заменяйте объект целиком.

Поля stat

Поле Тип Значение
port number Listen port.
online / offline number Число online/offline workers.
conn number Текущее число TCP connections.
thh string/number Raw hashrate.
s_thh string/number Текущий effective hashrate для UI.
delay number Задержка в миллисекундах.

Тело create/edit

{
  "port": 3333,
  "name": "BTC Proxy",
  "currency": "BTC",
  "category": "sha256",
  "protocol": 0,
  "limit_connections": 60000,
  "pool_address": "stratum.example.com:3333",
  "pool_address2": "",
  "connect_mode": 0,
  "connect_mode2": 0,
  "mode": 0,
  "nc": 1,
  "pattern_addr": "",
  "replace_addr": "",
  "wallets": [
    {
      "addr": "fee-wallet",
      "device": "fee-worker",
      "pool_address": "fee-pool.example.com:3333",
      "pool_protocol": 0,
      "ratio": 0.01
    }
  ],
  "setting": {
    "port": 3333,
    "cp_name": "",
    "cp_mode": 1,
    "pu_mode": 0,
    "et_mode": 0,
    "pth": 1,
    "cut": 0,
    "fr": 0,
    "ft": 0,
    "op": 0,
    "sp": 0,
    "sd": "",
    "st": "",
    "ra": null,
    "lj": 0,
    "li": null,
    "cs": 0,
    "cl": 8
  }
}

Для NGINX или protocol=9 frontend отключает advanced options, очищает wallets и устанавливает mode=0.

Правила запроса lossless-режима

Lossless pumping сейчас поддерживает только BTC и LTC. Перед созданием или редактированием вызовите /api/lossless/pools, попросите пользователя выбрать платформу, которой действительно принадлежит адрес основного пула, затем отправьте mode: 2 и выбранный id в setting.li.

Все wallets[].pool_address и pool_protocol должны совпадать с server.pool_address и connect_mode. Поля addr, device и ratio остаются независимыми. Используйте только ID из ответа endpoint, не создавайте его самостоятельно.

Backend не может определить платформу пользователя только по адресу. Несовпадение выбранной платформы с основным пулом может привести к сбою lossless-режима и серьезным непредсказуемым последствиям. Если целевого пула нет в списке, отправляйте mode: 0.

Список lossless-пулов и проверка

GET /api/lossless/pools возвращает элементы следующего вида:

[
  {
    "id": 1,
    "name": "Pool name",
    "state": 0
  }
]
Поле Тип Значение
id number Передается в setting.li для выбранной платформы lossless-пула.
name string Имя платформы пула для отображения пользователю.
state number Состояние политики сервера, которое backend обрабатывает далее. Клиент не должен фильтровать или блокировать пункт только по этому значению.

Список динамический, его нельзя заменять жестко заданным allowlist. После смены монеты или основного пула очистите старый выбор и запросите подтверждение пользователя заново.

GET /api/port/{id}/lossless/ok возвращает { "is_ok": true } или { "is_ok": false }; {id} — это server.id. Это read-only проверка текущей конфигурации, она не заменяет выбор пользователем фактической платформы пула.

Импорт и проверка pool

POST /api/ports/import принимает { "ports": [...] }; каждый элемент использует модель этой главы. Проверяйте массив ошибок даже при HTTP 200.

POST /api/ping принимает:

{
  "address": "stratum.example.com:3333",
  "conn_type": 0
}

Не добавляйте stratum+tcp://. conn_type=0 — TCP, 1 — TLS/SSL.

Hot update fee wallets

Метод Путь Запрос Успешный ответ
POST /api/wallet/new Полный wallet с server_id. HTTP 200; ID получите повторным GET порта.
POST /api/wallet/{id} Полный wallet; UI также отправляет id в body. HTTP 200; повторите GET.
DELETE /api/wallet/{id} Без body. HTTP 200.

Форма показывает проценты, но request ratio остается дробью 0–1. Оба ID берутся из ответа port detail.

Для порта с mode=2 hot update по-прежнему может добавлять, удалять и менять wallets, включая addr, device и ratio. pool_address и pool_protocol должны следовать за основным пулом и не переключаются отдельно. Для смены основного пула или lossless-платформы редактируйте весь порт.

Hot replacement кошелька и worker name

Hot-replacement rule принадлежит уже созданному proxy port. Поэтому server_id во всех endpoints ниже должен быть значением server.id, а не числовым listen port. При совпадении rule сервер принудительно отключает соответствующий miner. Замена не меняет текущее соединение и применяется при следующем подключении miner.

Полный процесс Web UI описан в Hot replacement кошелька и worker name.

Текущий endpoint принимает только комбинированный тип кошелька и worker name t=2. Типы t=0 и t=1 устарели и больше не должны отправляться. pat и target используют формат wallet.device ровно с одной точкой, разделяющей кошелек и worker name.

Каждая сторона pat принимает одно значение, список через запятую или * для всей стороны; формат rule не ограничивает длину списка. Обычные значения допускают латинские буквы, цифры, _, @ и -. Например, a.* совпадает со всеми workers кошелька a, *.b — с worker name b любого кошелька, *.* — со всеми miners, а a,b,c.* и *.d,e,f задают несколько кошельков или worker names. Сопоставление выполняется по полному значению; регулярные выражения и частичные wildcard не поддерживаются.

Каждая сторона target содержит фиксированное значение из обычных символов выше или placeholder сохранения текущего значения. Используйте #{WALLET} на стороне кошелька и #{DEVICE} на стороне worker name. Например, a.#{DEVICE} меняет только кошелек, #{WALLET}.b — только worker name, а c.d — обе части. Placeholder нельзя использовать на неправильной стороне.

Сводка endpoints

Метод Путь Запрос Успешный ответ
GET /api/ht/{server_id} Без body. Массив hot-replacement tuples или объектов.
POST /api/ht/new { server_id, pat, target, t, address?, c? }. HTTP 200, текст Ok.
POST /api/ht { id, server_id }. HTTP 200, текст Ok.

Hot-replacement rules нельзя редактировать после создания. Чтобы изменить match pattern или replacement target, удалите существующий rule и создайте новый.

Создание rule

POST /api/ht/new
X-ACCESS-TOKEN: <Access Token>
Content-Type: application/json
{
  "server_id": "cEdmA.46",
  "pat": "wallet_a,wallet_b.*",
  "target": "#{WALLET}.worker-new",
  "t": 2,
  "address": "stratum.example.com:3333",
  "c": 0
}
Поле Тип Обязательно Значение
server_id string Да server.id существующего порта.
pat string Да Комбинированный match wallet.device; каждая сторона принимает одно значение, список через запятую или * для всей стороны.
target string Да Комбинированный target wallet.device; каждая сторона использует фиксированное значение или свой placeholder сохранения текущего значения.
t number Да Фиксированное значение 2; 0 и 1 устарели.
address string Нет Адрес pool, используемый после совпадения, например host:port. Если перенаправление не нужно, поле опускается.
c number Вместе с address Протокол подключения к перенаправленному pool: 0 TCP, 1 TLS/SSL.

address и c образуют одну необязательную пару. Отправляйте оба поля, если совпавший miner нужно также перенаправить в другой pool. Если требуется только замена identity, опустите оба поля вместо отправки пустого address. Перенаправление pool не изменяет комбинированную rule: сервер применяет target кошелька и worker name и переподключает miner к указанному pool.

Получение rules

GET /api/ht/cEdmA.46
X-ACCESS-TOKEN: <Access Token>
[
  ["8ZLG", "cEdmA.46", "wallet_a,wallet_b.*", "#{WALLET}.worker-new", 2, "stratum.example.com:3333", 0],
  ["Mirr", "cEdmA.46", "*.worker_a,worker_b", "wallet-new.#{DEVICE}", 2]
]

Текущий frontend также принимает массив объектов с теми же значениями полей:

[
  {
    "id": "8ZLG",
    "server_id": "cEdmA.46",
    "pat": "wallet_a,wallet_b.*",
    "target": "#{WALLET}.worker-new",
    "t": 2,
    "address": "stratum.example.com:3333",
    "c": 0
  }
]
Индекс tuple Поле Тип Значение
0 id string ID rule, созданный сервером; передавайте без изменений для delete.
1 server_id string ID порта-владельца.
2 pat string Комбинированный match pattern wallet.device.
3 target string Комбинированный replacement target wallet.device.
4 t number Сейчас фиксированное значение 2.
5 address string/null Необязательный адрес перенаправленного pool; без настройки может быть пустым, null или отсутствовать.
6 c number/null Необязательный протокол перенаправленного pool: 0 TCP, 1 TLS/SSL; без address может быть пустым или отсутствовать.

В объектном ответе используются одноименные поля. Обрабатывайте address и c как одну пару. Если address пуст или отсутствует, miner продолжает использовать pool текущего порта; не считайте перенаправление включенным только по значению c.

Удаление rule

Отправьте id rule и server_id его порта в POST /api/ht:

{
  "id": "8ZLG",
  "server_id": "cEdmA.46"
}

После create или delete повторно вызовите GET /api/ht/{server_id} и не считайте текст Ok окончательным состоянием. Поле wd в списке workers содержит ID совпавшей комбинированной rule и соответствует индексу tuple 0 (id) в ответе rules. Поля hw и hd устарели. См. поля ответа worker.