Difficulty adjustment в Bitcoin: пересчёт сложности каждые 2016 блоков

Difficulty adjustment — механизм в сетях с Proof-of-Work для автоматической подстройки сложности майнинга так, чтобы средний интервал между блоками оставался целевым (например, ~10 минут в Bitcoin). Если суммарная вычислительная мощность (хешрейт) растёт — сложность повышается; если падает — снижается.

Базовые моменты

  • Цель — стабильный темп блоков. Перенастройка компенсирует колебания хешрейта и удерживает среднюю скорость выпуска блоков.
  • Окна пересчёта. В Bitcoin сложность пересчитывается каждые 2016 блоков (≈ две недели при нормальном темпе). Внутри окна сложность фиксирована.
  • «Сложность» vs «таргет». Технически пересчитывается целевой хеш (target). «Сложность» — это относительная мера: difficulty = target_1 / target, где target_1 — эталон на старте сети.
  • Ограничение шага. В Bitcoin итоговое изменение за одно окно ограничено: не более чем в 4 раза вверх или вниз, чтобы избежать экстремальных скачков.
  • Последствия окна. Резкие изменения хешрейта внутри окна приводят к временному ускорению/замедлению выпуска блоков до следующего пересчёта.

Как это работает / формулы / пример

Пусть целевой интервал блока T = 600 секунд (10 минут), целевое окно N = 2016 блоков, целевое время окна TargetSpan = N × T.

Базовая формула (через target):

new_target = old_target × (actual_timespan / TargetSpan)

Где actual_timespan — фактическое время добычи последних N блоков. Затем new_target ограничивают в диапазоне [old_target/4 ; old_target×4] и переводят в новую сложность.

Эквивалентно через сложность:

new_difficulty = old_difficulty × (TargetSpan / actual_timespan)

Пример. Если хешрейт сети удвоился, то actual_timespan ≈ TargetSpan/2. Тогда:

new_difficulty ≈ old_difficulty × 2

После пересчёта средний интервал снова стремится к целевым 10 минутам.

Важно: до момента пересчёта блоки выходят чаще (~5 минут), комиссии/мемпул и подтверждения временно ведут себя иначе.

Плюсы и ограничения

Аспект Плюсы Минусы/ограничения
Стабильность выпуска Держит средний темп блоков вблизи целевого. Внутри окна возможны отклонения при резких сдвигах хешрейта.
Устойчивость сети Снижает чувствительность к приходам/уходам майнеров. При массовом уходе майнеров до пересчёта блоки могут идти очень медленно.
Противодействие манипуляциям Ограничение шага и правила времени снижают эффект злоупотреблений. Возможны атаки на таймстемпы и «осцилляции» в слабых сетях.
Простота Прозрачная механика, легко проверять. Фиксированное окно создаёт лаг реакции; альтернативные алгоритмы сложнее.

Практика / чек-лист

  • Для пользователей. Если сеть внезапно замедлилась (редкие блоки), ожидайте более долгие подтверждения и потенциальный рост комиссий. Для крупных переводов увеличьте число подтверждений.
  • Для сервисов. Используйте динамическую политику подтверждений: ориентируйтесь на фактический интервал блоков в текущем окне. Мониторьте состояние мемпула и темп блоков.
  • Для майнеров. До пересчёта ускорение блоков повышает выработку, но после пересчёта сложность «догонит» хешрейт. Планируйте доходность на горизонте окна, учитывайте волатильность цен/комиссий.
  • По безопасности. В периоды замедления сети временно падает пропускная способность; следите за актуальностью клиентов и сигналами сети, избегайте неподтверждённых («zero-conf») расчётов (см. двойная трата).
  • Альтернативные алгоритмы. Некоторые сети используют «быстрые» схемы (LWMA, DGW и др.), которые пересчитывают сложность почти каждый блок для сглаживания осцилляций — это отдельные реализации с собственными допущениями.

Частые вопросы (FAQ)

Связан ли пересчёт сложности с халвингом? Напрямую — нет. Халвинг меняет награду за блок; сложность реагирует на хешрейт. Косвенно, падение доходности может снизить хешрейт → сложность уменьшится в следующий пересчёт.

Почему блоки иногда идут быстрее/медленнее 10 минут? Потому что хешрейт плавает, а сложность фиксирована на всё окно N. Коррекция произойдёт на следующем пересчёте.

Можно ли «накрутить» время блоков таймстемпами? Протокол ограничивает манёвр (правила допустимых меток времени и «median time past»). Массовая манипуляция затруднена распределённостью сети, но исторически известны «time-warp» сценарии в уязвимых настройках.

Зависит ли сложность от числа транзакций в блоке? Нет. Сложность зависит от хешрейта и времени добычи, а не от заполненности блока. Количество транзакций влияет на комиссии и размер мемпула, но не на поиск хеша.

В PoS есть difficulty adjustment? Классического PoW-параметра — нет. В PoS устойчивость времени блоков обеспечивают иные механизмы выбора/финальности; иногда используют «бомбы сложности»/параметры, но это иная экономика.

См. также

Proof-of-Work

Bitcoin (BTC)

Комиссии

Двойная трата

Nonce

UTXO

Блокчейн

Волатильность

Холодный кошелёк

Self-custody

Task Runner