Пустые блоки в Биткоине
Cover

Отчёт о пустых блоках в Биткоине

7 июня 2024 г.

Введение #

Биткоин-блоки обычно содержат много транзакций, но иногда добываются блоки, содержащие только одну транзакцию – транзакцию coinbase, – которая начисляет вознаграждение за блок нашедшему его майнеру. Такие блоки называются пустыми.

Нашей команде нередко задают вопросы о причинах и частоте возникновения пустых блоков. Это исследование мемпула и подготовленный на его основе отчёт направлены на тщательное изучение причин и частоты возникновения пустых блоков в истории Биткоина.

Этот отчет был подготовлен @orangesurfbtc. Данные об интервалах между блоками и первоначальный анализ времени предоставлены @mononautical. Перевод Тони⚡️.

Поддержать проект.

Причина #

Пустые блоки возникают из-за того, что майнеры работают над шаблонами блоков, которые не содержат никаких транзакций, кроме транзакции coinbase, необходимой для получения вознаграждения за блок. Как вы увидите ниже, не все пулы отправляют своим майнерам шаблоны пустых блоков, и поэтому не все пулы находят пустые блоки.

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

Кроме того, пул может (хотя это и вредно для сети) работать с шаблонами пустых блоков до проверки предыдущего блока на валидность. Есть предположение, что причина нахождения некоторых пустых блоков кроется именно в этом.

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

Если майнеры работают с пустыми шаблонами долгое время после того, как они получили шаблон, заполненный транзакциями, то, в случае нахождения блока, они (и пул) заработают меньше биткоинов; более подробно этот вопрос рассматривается в конце отчёта.

Насколько часто встречаются пустые блоки #

С момента запуска Биткоина 10,6% блоков были пустыми (89 662 пустых блока из 845 787 блоков, найденных на момент подготовки отчёта). Большинство пустых блоков было добавлено в первые годы существования Биткоина: почти 80 000 из первых 100 000 блоков были пустыми. Это объясняется тем, что в то время Биткоином мало кто пользовался, и блоки были пустыми просто потому, что мало кто транслировал транзакции в сеть.

Общее количество найденных пустых блоков за всё время существования Биткоина

В течение первых нескольких лет существования Биткоина блоки были в основном пустыми, но с ростом использования сети пустые блоки стали появляться реже.

Для каждого блока мы можем взглянуть на предшествующие ему 10 000 блоков и вычислить, какой их процент был пустым (скользящее среднее значение для 10 000 блоков). Мы видим, что по истечении первых 100 000 блоков процент найденных пустых блоков резко падает и поднимается выше 5% только в двух последующих случаях: между блоками 160 000 и 170 000 и между блоками 360 000 и 420 000.

Процент пустых блоков за всё время существования Биткоина (скользящее среднее значение для 10 000 блоков)

В последние годы, похоже, всегда находились транзакции, ожидающие майнинга в следующем блоке, и всё же мы видим, что за последние 2 года было добыто почти 300 пустых блоков.

Общее количество пустых блоков за последние 24 месяца

Процент пустых блоков за 24 месяца (скользящее среднее значение для 10 000 блоков)

За последние 2 года процент пустых блоков варьировался от 0,15% до 0,5% (согласно среднему скользящему показателю 10 000 блоков).

Фильтрация блоков по пулам #

Являются ли пустые блоки явлением, характерным для всех пулов, или же некоторые пулы находят пустые блоки чаще других? Чтобы ответить на этот вопрос, нам нужно определить, какой майнер произвёл каждый блок. Мы можем сделать это, оценив тег каждого блока и адреса coinbase в сравнении с известными сигнатурами и адресами крупных пулов.

Большинство блоков за последние годы можно отнести к тому или иному майнеру/пулу, однако большинство блоков, найденных на заре Биткоина, нельзя отнести ни к одному майнеру или пулу. Если исключить из анализа блоки неизвестного происхождения, то мы получим следующий график, который показывает, что после всплеска между блоками 360 000 и 410 000 процент пустых блоков, найденных известными майнерами, уменьшается.

Начиная с блока 410 000 среднее скользящее значение пустых блоков уменьшается.

Неизвестные майнеры исключены

Большинство ранних блоков добываются неизвестными пулами / майнерами. Оценивая сигнатуры и адреса скриптов в файле pools-v2.json, мы могли бы добавить больше исторических данных в файл pools-v2.json.

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

Общее количество биткоин-блоков, найденных пулами

Атрибутирование пустых блоков #

Обновив наш предыдущий график, мы видим, что большинство пустых блоков, найденных позже блока 300 000, можно отнести к одному из майнинг-пулов.

Общее количество найденных пустых блоков. Зелёный – известный майнер, жёлтый – неизвестный.

