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Первинне джерело
Переглянуто: Спочатку джерела · Не інвестиційна порада