Документация
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.
