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

Но не так хорошо известно, что этих решений самих по себе недостаточно. Из-за использования практики, называемой «spy mining» или «pool-watcher mining» майнинг биткоина все больше полагается на инфраструктуру данных, предоставляемых майнинговыми пулами.

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

Эгоистичный майнинг

Чтобы понять, как это работает, давайте сперва кратко рассмотрим более старую концепцию: «эгоистичный майнинг».

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

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

Для прибыльности эгоистичного майнинга, атакующий должен управлять существенной долей мощностей хэширования сети - хотя бы 25%-30%. Хотя при большой долее мощности хэширования такой майнинг больше начинает напоминать атаку 51%.

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

Подтверждение блока

Много майнеров действительно участвуют в «упрощенном подтверждении блока» или, иными словами, «SPV майнинге».

Блок биткоина состоит из нескольких областей данных: транзакций, временной метки, случайного числа (nonce) и других. Одна из важных составляющих - ссылка на предыдущий блок, точнее, хэш заголовка блока. хэш заголовка блока может быть создан лишь после завершения генерации предыдущего блока. Идея заключается в том, что майнер не может приступить к поиску нового блока прежде, чем увидел предыдущий.

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

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

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

Шпионский майнинг

Майнинговые пулы, которые на сегодня предоставляют большинство блоков, добытых в сети, в действительности состоят из множества отдельных майнеров так называемых “хэшеров” (hashers) - то есть всех частных майнеров, подключенных к пулу. Хэшеры занимаются поиском блоков от имени своего пула, используя хэш заголовка блока, который они получили от него же.

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

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

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

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

Небольшие проблемы

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

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

Распространение

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

Такая практика, в свою очередь, позволяет майнинговым пулам запустить атаку 51%, просто задерживая распространение своих новых блоков по сети. Более точно, это позволяет пулам запустить атаку 51%, на ресурсах любого майнера, который не занимается шпионской добычей. В то время, как майнинговые пулы и шпионы начинают добывать новый блок, все остальные майнеры просто тратят свои ресурсы (по крайней мере в течение некоторого времени).

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

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