Stratum спецификация
Протокол Stratum используется для общения между майнерами и сервером майнинг-пула, и включает в себя несколько важных команд и форматов сообщений. Спецификация протокола Stratum описывает как майнеры и серверы передают данные, какие команды и параметры используются, а также как происходит взаимодействие между ними.
Общая структура Stratum:
- Транспортный слой: Stratum работает поверх TCP или WebSocket, что позволяет подключаться к серверу через стандартные сетевые соединения.
- Структура сообщения: Сообщения Stratum имеют структуру JSON-RPC, где данные представляются в виде JSON-объектов.
Основные команды и их описание:
1. Mining.subscribe
- Цель: Инициализация подключения к пулу и подписка на работу с пулом.
- Описание: Майнер отправляет серверу команду
subscribeдля начала работы. - Пример запроса:
123456{"id": 1,"method": "mining.subscribe","params": []} - Пример ответа:
123456789{"id": 1,"result": [["mining.set_difficulty", []],["mining.notify", []]],"error": null}
- В ответе сервер отправляет команды, на которые майнер может подписаться, например,
mining.set_difficultyиmining.notify.
2. Mining.authorize
- Цель: Авторизация майнера в пуле с указанием идентификатора (например, адреса кошелька).
- Описание: После подписки майнер должен авторизоваться, предоставив свой идентификатор (например, кошелек для выплат).
- Пример запроса:
123456{"id": 2,"method": "mining.authorize","params": ["wallet_address", "worker_name"]}-
wallet_address: Идентификатор кошелька или адрес для получения вознаграждений.worker_name: Имя рабочего устройства (опционально).
- Пример ответа:
Ответ подтверждает успешную авторизацию.123456{"id": 2,"result": true,"error": null}
-
Mining.notify
- Цель: Передача задания для майнинга (новая задача).
- Описание: Когда сервер готов предоставить задачу для вычислений, он отправляет команду
notify. Это сообщение включает в себя блок и данные, которые майнер должен использовать для вычисления хеша. - Пример запроса: Сервер отправляет информацию о новой задаче.
12345678910111213141516{"id": 3,"method": "mining.notify","params": ["job_id","prevhash","coinbase1","coinbase2","merkleroot","version","nbits","ntime","clean_jobs"]} - Параметры:
job_id: Идентификатор задания.prevhash: Хеш предыдущего блока.coinbase1,coinbase2: Данные для создания транзакции coinbase.merkleroot: Корень дерева Меркла.version: Версия блока.nbits: Сложность блока.ntime: Время для текущего блока.clean_jobs: Признак очистки старых задач (обычноfalse).
4. Mining.submit
- Цель: Отправка найденного решения задачи (например, хеша).
- Описание: Когда майнер находит решение задачи, он отправляет его обратно на сервер пула.
- Пример запроса:
123456{"id": 4,"method": "mining.submit","params": ["worker_name", "job_id", "ntime", "nonce"]}worker_name: Имя рабочего устройства, отправляющего решение.job_id: Идентификатор задания.ntime: Время, использованное для вычислений.nonce: Значение nonce, найденное в процессе майнинга.
- Пример ответа:
Ответ подтверждает, что решение было принято пулом.123456{"id": 4,"result": true,"error": null}
5. Mining.set_difficulty
- Цель: Установка сложности задачи.
- Описание: Сервер может изменять сложность задачи для майнера в зависимости от текущей ситуации в сети.
- Пример запроса:
123456{"id": 5,"method": "mining.set_difficulty","params": [new_difficulty]}new_difficulty: Новая сложность задачи для майнера. - Пример ответа:
123456{"id": 5,"result": true,"error": null}
6. Mining.ping
- Цель: Проверка живости соединения.
- Описание: Пул или майнер может использовать команду
pingдля того, чтобы проверить, что соединение не потеряно. - Пример запроса:
123456{"id": 6,"method": "mining.ping","params": []} - Пример ответа:
123456{"id": 6,"result": true,"error": null}
Структура сообщения
Каждое сообщение Stratum в формате JSON имеет общую структуру:
|
1 2 3 4 5 6 7 |
{ "id": <id>, // Идентификатор запроса (целое число) "method": <method_name>, // Метод или команда (строка) "params": <params_array>, // Параметры команды (массив) "error": <error_object> // Ошибки (если есть) } |
id: Идентификатор запроса, который помогает сопоставить запрос и ответ.method: Имя вызываемой команды.params: Параметры, передаваемые с запросом.error: Ошибка, если она возникла (если нет ошибки, тоnull).
Заключение
Протокол Stratum — это эффективный и масштабируемый способ обмена данными между майнерами и пулами. Он использует структуру JSON-RPC для обмена сообщениями и включает в себя команды для подписки, авторизации, задания сложности, уведомления о новых задачах и отправки решений. Этот протокол стал де-факто стандартом в индустрии майнинга благодаря своей простоте, скорости и поддержке множества майнинговых платформ.
