ASICBoost оптимизирует майнинг Bitcoin, повторно используя часть работы при вычислении хешей, цифровых отпечатков заголовков блоков. Некоторые затраты на попытки сокращаются, но условие успешного хеша не смягчается. Это требует подходящей подготовки заданий и конструкции вычислительного чипа.
При обработке похожих заказов общие сведения можно подготовить один раз, хотя каждый заказ всё равно нужно закончить отдельно. Так можно представить идею ASICBoost. Timo Hanke описал её в 2016 году, отметив сотрудничество с Sergio Demian Lerner. ASIC — чип для определённой вычислительной задачи; новая организация работы устраняет лишние повторения. Ни SHA-256, используемая хеш-функция, ни правила Bitcoin не меняются. Итоговый двойной хеш заголовка по-прежнему должен быть не больше целевого значения, а весь блок — действительным. [1]
Байт — единица измерения объёма цифровых данных. Заголовок кратко описывает данные блока и занимает 80 байтов. Первый проход хеширования обрабатывает 64 байта, затем оставшиеся 16 с предусмотренным дополнением. Merkle root, общий отпечаток транзакций, пересекает эту границу: его последние 4 байта находятся во второй части. Там же расположены время, bits — компактная запись цели майнинга, и nonce — счётчик, изменяемый между попытками. От изменяемых полей зависит, какие вычисления можно использовать повторно. [1]
Hanke называет подходящие задания colliding work items. Первые части их заголовков различаются и создают разные midstate, промежуточные состояния вычисления. При этом часть Message одинакова. Для выбранного nonce чип может совместно использовать message schedule, вспомогательные значения для обработки второй части первого SHA-256. Затем вычисления продолжаются отдельно из разных промежуточных состояний. Это не одинаковые конечные хеши и не взлом функции. Коллизия здесь означает совпадение выбранной части входных данных; первые части заголовков различны. [1]
Sergio Demian Lerner различает overt и covert ASICBoost. Overt меняет разрешённые биты nVersion, поля версии заголовка, без поиска частичного совпадения Merkle root. Covert ищет такое совпадение: последние 4 байта Merkle root остаются одинаковыми, а первая часть меняется. Для этого можно менять допустимые данные транзакций или их порядок, сохраняя зависимости между транзакциями и соответствие записанных отпечатков данным блока. Сами разные версии заголовков не доказывают конкретную экономию энергии и не устанавливают личность оператора. [2]
Пул координирует работу майнеров. Его сервер — компьютерная служба, с которой взаимодействует устройство, — принимает результаты на согласованных условиях. Устройство Петра не вправе произвольно менять заголовок. Документ под номером BIP310 описывает согласование через mining.configure: version-rolling.mask указывает изменяемые биты, а ответ выбирает пересечение возможностей майнера и сервера. Маска показывает разрешённые позиции, а не обещает большую скорость. Условие version_bits & ~last_mask == 0 требует, чтобы переданные биты оставались в пределах последней действующей маски. Уведомление mining.set_version_mask вступает в силу немедленно, без ожидания следующего задания. Firmware, программа управления устройством, должна соблюдать эту договорённость. [3]
BIP320 предлагает 16 общих битов nVersion; BIP323, предложенный ему на замену, описывает 24 бита. Во время этой редакционной проверки оба документа имеют статус Draft, то есть проекта. Сам статус не означает ни отсутствия реализаций, ни поддержки всеми пулами. Документ описывает предполагаемое использование поля; конкретное соединение зависит от фактической маски и программ. Поэтому Пётр не выводит разрешения своего устройства из номера BIP и не принимает предложение за автоматическое изменение правил сети. [4] [5]
Hanke выражает экономию в модели формулой x × (n − 1) / n. Здесь x — доля работы, которую можно разделить между заданиями, а n — число подходящих заданий. При x = 25% и n = 4 получается 18.75%. Общую подготовку выполняют совместно, а не повторяют для каждого задания. Результат относится к модели вычислений, а не автоматически к такому же снижению потребляемой мощности любого устройства. Другие цепи и условия эксплуатации тоже влияют на расход. Без измерений нельзя переносить процент в прогноз производительности или дохода. [1]
Сначала Пётр проверяет поддержку чипа, firmware и взаимодействие с пулом. Затем смотрит, принимает ли пул работу, и измеряет всё устройство в сопоставимых условиях. J/TH означает джоули на терахеш: энергию, необходимую для триллиона попыток хеширования. При сравнении измерения должны охватывать одни и те же компоненты устройства и один и тот же период. Название ASICBoost этих измерений не заменяет. Это также не синоним разгона, при котором повышают рабочую частоту, и не гарантия найденного блока или прибыли. Некоторую работу можно выполнять экономнее, если это поддерживает вся используемая система. [1] [3]
Для полной картины прочитайте эту статью вместе с ASIC Miner, Майнинг, Block Header, Proof of Work, Bitcoin, SHA-256. На эту статью также ссылаются Mining Firmware.