226 / 691XNONCE

Extranonce

Дополнительные изменяемые данные для майнинга

Extranonce расширяет пространство попыток изменением coinbase и её обязательства в заголовке. Это не отдельное дополнительное поле заголовка, и пул не разрешает каждому майнеру свободно менять все его байты.

Extranonce — изменяемые данные, обычно вставляемые во вход транзакции coinbase. Их изменение даёт новые данные для корня Merkle и хеширования заголовка без расширения его 32-битного поля nonce.

Поле nonce имеет 32 бита и даёт 2^32 значений для в остальном одинакового заголовка. Extranonce не удлиняет это поле. Он меняет другие данные, позволяя составить новый заголовок и снова перебирать nonce. [Bitcoin Developer Guide — Mining and nonce space]

Изменение extranonce в coinbase меняет её сериализацию и TXID; пересчитываются соответствующая ветвь дерева Merkle и корень Merkle в заголовке. Другие транзакции менять не требуется. Старый корень нельзя просто оставить без пересчёта. [Bitcoin Developer Guide — Mining and nonce space]

Два полностью свободных байта дают 2^16 вариантов. В модели с 32-битным nonce и остальными фиксированными данными это 2^48 входных комбинаций. Это пространство разных попыток, не число найденных блоков и не гарантия успеха после полного перебора. [Bitcoin Developer Guide — Mining and nonce space]

BIP 34 требует правильно закодированную высоту блока в начале scriptSig coinbase. Предел 100 байт относится ко всему этому scriptSig, не только extranonce. Свободная область не должна перезаписывать высоту или нарушать формат транзакции. [BIP 34 — Height in coinbase] [Bitcoin Developer Reference — Coinbase input]

Stratum V2 делит extended extranonce на фиксированный upstream-префикс, локально зарезервированную часть и downstream-пространство. Это предотвращает бесполезное перекрытие поиска. Назначенный extranonce_prefix не становится автоматически областью, которую конечный майнер вправе свободно менять. [Stratum V2 — Extended extranonce and jobs]

В SubmitSharesExtended coinbase собирается в порядке coinbase_tx_prefix, extranonce_prefix, extranonce и coinbase_tx_suffix. Отправленные байты extranonce должны иметь согласованную длину. То же число, записанное меньшим количеством байтов, не обязательно создаёт ту же транзакцию. [Stratum V2 — Extended extranonce and jobs]

Standard Job в Stratum V2 использует фиксированный корень Merkle; меняются только разрешённые части version, nonce и nTime. Стандартное устройство не отправляет extranonce само, как extended-канал. Вышестоящий узел может менять coinbase при подготовке нового задания. [Stratum V2 — Extended extranonce and jobs]

SetExtranoncePrefix в Stratum V2 относится к заданиям, отправленным после сообщения в данном канале. Результат должен оставаться связанным с правильным job_id и выделенным пространством. Последний префикс не заменяет запись о задании, породившем старый результат. [Stratum V2 — Extended extranonce and jobs]

Для полной картины прочитайте эту статью вместе с Nonce, Дерево Merkle, Mining Share, Block Template. На эту статью также ссылаются ASIC Miner, Block Template, getblocktemplate.

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Документация ↗
Сначала источники · Не является инвестиционной рекомендацией