Перейти к содержанию

Корректировка сложности Bitcoin: цели, перерасчёт и пределы

Bitcoin пересчитывает порог Proof of Work каждые 2 016 блоков, чтобы направлять долгосрочный средний интервал к десяти минутам. Цель, компактное кодирование, окно меток времени, ограничения, правила сети и вероятностные результаты следует анализировать отдельно.

Обновлено

Только в образовательных целях; не является инвестиционным советом или инвестиционной рекомендацией. Инвестиции могут привести к убыткам.

Краткий ответ

Корректировка сложности Bitcoin — детерминированное правило консенсуса, которое периодически меняет наибольший допустимый хеш Proof of Work, называемый target или целью, чтобы при изменении активного хешрейта направлять долгосрочный средний интервал блоков к десяти минутам. В mainnet цель обычно фиксирована 2 016 блоков и пересчитывается для следующего периода. Каждый проверяющий узел выводит одну и ту же обязательную цель из предыдущих заголовков; майнеры за неё не голосуют, а обозреватель её не устанавливает.

Proof of Work заголовка действителен, только если его хеш, интерпретированный как целое число, не превышает цель, закодированную в 32-битном поле nBits. Меньшая цель допускает меньше хешей и требует больше ожидаемых попыток. По соглашению сложность — относительное число, обратно пропорциональное цели:

D = T₁ / T

Здесь T — текущая цель, а T₁ — эталонная цель для сложности 1. Поэтому цель и сложность движутся в противоположных направлениях. Ни одна величина напрямую не измеряет число машин, расход энергии, личности майнеров или наблюдаемый хешрейт.

Десять минут — математическое ожидание, а не расписание. Попытки хеширования и поступление блоков случайны: даже при стабильных цели и хешрейте два блока могут появиться через несколько секунд либо новый блок может отсутствовать час. Перерасчёт — запаздывающая обратная связь за период. Он уменьшает устойчивое отклонение частоты, но не устраняет краткосрочный разброс и не реагирует мгновенно на скачок хешрейта.

Корректировка влияет на временной темп событий, привязанных к высоте, включая сокращения субсидии, но не задаёт суммы субсидии, интервал 210 000 блоков или конечное предложение. Сама по себе она также не выбирает каноническую цепь. Правило выбора ветви Bitcoin после проверки заголовков и блоков сравнивает накопленный chainwork; сложность одного блока не является накопленной работой.

Как анализировать перерасчёт

  1. Зафиксируйте сеть и правила. Mainnet, прежняя testnet, Testnet4, signet и regtest не имеют одинакового набора исключений. Запишите цепь, версию правил, высоту кандидата и включены ли перерасчёт или особые блоки минимальной сложности.
  2. Декодируйте заявленную цель. Разверните компактное nBits заголовка-кандидата в цель T. Отклоните отрицательную, нулевую, переполненную или превышающую powLimit цель и потребуйте, чтобы хеш заголовка удовлетворял ≤ T.
  3. Найдите границу периода. В mainnet новая цель требуется, когда высота кандидата делится на 2 016. На других высотах nBits предыдущего блока должен оставаться без изменений.
  4. Выберите окно меток времени. На границе mainnet Bitcoin Core вычитает метку первого блока предыдущего периода из 2 016 блоков из метки последнего. Концы включают 2 016 блоков, но только 2 015 межблочных интервалов. Номинальная длительность всё же равна 2,016 × 600 = 1,209,600 секунд.
  5. Ограничьте прошедшее время. Задайте t = clamp(t_actual, 302,400, 4,838,400) секунд — от четверти до четырёх номинальных 14-дневных периодов. Метки заголовков задаются майнерами и подчиняются другим правилам действительности; это не точное время приёма узлом.
  6. Рассчитайте и закодируйте новую цель. По текущим правилам mainnet целочисленно вычислите T_new = min(powLimit, T_old × t / 1,209,600), затем компактно закодируйте результат в nBits. Целочисленное деление и округление формата могут дать небольшое отличие от идеального десятичного отношения.
  7. Интерпретируйте вероятностно. Приближённо D_new / D_old = T_old / T_new. Сопоставляйте перерасчёт с распределением времени блоков и явно помеченной оценкой хешрейта; отделяйте его от выводов о доходах, chainwork, концентрации и риске подтверждения.

Формула mainnet использует цель последнего блока как T_old. Testnet4 намеренно устроена иначе: BIP 94 разрешает особый блок минимальной сложности после достаточно поздней метки времени, запрещает это исключение первому блоку периода и основывает перерасчёт на реальной сложности первого блока, чтобы временное исключение не влияло на следующий период. В regtest перерасчёт обычно отключён. Описание правила без указания сети неполно.

Расчётные примеры

1. Неизменный номинальный период

Пусть T_old = 10 в условных единицах цели, а измеренная длительность точно равна 1,209,600 секунд. Ограничение ничего не меняет:

T_new = 10 × 1,209,600 / 1,209,600 = 10

