IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Stratum спецификация

Протокол Stratum используется для общения между майнерами и сервером майнинг-пула, и включает в себя несколько важных команд и форматов сообщений. Спецификация протокола Stratum описывает как майнеры и серверы передают данные, какие команды и параметры используются, а также как происходит взаимодействие между ними.

Общая структура Stratum:

  1. Транспортный слой: Stratum работает поверх TCP или WebSocket, что позволяет подключаться к серверу через стандартные сетевые соединения.
  2. Структура сообщения: Сообщения Stratum имеют структуру JSON-RPC, где данные представляются в виде JSON-объектов.

Основные команды и их описание:

1. Mining.subscribe

  • Цель: Инициализация подключения к пулу и подписка на работу с пулом.
  • Описание: Майнер отправляет серверу команду subscribe для начала работы.
  • Пример запроса:
     
  • Пример ответа:
     
  • В ответе сервер отправляет команды, на которые майнер может подписаться, например, mining.set_difficulty и mining.notify.

2. Mining.authorize

  • Цель: Авторизация майнера в пуле с указанием идентификатора (например, адреса кошелька).
  • Описание: После подписки майнер должен авторизоваться, предоставив свой идентификатор (например, кошелек для выплат).
  • Пример запроса:
      • wallet_address: Идентификатор кошелька или адрес для получения вознаграждений.
      • worker_name: Имя рабочего устройства (опционально).
    • Пример ответа:
      Ответ подтверждает успешную авторизацию.

Mining.notify

  • Цель: Передача задания для майнинга (новая задача).
  • Описание: Когда сервер готов предоставить задачу для вычислений, он отправляет команду notify. Это сообщение включает в себя блок и данные, которые майнер должен использовать для вычисления хеша.
  • Пример запроса: Сервер отправляет информацию о новой задаче.
     
  • Параметры:
    • job_id: Идентификатор задания.
    • prevhash: Хеш предыдущего блока.
    • coinbase1, coinbase2: Данные для создания транзакции coinbase.
    • merkleroot: Корень дерева Меркла.
    • version: Версия блока.
    • nbits: Сложность блока.
    • ntime: Время для текущего блока.
    • clean_jobs: Признак очистки старых задач (обычно false).

4. Mining.submit

  • Цель: Отправка найденного решения задачи (например, хеша).
  • Описание: Когда майнер находит решение задачи, он отправляет его обратно на сервер пула.
  • Пример запроса:
    • worker_name: Имя рабочего устройства, отправляющего решение.
    • job_id: Идентификатор задания.
    • ntime: Время, использованное для вычислений.
    • nonce: Значение nonce, найденное в процессе майнинга.
  • Пример ответа:
    Ответ подтверждает, что решение было принято пулом.

5. Mining.set_difficulty

  • Цель: Установка сложности задачи.
  • Описание: Сервер может изменять сложность задачи для майнера в зависимости от текущей ситуации в сети.
  • Пример запроса:
    new_difficulty: Новая сложность задачи для майнера.
  • Пример ответа:
     

6. Mining.ping

  • Цель: Проверка живости соединения.
  • Описание: Пул или майнер может использовать команду ping для того, чтобы проверить, что соединение не потеряно.
  • Пример запроса:
     
  • Пример ответа:
     

Структура сообщения

Каждое сообщение Stratum в формате JSON имеет общую структуру:

  • id: Идентификатор запроса, который помогает сопоставить запрос и ответ.
  • method: Имя вызываемой команды.
  • params: Параметры, передаваемые с запросом.
  • error: Ошибка, если она возникла (если нет ошибки, то null).

Заключение

Протокол Stratum — это эффективный и масштабируемый способ обмена данными между майнерами и пулами. Он использует структуру JSON-RPC для обмена сообщениями и включает в себя команды для подписки, авторизации, задания сложности, уведомления о новых задачах и отправки решений. Этот протокол стал де-факто стандартом в индустрии майнинга благодаря своей простоте, скорости и поддержке множества майнинговых платформ.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *