JSON-RPC
JSON-RPC — это лёгкий протокол удалённого вызова процедур (Remote Procedure Call), в котором запросы и ответы передаются в формате JSON. В контексте майнинга JSON-RPC является основой протокола Stratum, обеспечивая связь между майнером и пулом.
Как работает JSON-RPC в майнинге
Заголовок раздела «Как работает JSON-RPC в майнинге»JSON-RPC определяет простой формат обмена сообщениями. Каждое сообщение — это JSON-объект, содержащий имя вызываемого метода, параметры и идентификатор запроса. Ответ содержит результат выполнения или описание ошибки.
Представьте телефонный разговор между двумя людьми, говорящими на одном языке и по заранее согласованным правилам. Один говорит: «Пришли мне задание номер 42» (запрос), другой отвечает: «Вот задание номер 42, данные такие-то» (ответ). Если что-то пошло не так, ответ содержит объяснение ошибки. JSON-RPC — это тот самый «язык» и «набор правил», которые позволяют майнеру и пулу понимать друг друга.
В протоколе Stratum используются несколько ключевых JSON-RPC методов. Метод mining.subscribe инициирует соединение, mining.authorize проверяет учётные данные воркера, mining.notify отправляет новое задание майнеру, а mining.submit передаёт найденную шару от майнера к пулу. Каждый из этих методов — это JSON-RPC вызов с определённым набором параметров.
Формат JSON-RPC текстовый и легко читаемый человеком, что упрощает отладку. Однако текстовый формат менее эффективен по объёму передаваемых данных по сравнению с бинарными протоколами. Именно поэтому Stratum V2 перешёл на бинарный формат, сохранив концепцию удалённого вызова процедур, но отказавшись от JSON в пользу компактного бинарного представления.
Практический пример
Заголовок раздела «Практический пример»Майнер подключается к пулу и отправляет JSON-RPC запрос: метод mining.subscribe, параметры — название клиента. Пул отвечает JSON-RPC ответом, содержащим ExtraNonce1 и размер ExtraNonce2. Затем майнер отправляет mining.authorize с логином и паролем. Пул подтверждает авторизацию и начинает отправлять уведомления mining.notify с данными для формирования заголовков блоков. Всё взаимодействие — это обмен текстовыми JSON-сообщениями по TCP-соединению.