229 / 736JNP

Job Negotiation

Майнити разом, але самостійно обирати вміст блоку

Анна майнить у пулі — групі, яка спільно обліковує роботу й розподіляє винагороди. Проте вона не хоче, щоб оператор завжди визначав за неї ще й список транзакцій. Наприклад, вона прагне включити дійсний платіж, пропущений у виданому їй шаблоні. Шаблон — це проєкт майбутнього блоку: серед іншого він визначає, які транзакції мають до нього ввійти. Job Negotiation розділяє ці питання: майнер може пропонувати вміст блоку й водночас залишатися в системі спільних винагород. Для цього потрібна підтримка програми та іншої сторони. Власний вибір не дає права обходити правила Bitcoin.

Job Negotiation — домовленість між майнером і пулом про власне майнінгове завдання. Stratum V2 визначає правила обміну даними між майнінговими пристроями та пулом. Job Declaration Protocol — його частина для власних пропозицій, яка працює разом із передаванням шаблонів і завдань. Мета — дозволити вибір транзакцій, поки пул продовжує облік роботи й виплати. Вирішальне значення має справжня конфігурація, а не лише назва з’єднання.

Анна переходить на Stratum V2, але список транзакцій і далі отримує від пулу. Суперечності немає. Mining Protocol, частина для передавання роботи та результатів, може діяти без Job Declaration і Template Distribution. Остання надає шаблони блоків, а Job Declaration опрацьовує власні пропозиції. Для Анниного вибору потрібні й ці ролі та пул, який їх підтримує. Сучасніший спосіб передавання сам собою ще не визначає, хто обирає вміст блоку в мережі Bitcoin. [1] [4]

Вибрані платежі не можуть заповнити блок настільки, що його транзакція винагороди coinbase вже не вміститься. Тому постачальник шаблону, Template Provider, має знати потрібний резерв. На боці Анни працює програма JDC, скорочено Job Declarator Client. Вона з’ясовує вимоги використовуваних пулів і надсилає їх постачальнику шаблону в повідомленні з даними CoinbaseOutputConstraints. Резервують місце для даних і sigops, операції перевірки підписів, що враховуються в ліміті блоку. Інакше додані виходи coinbase, записи про призначення коштів, могли б перевищити ліміти блоку. Власний вибір має від початку враховувати дійсність усього результату. [3]

У режимі Full-Template JDC надсилає DeclareMiningJob до JDS — Job Declarator Server на боці пулу або в службі, якій пул довіряє. Повідомлення містить ідентифікатори вибраних транзакцій. Якщо серверу бракує якоїсь із них, він може запросити дані через ProvideMissingTransactions. Отже, Анна ділиться відомостями для перевірки її вибору. Підтвердження декларації та подальше прийняття власного завдання пулом — два окремі кроки. Перше успішне повідомлення ще не завершує всієї домовленості. [2]

У режимі Coinbase-only JDC не розкриває набір транзакцій, а DeclareMiningJob не використовується. Пул оцінює дохід за наданою coinbase. Це приховує Аннин вибір від пулу, але саме собою не доводить дійсності прихованих транзакцій чи справжнього розміру їхніх комісій. Специфікація прямо описує цей ризик. Менша кількість переданих даних означає й інші можливості перевірки; назва режиму не гарантує, що всі умови винагороди належно підтверджені. Ця приватність стосується проєкту під час майнінгу. Якщо Анна знайде дійсний блок і поширить його в мережі, його транзакції стануть видимими. [2]

У технічному обміні є кілька схожих позначень. JDS надає mining_job_token, на який клієнт посилається в SetCustomMiningJob. Прийнявши завдання, пул повертає SetCustomMiningJob.Success із власним job_id. Токен і job_id мають різні ролі: перший пов’язує домовленість про пропозицію, другий позначає роботу під час подання результатів. Це схоже на номер заявки й номер схваленого замовлення. Плутанина завадила б пулу віднести результат до правильного прийнятого завдання. [1]

Очікування кожного мережевого кроку даремно затримувало б обладнання. Коли клієнт має потрібний токен і шаблон, він може почати оптимістичний майнінг ще до SetCustomMiningJob.Success. Знайдені shares, часткові результати, що доводять роботу за ціллю пулу, зберігаються до підтвердження. Після прийняття завдання їх можна надіслати з призначеним ідентифікатором. Тому працюючий пристрій ще не доводить, що пул прийняв або зарахував роботу. Початок обчислень і згода винагороджувати завдання — різні моменти. [1] [2]

Якщо Анна отримує SetCustomMiningJob.Error або не дочікується відповіді за розумний час, специфікація рекомендує інший пул або самостійний майнінг. Стійкість залежить від працездатного fallback, підготовленого запасного шляху. Якби програма непомітно перейшла на початковий шаблон пулу, який відмовив, вона могла б зберегти роботу, але втратила б Аннин вибір. Тому важливо знати, що система насправді робить після відмови. Описана протоколом можливість не доводить, що її підтримує кожна служба. [1] [4]

Анна хоче обирати транзакції та зберегти спільні винагороди. Тому її JDC має призначити суму визначеному виходу пулу в coinbase, щоб виконати умови цих винагород. Якщо вона спрямовує частину доходу деінде, пул може пропорційно зменшити оплату цієї роботи. Job Declaration не створює автоматичної прямої виплати майнеру й не прибирає облікових умов служби. Насамперед він змінює те, хто може пропонувати вміст блоку; правила його дійсності та розподіл доходу слід оцінювати окремо. [2]

Для повної картини прочитайте також Stratum V2, getblocktemplate, Mining Pool, Block Template, Bitcoin. На цю статтю також посилаються Stratum V2, Mining Pool Centralization.

DOC · 001Stratum V2 — Mining Protocol and Custom JobsСпецифікація DOC · 002Stratum V2 — Job Declaration ProtocolСпецифікація DOC · 003Stratum V2 — Template Distribution ProtocolСпецифікація DOC · 004SRI — Pool and miner application rolesПервинне джерело
Переглянуто: Спочатку джерела · Не інвестиційна порада