Отношение сложностей равно 10 / 10 = 1, поэтому идеализированная сложность не меняется. Это не значит, что каждый блок занял десять минут: случайные быстрые и медленные интервалы могут компенсироваться.

2. Быстрый 12-дневный период

Пусть между крайними метками 12 дней. Это значение внутри пределов, поэтому отношение целей равно 12 / 14 = 6/7. Новая цель составляет около 85,7143% прежней, тогда как:

D_new / D_old ≈ 14 / 12 = 1.166667

Идеализированная сложность растёт примерно на 16,67%, а не на 14,29%. Процент снижения цели и роста сложности различается, потому что величины обратны.

3. Четырёхкратный предел

Если крайние метки разделяет лишь 1,75 дня, расчёт использует минимум 3,5 дня. Цель может уменьшиться примерно до четверти, а сложность — вырасти примерно вчетверо за один перерасчёт mainnet.

Если метки охватывают 70 дней, используется максимум 56. Цель может вырасти примерно вчетверо, а сложность упасть до четверти, если powLimit не ограничит цель раньше. Выражение «четырёхкратный предел» должно уточнять величину и направление.

4. Шок хешрейта в середине периода

Используем упрощённое ожидание: первые 1 008 блоков добываются с темпом, соответствующим десяти минутам, примерно за семь дней. Затем при неизменной цели исчезает 30% хешрейта. Оставшиеся 70% дают ожидаемый интервал 10 / 0.70 ≈ 14.286 минуты; последние 1 008 блоков займут около десяти дней, весь период — около 17.

Если пренебречь концами, случайностью и компактным округлением, множитель цели равен 17/14 ≈ 1.214286, множитель сложности — 14/17 ≈ 0.823529, то есть снижение около 17,65%. Полного снижения на 30% нет, потому что шок затронул лишь половину периода. Если хешрейт останется на 70%, после частичной корректировки блоки всё ещё ожидаются медленнее десяти минут, а следующий период продолжит обратную связь.

Риски и ошибки проверки

Ошибки правил и арифметики

  • Называть сложностью сам порог, не отличая цель от обратного относительного показателя.
  • Перевернуть формулу так, что быстрый период повышает цель или медленный повышает сложность.
  • Считать 2 016 блоков 2 016 измеренными интервалами; текущий расчёт mainnet охватывает 2 015 интервалов.
  • Забыть пределы 3,5 и 56 дней, powLimit, целочисленное деление или округление компактного nBits.
  • Переносить утверждение о mainnet на Testnet4, прежнюю testnet, signet, regtest или другую PoW-цепь.
  • Считать прогноз обозревателя входом консенсуса, а не оценкой до появления граничного блока.
  • Использовать локальное время приёма вместо меток заголовков, участвующих в расчёте.
  • Путать текущую сложность, работу блока, накопленный chainwork и результат выбора ветви.

Измерение и выводы

  • Считать оценку хешрейта прямым списком работающих машин, а не выводом из работы и случайных поступлений.
  • Экстраполировать перерасчёт по малой части периода, где обычный разброс времени может доминировать.
  • Принимать рост сложности за доказательство роста цены, доходов майнеров, энергии или децентрализации.
  • Принимать снижение за доказательство сбоя без оценки абсолютной работы, концентрации и длительности.
  • Сравнивать сложности цепей без нормализации хеш-функции, эталонной цели и правил корректировки.
  • Описывать десять минут как срок, гарантию обслуживания или фиксированное время подтверждения.
  • Выводить прибыльность без награды, комиссий, доступности, условий пула, хеджирования, электричества, финансирования и эффективности.

Безопасность и эксплуатация

  • Считать перерасчёт мгновенной защитой от резкого притока или оттока хешрейта в текущем периоде.
  • Предполагать, что меньшая сложность увеличивает ёмкость блока или сразу устраняет очередь транзакций.
  • Выбирать политику подтверждений только по сложности, игнорируя накопленную работу, способность к реорганизации и ценность.
  • Игнорировать стимулы манипуляции временем и специальные меры протокола при оценке механизмов.
  • Менять арифметику консенсуса, индексацию границ или компактное кодирование без межреализационных векторов и плана активации.

Распространённые заблуждения

  • Каждый блок Bitcoin занимает десять минут. Десять минут — целевое среднее при соответствующем хешрейте; отдельные поступления случайны.
  • Майнеры голосуют за следующую сложность. Проверяющие узлы независимо вычисляют разрешённое nBits; блок с другим значением недействителен.
  • Цель на 20% меньше означает сложность на 20% выше. Связь обратная: множитель цели 0,8 даёт множитель сложности 1/0.8 = 1.25, то есть рост 25%.
  • Перерасчёт непосредственно измеряет хешрейт. Он реагирует на выпуск блоков с метками времени; любое число хешрейта — оценка с допущениями выборки и времени.
  • Сложность — денежная политика Bitcoin. Перерасчёт стабилизирует временной темп эмиссии по высоте; размеры субсидии и сокращения задают отдельные правила.

Связанные темы

Источники

Навигация

Поиск по вики...