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.