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 для обмена сообщениями и включает в себя команды для подписки, авторизации, задания сложности, уведомления о новых задачах и отправки решений. Этот протокол стал де-факто стандартом в индустрии майнинга благодаря своей простоте, скорости и поддержке множества майнинговых платформ.
Recommended Posts
Плата за транзакции и их влияние на майнинг
19.04.2022