93 / 736SV1

Stratum V1

Как майнинговое устройство общается с пулом

Stratum V1 — общий язык майнингового устройства и пула: он передаёт задания, возвращает результаты и позволяет измерять выполненную работу. В 2012 году его представил Marek Palatinus, известный как Slush.

Stratum V1 — протокол связи для совместного майнинга Bitcoin. Пул отправляет задания по постоянно открытому соединению, а оборудование возвращает результаты. Сам протокол не задаёт размер вознаграждения или правила проверки блоков Bitcoin.

Ева подключила ASIC, специализированную машину для майнинга Bitcoin, к пулу. Пул координирует майнеров, которые ищут следующий блок — пакет транзакций для добавления в историю Bitcoin. Одной вычислительной мощности недостаточно: устройству нужно задание, а пулу — способ определить вклад Евы. Эту беседу обеспечивает Stratum V1. Пул передаёт работу для поиска следующего блока, машина вычисляет и возвращает промежуточные результаты. Как язык телефонного разговора, протокол помогает сторонам понимать друг друга. Но цену работы он не устанавливает. Её определяют отдельные правила вознаграждения пула, а действительность найденного блока проверяют узлы Bitcoin. [4] [2]

По мере ускорения оборудования старый getwork становился неудобным. Он выдавал небольшие порции работы, и машинам приходилось часто запрашивать новые. Marek Palatinus представил новое предложение 11 сентября 2012 года. Stratum держит соединение открытым, поэтому пул может прислать изменение задания, не дожидаясь следующего запроса. Это снижает накладные расходы на связь. Остальные части майнинга он не заменяет: пул по-прежнему может получать проект блока от узла Bitcoin методом getblocktemplate, описанным в BIP 22. [11] [3] [5]

Управляющая программа обычно сначала отправляет mining.subscribe — запрос на получение работы. В ответ приходят сведения о соединении и данные, отличающие её вычисления. mining.authorize затем связывает устройство с учётной записью. Worker здесь означает идентификатор машины или подключения, а не наёмного работника. Ева может различать несколько устройств в одной учётной записи. Возможный пароль в этом сообщении сам по себе не подтверждает подлинность сервера и не шифрует связь. Успешный вход ещё не доказывает безопасность соединения. [2] [13]

mining.notify приносит задание с обозначением job_id. Оно содержит ссылку на предыдущий блок, данные о транзакциях, время и другие сведения заголовка — краткого набора данных о блоке. Важен флаг clean_jobs. true требует отказаться от старых заданий; false позволяет ещё продолжать предыдущее, переходя к новому. Поэтому не каждое новое сообщение автоматически делает все текущие результаты непригодными. Само задание также лишь кандидат для вычислений, а не уже действительный блок. [2] [13]

Это технический раздел; для обычного подключения не нужно знать каждое поле. Пул передаёт две части coinbase-транзакции, через которую выплачивается награда за блок; речь не об одноимённой бирже. Программа вставляет между ними назначенный пулом extranonce1 и собственный extranonce2, получая новые варианты работы. Из транзакции и полученных Merkle branches, промежуточных значений древовидной сводки транзакций, она вычисляет Merkle root. Вместе со ссылкой на предыдущий блок, версией, временем и закодированной границей для искомого hash он образует основу заголовка размером 80 байтов. ASIC многократно вычисляет его hash, числовой отпечаток, меняя nonce — число для очередных попыток. [2] [4] [13] [14]

Целый блок находят редко. Поэтому пул устанавливает более лёгкий порог результата, называемый target. Подходящий результат — mining share, свидетельство выполненной работы. Большинство shares не удовлетворяет более строгому порогу сети Bitcoin; иногда результат соответствует и ему, помогая создать действительный блок. mining.set_difficulty и автоматическая настройка vardiff меняют сложность shares, чтобы они поступали с разумной частотой. Сложность сети они не меняют. Выполнение более сложного условия требует в среднем больше вычислений, поэтому такой результат имеет больший вес при измерении работы. Меньшее число более трудных shares само по себе не означает меньшую оплату: важны их вес и правила пула. [2] [4] [13]