Сконцентрировавшись на блоках, найденных после блока 200 000 и отбросив первые 84 000 пустых блоков, мы можем оценить, какие пулы ответственны за добычу пустых блоков.

Общее количество пустых блоков, найденный пулами

Обратите внимание на диаграмму ниже, отражающую последние 24 месяца и количество пустых блоков, найденных каждым пулом, в пропорции к общему количеству пустых блоков, найденных всеми пулами.

Распределение пустых блоков по пулам

Сравните это с диаграммой, показывающей долю всех блоков, найденных пулами.

Распределение всех блоков по пулам

Мы заметили несколько очевидных различий между этими двумя диаграммами:

  • на долю foundryusa и marapool приходится 28,7% и 2,6% блоков, найденных за последние 24 месяца, но эти пулы не отражены в диаграмме с пустыми блоками, так как они не намайнили ни одного пустого блока.
  • на долю spiderpool и ocean приходится гораздо больше пустых блоков, чем можно ожидать, учитывая их хэшрейт относительно всей сети. Они добыли более 5 % пустых блоков.

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

  • Когда пул не производит пустых блоков, его относительная частота нахождения пустых блоков равна 0.
  • Когда пул производит пустые блоки с примерно той же частотой, что и вся сеть, его относительная частота нахождения пустых блоков равна 1.
  • Когда доля пустых блоков для пула высока по сравнению с долей пустых блоков во всей сети, относительная частота нахождения пустых блоков для этого пула превышает 1 (spiderpool, ocean).

Построив график этих данных за последние 24 месяца, мы видим, что у Spider Pool и Ocean очень высокие относительные показатели нахождения пустых блоков. Мы также видим, что многие пулы, включая Foundryusa и Marapool, не добыли ни одного пустого блока. Статистически значимые результаты (критейрий хи-квадрат, p<0,05) показаны красным цветом.

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

Относительная частота нахождения пустых блоков. Красный – часто, серый – незначительно, синий – 0.

ПУЛОТНОСИТЕЛЬНАЯ ЧАСТОТА НАХОЖДЕНИЯ БЛОКАP-ЗНАЧЕНИЕ
ocean17.550.0
spiderpool13.420.0
kucoinpool2.240.24
antpool1.10.337
binancepool1.030.84
viabtc0.930.665
braiinspool0.890.704
luxor0.860.643
f2pool0.830.185
btc.com0.790.525
sbicrypto0.760.535
secpool0.620.626
ultimuspool0.470.445
poolin0.450.069
emcdpool0.440.392
Хотя spiderpool и ocean имеют высокую долю пустых блоков (более чем в 18 раз выше, чем в среднем по сети), они имеют очень малую долю хэшрейта, и поэтому это не оказывает большого влияния на сеть.

Оценка доли пустых блоков с течением времени #

Мы также можем проанализировать полученные процентные данные на уровне пула с течением времени. Мы уменьшим наше скользящее среднее окно до 1000 блоков, чтобы можно было рассмотреть более свежие данные.

Мы видим, что четыре крупных ранних пула – eligius, antpool, f2pool и bwpool – имели очень высокие показатели нахождения пустых блоков. Они превышали 5% в течение длительных периодов времени вплоть до блока 420 000. Интересно, что доля пустых блоков, найденных antpool, bwpool и f2pool, заметно увеличивалась в аналогичные периоды времени.

Частота нахождения пустых блоков в сети резко возросла между блоками 360 000 и 410 000 из-за роста частоты нахождения пустых блоков antpool, bwpool и f2pool.

Начиная с блока 420 000 только у eligius и antpool средние показатели по выборке 1000 блоков превышали пятипроцентный уровень.

Процент пустых блоков, найденных пулом

Если мы оценим пулы, которые нашли блок в течение последнего года, то увидим, что есть несколько пулов, частота нахождения пустых блоков которыми была заметно выше.

Процент пустых блоков, найденных пулом

Хотя данные указывают на значительное увеличение количества пустых блоков, приписываемое Ocean, хэшрейт этого пула составляет менее 1% общего хэшрейта сети, поэтому высокий процент пустых блоков не оказывает значительного влияния на сеть.

Если не принимать во внимание Ocean, то можно увидеть, что большинство пулов за последние 24 месяца в среднем добывали менее 1% пустых блоков. Исключение составляют antpool и spiderpool, которые достигли 2%, а также binancepool и kucoinpool, показатели которых приравнивались к 1% или незначительно превышали этот показатель.

Процент пустых блоков, добытых пулами за последние 2 года и среднее скользящее 1000 блоков

Временной анализ #

Используя общедоступный набор данных block-arrival-times и ряд скриптов, мы можем определить интервал между блоками (время с момента нахождения предыдущего блока) для каждого блока за последние 9 лет.

