226 / 736XNONCE

Extranonce

Звідки майнер бере нові варіанти для пошуку

Алена вивчає, як з’являється новий блок. Майнер змінює вхідні дані й обчислює їхній хеш — короткий відбиток, числове значення якого має відповідати умові мережі. Та що робити, коли всі значення одного змінюваного поля вже випробувано без успіху? Extranonce дає змогу підготувати нові варіанти й шукати далі. Він не послаблює правил Bitcoin і не обіцяє винагороди, а допомагає пристроям не повторювати ті самі спроби.

Extranonce — це додаткові змінювані дані, які програма для майнінгу зазвичай розміщує в coinbase, особливій першій транзакції блоку, що нараховує винагороду за майнінг. Зміна цих даних змінює спільний відбиток транзакцій у заголовку блоку й дає нові вхідні дані для пошуку. Окреме поле nonce в заголовку при цьому не збільшується.

Заголовок стисло описує дані блоку. Біт зберігає нуль або одиницю; вісім бітів утворюють байт. Зокрема, заголовок містить поле nonce завдовжки 32 біти, що дає 2^32 значень за незмінної решти даних. Повторна перевірка того самого заголовка з тим самим nonce дасть той самий хеш і результат. Extranonce не подовжує це поле: він змінює інші дані, з яких готують новий заголовок. Алена може уявити нове завдання, для якого лічильник можна перебрати знову. На практиці в межах правил можуть змінюватися й інші частини заголовка. [1] [5]

Coinbase тут означає першу транзакцію кожного блоку, а не біржу. Коли програма змінює її extranonce, змінюються закодовані дані транзакції та TXID — обчислений із них ідентифікатор. Через дерево послідовно об’єднуваних відбитків він пов’язаний із Merkle root, спільним відбитком транзакцій у заголовку. Програма має перерахувати відповідну гілку. Решта транзакцій може залишитися незмінною, але просто зберегти старий корінь не можна. Завдяки цьому ланцюжку обчислень новий заголовок дає інші дані для майнінгу. [1]

У простій моделі залишимо решту незмінною й дозволимо два цілком вільні байти extranonce. Вони дають 2^16 варіантів; разом із 32-бітовим nonce виходить 2^48 комбінацій вхідних даних. Це можливі спроби, а не кількість знайдених блоків. Алена не отримує легшої умови чи впевненості, що серед цих варіантів буде успішний. Користь практична: є де шукати далі. Додатковий вільний простір сам собою також не прискорює пристрій, який має виконати обчислення. [1]

Місце для extranonce — не порожній бланк без правил. BIP 34, конкретне правило Bitcoin, вимагає правильно закодованої висоти блоку, тобто його позиції в ланцюжку, на початку поля даних входу coinbase під назвою scriptSig. Обмеження 100 байтів стосується всього coinbase scriptSig, а не лише extranonce. Програма має залишити місце для обов’язкових даних і зберегти правильний формат. Якби Алена їх перезаписала, подальші обчислення шукали б розв’язок для недійсного блоку. [3] [4]

Під час спільного майнінгу в пулі різним пристроям варто шукати різні варіанти. Stratum V2, протокол передавання майнінгових завдань, використовує для цього й розподіл extranonce. Вищий сервер, upstream, призначає незмінний extranonce_prefix — початкову частину цих даних. Місцевий посередник може зарезервувати іншу частину для своїх клієнтів, а решту передати далі, downstream. Ці напрямки відносні до конкретного з’єднання. Призначений префікс не стає автоматично ділянкою, яку кінцевий майнер може змінювати: його сталість допомагає розділити роботу учасників. [2]

У розширеному каналі Stratum V2 повідомлення SubmitSharesExtended передає змінені байти разом із результатом. Coinbase складають у порядку coinbase_tx_prefix, extranonce_prefix, extranonce та coinbase_tx_suffix. Ці назви позначають частини даних, якими обмінюються програми для майнінгу. Поле extranonce повинно мати узгоджену довжину. Навіть якщо коротший запис виглядає як те саме число, інша послідовність байтів може створити іншу транзакцію. Комп’ютери порівнюють точні дані, а не приблизне людське тлумачення. [2]

Standard Job у Stratum V2 — завдання з фіксованим Merkle root. Кінцевий пристрій може змінювати лише дозволені частини version, nonce та nTime: версію, лічильник і час заголовка. Тому він не надсилає власний extranonce так, як це робить розширений канал. Програма вище в ланцюжку може підготувати нову coinbase та корінь і передати інше завдання. Отже, Алена може не знайти налаштування extranonce на своєму пристрої, хоча механізм використовується в усій системі. [2]

Уявімо, що новий префікс надійшов, поки обробляється результат попередньої роботи. SetExtranoncePrefix у Stratum V2 застосовується до завдань, надісланих після нього в цьому каналі, тобто відповідній майнінговій сесії. Результат має зберігати зв’язок із правильним job_id, ідентифікатором завдання, та його виділеним простором. Підставлення найновішого префікса всюди могло б змінити дані, що дали старіший результат. Extranonce потрібен для створення різних спроб і збереження їхніх зв’язків, а не для переписування завдань заднім числом. [2]

Для повної картини прочитайте також Nonce, Merkle Tree, Mining Share, Block Template, Bitcoin. На цю статтю також посилаються ASIC Miner, Stratum V1, Stratum V2, Block Template.

DOC · 001Bitcoin Developer Guide — Mining and nonce spaceДокументація DOC · 002Stratum V2 — Extended extranonce and jobsСпецифікація DOC · 003BIP 34 — Height in coinbaseСпецифікація DOC · 004Bitcoin Developer Reference — Coinbase inputДокументація DOC · 005NIST — Binary data unitsДокументація
Переглянуто: Спочатку джерела · Не інвестиційна порада