Через mining.submit устройство отправляет идентификатор worker, job_id, extranonce2, nTime (время, указанное в заголовке) и nonce. Пул восстанавливает результат и проверяет его. duplicate означает повторную отправку той же работы, low difficulty — недостаточный результат, stale — работу над заданием, которое больше не принимается. Ева поэтому следит за отказами и задержками соединения, а не только за скоростью машины. Даже принятый share ещё не является выплатой в кошелёк: Stratum передаёт работу, а начисление и выплата награды подчиняются отдельным правилам. [2] [13]

BIP 310, предложенный в 2018 году, описывает согласование дополнительных возможностей через mining.configure. Документ, проверенный 17 октября 2026 года, всё ещё имеет статус Draft, то есть проекта. Version-rolling разрешает менять только согласованные биты версии заголовка; после согласования у mining.submit появляется шестое поле. Это не право произвольно менять правила Bitcoin. minimum-difficulty и subscribe-extranonce касаются запрашиваемой минимальной сложности shares и уведомлений о новых значениях extranonce. Согласование возможностей предотвращает недоразумения между программами, но само по себе не обеспечивает шифрование. [6]

V1 часто работает по незашифрованному TCP. Без дополнительной защиты кто-то на пути передачи может читать или изменять сообщения и пытаться перенаправить работу. В исследовании Hardening Stratum 2017 года эти риски проверили на практике. Они касаются соединения машины с пулом, а не взлома Bitcoin. В обычной схеме пул также выбирает транзакции для блока. Ева владеет оборудованием, но это ещё не значит, что она определяет содержимое блока. Узлы Bitcoin по-прежнему отклонят блок, нарушающий правила, даже если его создал крупный пул. [7] [4]

Stratum V2 вводит более компактные двоичные сообщения и криптографически защищённое соединение. Отдельный компонент Job Declaration может позволить майнеру предлагать собственный набор транзакций для блока, если обе стороны его поддерживают и используют. Преобразователь V1/V2 или сама надпись V2 этого не доказывает. Еве стоит проверить поддержку прошивки, правильность адреса сервера, защиту связи, отклонённые результаты и резервные подключения. Главная идея V1 проста: доставить работу, подтвердить вычисления и отделить это от выбора содержимого блока и выплаты. [8] [12] [10]

Для полной картины прочитайте эту статью вместе с Bitcoin, Майнинг, Mining Pool, Braiins, Braiins Pool, Марек «Slush» Палатинус. На эту статью также ссылаются Mining Pool, Марек «Slush» Палатинус, Braiins, Braiins Pool.

DOC · 001Original Stratum mining protocol announcementПервичный источник DOC · 002Bitcoin Wiki — Stratum mining protocolДокументация DOC · 003Braiins — Past and future of mining protocolsПервичный источник DOC · 004Bitcoin Developer Guide — Pooled MiningДокументация DOC · 005BIP 22 — getblocktemplate fundamentalsПервичный источник DOC · 006BIP 310 — Stratum protocol extensionsПервичный источник DOC · 007Hardening Stratum research paperПервичный источник DOC · 008Stratum V2 Mining Protocol specificationПервичный источник DOC · 009Galaxy Research — Future of Bitcoin mining protocolsДокументация DOC · 010Braiins Academy — Stratum V2 ManualДокументация DOC · 011Slush — Stratum proposal, 11 September 2012Первичный источник DOC · 012Stratum V2 — Job Declaration ProtocolПервичный источник DOC · 013Original Stratum protocol specification (archived)Первичный источник DOC · 014Bitcoin Developer Reference — Block HeadersПервичный источник
Обновлено: Сначала источники · Не является инвестиционной рекомендацией