Отфильтровав блоки за последние 2 года, мы можем пометить их как пустые/заполненные, а также определить, был ли предыдущий блок добыт тем же пулом или другим. На основе этого мы можем построить график частоты интервалов между блоками для этих 4 категорий.

Частота интервалов между блоками по типу найденных блоков (минуты). Голубой – другой пул, заполненный блок, синий – тот же пул, заполненный блок, красный – другой пул, пустой блок, темно красный – тот же пул, пустой блок

Мы видим затухающую экспоненциальную кривую, как и следовало ожидать от процесса Пуассона. Учитывая небольшую задержку, вызванную распространением блоков, можно ожидать, что при малых интервалах между блоками (менее 10 секунд) частота событий будет снижаться.

Действительно, если мы сконцентрируемся на первых 120 секундах блоков, то увидим, что частота нахождения блоков с малым интервалом уменьшается, однако только примерно через 10-20 секунд частота достигает своего максимального значения.

Частота интервалов между блоками по типу найденных блоков (секунды). Легенда аналогична изображению выше.

Мы видим, что большинство блоков, найденных в течение первых нескольких секунд, пустые, и что большинство пустых блоков найдены пулом, отличным от нашедшего предыдущий блок. Однако через несколько секунд большинство блоков – уже найденные отличным пулом от нашедшего предыдущий блок и заполнены транзакциями.

Увеличив масштаб первых 10 секунд, мы видим, что в первые 2 секунды чаще находятся пустые блоки, нежели заполненные.

Частота интервалов между блоками по типу найденных блоков (секунды)

В общей сложности за последние 24 месяца было найдено всего 292 пустых блока (0,278% всех блоков). Эти пустые блоки дают преимущество майнеру пропорционально избыточному времени, которое майнер потерял бы впустую, прежде чем получить полный блок. То есть, чем больше задержка, связанная с получением шаблона полного блока, тем больше смысла для майнера работать тем временем над пустым блоком.

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

ПОРОГОВОЕ ВРЕМЯ (СЕК)ДОЛЯ 10 МИНУТ (%)ДОЛЯ БЛОКОВ НИЖЕ ПОРОГА (%)ДОЛЯ ПУСТЫХ БЛОКОВ НИЖЕ ПОРОГА (%)
10.1670.04996.15
20.3330.12578.03
30.5000.21259.64
40.6670.33743.50
50.8330.45335.01
101.6671.19516.15
10016.66715.2851.80

Из этих данных ясно, что даже в идеальном сценарии, когда пустые шаблоны блоков могут быть мгновенно заменены на полные, потенциальное увеличение дохода для майнеров незначительно. Даже если предположить, что полным блокам требуется 3 секунды, чтобы добраться до майнеров (а мы видим, что это не так, поскольку к этому времени 40% блоков уже не пустые), только 0,2% блоков будут найдены менее чем за это время.

Почти все блоки, найденные в течение 2 секунд после предыдущего блока, пустые. Не отправляя майнерам пустые блоки, пул очень незначительно снижает количество блоков, которые они ожидают найти – менее чем на 0,5 %.

Мы можем провести этот анализ на основе каждого пула, здесь показаны интервалы между блоками для ряда пулов на основе прошлогодних данных. Пустые блоки показаны на этих графиках белыми линиями.

Частота интервалов между блоками по пулам (первые 60 минут)

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

Частота интервалов между блоками по пулам (первые 60 секунд)

Давайте сравним пулы, которые отправляют шаблоны пустых блоков (например, antpool и viabtc), с пулами, которые этого не делают (например, foundryusa и mara).

Частота интервалов между блоками по пулам (первые 60 минут)

Частота интервалов между блоками по пулам (первые 60 секунд)

Мы видим, что:

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

Это хорошо видно, если сравнить плотность частот для antpool и foundry (выбраны потому, что это самые большие пулы для разных подходов к распространению шаблонов блоков).

Первая корзина (соответствующая интервалам между блоками менее 1 минуты) foundry подавлена, в то время как antpool этого избегает (благодаря наличию пустых блоков, показанных красным цветом).

Плотность нахождения новых блоков по типу блока для antpool

Плотность нахождения новых блоков по типу блока для foundryusa

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

Минимальные интервалы между блоками по пулу и типу блока

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

Резюме и последствия полученных результатов #

Начиная примерно с блока 400 000 частота обнаружения пустых блоков на сетевом уровне имеет тенденцию к снижению, однако на уровне пулов наблюдаются значительные различия в частоте обнаружения пустых блоков. Пулы можно разделить на три группы;

Группа 1 #

Отсутствие пустых блоков

Пулы: foundryusa, marapool, pegapool, nicehash, whitepool, 1thash, terrapool, titan, solock, zulupool, kanopool, okminer и mmpool

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

