Сначала создаётся блок-кандидат
Программа для майнинга выбирает действительные транзакции, создаёт coinbase-транзакцию и вычисляет корень Меркла из идентификаторов транзакций. Вместе с хешем предыдущего блока, временем, целью и nonce эти данные образуют заголовок. Затем устройства ASIC с высокой скоростью перебирают его варианты, вычисляя двойные хеши SHA-256.
Майнер может менять выбор и порядок транзакций, данные coinbase и nonce, получая новые варианты заголовка. Найдя хеш ниже сетевой цели, он отправляет полный блок узлам. Узлы не подсчитывают неудачные попытки: они проверяют успешный заголовок, транзакции и остальные правила блока.
Десять минут — статистическое среднее
У каждой попытки хеширования очень малая вероятность успеха. Даже большая мощность не позволяет узнать, какая именно попытка окажется удачной. Поэтому два блока могут прийти почти подряд, а в другой раз сеть ждёт намного дольше. Часы протокола не приказывают майнерам выпустить блок на десятой минуте.
Большая доля общего хешрейта повышает вероятность майнера найти следующий блок, но не даёт гарантии. За долгий период результаты приближаются к доле мощности, однако короткие серии могут сильно колебаться. Поэтому отдельные майнеры объединяются в пулы и меняют редкие крупные выплаты на более частые небольшие доли.
- точное время следующего блока запланировать нельзя
- десять минут — цель средней частоты блоков в mainnet
- майнинг-пул снижает колебания выплат, но может концентрировать выбор шаблонов блоков
Сложность реагирует через 2 016 блоков
Если вычислительной мощности становится больше, при неизменной цели блоки появлялись бы быстрее; если мощность уходит — медленнее. Поэтому после каждого периода в 2 016 блоков в mainnet Bitcoin Core сравнивает его реальную длительность с целью примерно в две недели и меняет цель на следующий период.
Более быстрый период ведёт к меньшей цели и, следовательно, большей сложности; более медленный — к большей цели. Одна корректировка ограничена не более чем четырёхкратным изменением цели. Механизм не реагирует на цену или число транзакций, а mainnet не меняет сложность после каждого отдельного блока.
Устойчивый темп не означает полной стабильности
После резкого падения хешрейта блоки могут оставаться медленнее до следующей корректировки; после резкого роста — быстрее. Корректировка не меняет уже прошедшие интервалы, и случайность после неё не исчезает. Она лишь создаёт долгосрочную обратную связь между мощностью и требуемой сложностью.
Сложность также не показывает напрямую число майнеров или их владельцев. Один и тот же хешрейт может быть распределён между множеством устройств либо координироваться несколькими пулами. При оценке децентрализации следует различать владельцев оборудования, пулы, формирующие блоки, операторов узлов и производителей устройств.