Вы здесь

Как работает алгоритм регулировки сложности в Эфириуме

В этой статье объясняется алгоритм регулировки сложности, используемый в Эфириуме с момента выпуска виртуальной машины Homestead 14 марта 2016 года, а также подробно изложено, как создать блок в среднем за 15 секунд.

Как работает алгоритм регулировки сложности в Эфириуме

У Эфириума была проблема со скоростью написания блока до выпуска Homestead: его целью было достижение в среднем 13 секунд на блок, но среднее время блока увеличивалось все больше и больше.

Почему?

Майнеры обнаружили, что на написание каждого последующего блока уходит ровно на 1 секунду больше времени, чем на предыдущий блок (родительский блок). Тем самым, сложность растет по сравнению с другими блоками, и решение этой проблемы ставится в приоритет над другими форками.

Таким образом, в экономических интересах майнеров было использовать этот метод написания блоков, даже если это подразумевало под собой увеличение в среднем времени на их построение.

В рамках второго предложения по улучшению Эфириума (EIP 2) было предложено использовать совершенно другой алгоритм регулировки сложности.

Предложения по улучшению Эфириума

Предложения по улучшению Эфириума, или EIPs, являются аналогами Запросов на комментарии (RFCs): они являются предлагаемыми стандартами для улучшения характеристик экосистемы Эфириума.

На официальном сайте EIP представлен список всех EIPs и их текущий статус.

В EIP 2 содержится четыре отдельных раздела, в каждом из которых рассматривается проблема с Эфириумом. Четвертый раздел (упоминаемый здесь как EIP2/4) является главным предметом для рассмотрения в этой статье: изменение алгоритма регулировки сложности Эфириума.

Новый алгоритм: Окно в 10–20 секунд

block_diff = parent_diff + parent_diff // 2048 *
      max(1 - (block_timestamp - parent_timestamp) // 10, -99) +
      int(2**((block.number // 100000) - 2))

Примечание: знак операции // означает деление без остатка (напр. 6 // 2 == 3 )

Вышеприведенная формула может показаться сложной, но ее логику можно разбить следующим образом:

  • Если блок решен менее чем за 10 секунд, повысьте сложность;
  • Если блок решен более чем за 20 секунд, снизьте сложность;
  • Если блок решен где-то за 10 – 20 секунд, ничего не делайте.

Подобное приведение временного окна к среднему значению в 10 – 20 секунд в течение длительного периода позволит добиться цели – решить блок за 15 секунд.

Само временное окно (временная метка) находится в этой части кода:

max(1 - (block_timestamp - parent_timestamp) // 10, -99)

Математическая формула, где d - это «разница», выглядела бы следующим образом: max(1 - (d/10), -99) .

Формула предполагает, что результат деления d/10 – это целое число, а не десятичное; так что в случае девяти секунд 9/10 означает 0, а не 0.9.

Оценка разных входных данных для block_timestamp - parent_timestampshows показывает возможный диапазон:

  • 0–9 секунд выражается max(1 - 0, -99) max(1, -99) 1
  • 10–20 секунд выражается max(1 - 1, -99) max(0, -99) 0
  • 20+ секунд падает все ниже и ниже к минимальной границе -99

Визуализация окон регулировки сложности

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

На самом деле, в этом заключается суть алгоритма, даже если коэффициент умножается на 2,048 для повышения сложности в этом блоке – вот и все. Но понижение сложности проходит гораздо быстрее.


Предложение EIP 2/4 вступает в силу (https://etherscan.io/chart/blocktime)

Как насчет так называемой «бомбы» ?

Часть формулы, которую мы пока еще не отработали:

int(2**((block.number // 100000) - 2))

Это «бомба для повышения сложности», которая повышает сложность написания блока с интервалом каждые 100 000 блоков.

Опять же, поскольку это целочисленная математика, если номер блока 302 000, то формула вычисляется как 2^(3-2) или 2^1 или 1.

Таким образом, число здесь будет изменяться только на четных приращениях 100 000 блоков, обеспечивая повышение давления возрастающей сложности с течением времени, независимо от временных различий между майнингом блоков.

При целевом времени написания блока в 15 секунд в среднем бомба сложности «поражает» каждые ~17,36 дней.

Вывод

Цель нового алгоритма сложности EIP 2/4 – написание блока в блокчейн Эфириума в среднем в течение 15 секунд или меньше. На момент написания статьи фактическое время решения блока в среднем составляло 14,05 секунды.

15-секундный целевой показатель достигается за счет создания окна 10-20, в котором не происходит никаких изменений. (10+20)/2 = 15.

Сложность понижается быстро в Эфириуме, но ее повышение в краткие сроки происходит медленно. Повышение в долгосрочном плане гарантируется «бомбой сложности»

Категория: 
Криптовалюты
Монета: 
3
Ваша оценка: Нет Средняя: 3 (2 оценок)
28610 / 1
Аватар пользователя Daritas
Публикацию добавил: Daritas
Дата публикации: пт, 12/07/2018 - 10:52

Что еще почитать:

Комментарии:

Любят в ethereum вечно все усложнить, толи дело сложность в биткоине, чем больше хэшрейт сети, тем соответственно выше сложность майнинга.

пн, 12/17/2018 - 00:15