Ни один из этих пулов не нашёл блок с интервалом между блоками менее 2 секунд, несмотря на то, что на них в совокупности приходится около 33% хэшрейта сети.

Группа 2 #

Средние пулы (больше 0 %, но меньше 1 %)

Пулы: antpool, f2pool, viabtc, binancepool, luxor, braiinspool, poolin, btc.com, sbicrypto, emcdpool, ultimuspool, secpool

Эти пулы регулярно находят блоки с интервалом между блоками менее 2 секунд, однако они также продолжают находить пустые блоки после значительных интервалов между блоками. Antpool, f2pool, viabtc, binancepool и luxor находили пустые блоки с интервалом между блоками более 20 секунд.

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

Если посмотреть на вознаграждение за блок в процентах от общего вознаграждения за последние несколько месяцев, то мы увидим, что оно обычно составляет менее 10% (не считая временного всплеска вокруг халвинга).

Учитывая, что комиссии в настоящее время составляет небольшую долю от общего вознаграждения за блок (около 10%), эта стратегия более выгодна, чем избегание пустых блоков, при условии, что время переключения не превышает 7 секунд. Если на переключение уходит более 7 секунд, то выгоднее просто отправлять шаблоны полных блоков.

Эти цифры предполагают, что время начала работы над пустым шаблоном составляет 100 мс, а время начала работы над полным шаблоном – 800 мс.

​​

% комиссии за блок vs. время переключения

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

Примечание: Согласно комментариям portlandHODL из MARA

  • Время рассылки шаблонов полных блоков составляет 0,75 с
  • Время переключения для s9 / s19 составляет 9 секунд, при этом большинство заданий завершается за 2 секунды.

На приведённом ниже графике показана доля пустых блоков, найденных пулами с интервалом свыше 7 секунд. Не зная сетевых условий каждого пула, мы не можем сделать однозначный вывод о том, выгоден ли для этих пулов подход, при котором за пустыми шаблонами следуют полные. При этом, если их сетевые условия схожи с теми, что мы указали, то вполне возможно, что многим из этих пулов было бы лучше не добывать пустые блоки в текущих условиях рынка комиссий.

​​

Доля пустых блоков с интервалом, превышающим 7 секунд.

Группа 3 #

Частые пустые блоки (более 1 % пустых блоков)

Пулы: ocean и spiderpool

Spiderpool

Spiderpool нашел более 268 блоков, из которых 15 были пустыми, так что у нас, вероятно, достаточно данных, чтобы заподозрить, что их высокий процент пустых блоков не является случайностью или отклонением. Если предположить, что эти данные являются репрезентативной выборкой, то мы считаем, что существует два правдоподобных объяснения.

Первое – это операционная проблема либо на стороне пула, либо на стороне майнеров, приводящая к задержке отправки/получения полных шаблонов блоков. Второе – это то, что большая доля майнеров пула приходится на асики с прошивкой, не позволяющей быстро переключаться на новую задачу.

Ocean

Ocean нашел всего 41 блок, из которых 3 были пустыми. При таком ограниченном наборе данных у нас мало уверенности в том, что такой высокий процент пустых блоков статистически значим. Тем не менее, сотрудники Ocean заявляли, что, по их мнению, причиной пустых блоков является неисправная прошивка antminer, из-за которой старые пустые шаблоны используются в течение значительного периода времени после получения новых заполненных шаблонов.

Сотрудники Ocean публично предположили, что BitMain выпустил прошивку, которая намеренно заставляет майнеры работать над старыми заданиями вплоть до 60 секунд, в то время как для собственного майнинга они используют другую прошивку, в которой эта проблема отсутствует. Это не подтверждается данными, которые показывают, что процент пустых блоков, найденных antpool, увеличился после недавнего халвинга. Если бы antpool использовал исправленную прошивку для сокращения времени перехода от пустых шаблонов к заполненным, стоило бы ожидать, что процент пустых блоков у этого пула будет падать, а не расти.

Процент пустых блоков, добытых antpool

Объяснение высокой частоты пустых блоков у Ocean довольно просто. Они отправляют пустые блоки, за которыми следует замена (полным) шаблоном с cleanjobs=false (источник). Однако некоторые модели ASIC’ов не могут быстро переключиться на новую работу с cleanjobs=false. Согласно заявлениям сотрудника Ocean, некоторые майнеры “будут продолжать отправлять старую работу до тех пор, пока не исчерпают пространство поиска, что может занять от секунды до минуты”. Такое решение пула в сочетании с использованием определённых ASIC, скорее всего, является причиной высокой частоты пустых блоков.


Connect to our relay to leave a comment. Details.
Подключитесь к нашему релею, чтобы оставить комментарий. Подробнее.