Система вознаграждения майнеров Proof-of-Work (POW), как и любая система, имеет свои достоинства и недостатки. Главный недостаток POW это возможность атаки 51%, т.е. любой, кто получит более 50% мощности сети, сможет получить полный контроль над этим блокчейном. Это самая известная и критическая уязвимость POW консенсуса, но существуют и менее критические уязвимости. Об одной из такой уязвимостей под названием selfish mining (эгоистичный майнинг) мы и поговорим в этой статье.
В начале немного теории о майнинге криптовалют.
В качестве примера возьмем самый известный блокчейн криптовалюты Bitcoin, где основная для нашего разбора характеристика это время блока.
Время блока это математически заданный промежуток времени для записи новых данных в блокчейн. В нашем случае для Биткоин время блока задано в 10 минут. Другими словами сложность поиска блока автоматически подстраиваться под количество майнеров в сети для того что бы время поиска блока стремилось к заданным в программе 10 минутам.
Для лучшего понимания процесса майнинга криптовалют рекомендуем ознакомиться с следующим материалом: Что делает компьютер во время майнинга криптовалют простыми словами
Процесс поиска следующего блока для записи его в blockchain хоть и стремиться к заданным 10 минутам, но может быть как меньше так и больше 10 минут с большим разбросом по времени. Т.е. время поиска блока может быть меньше минуты, а может быть 1 час и более. Это все зависит от фактора удачи в поиске числа Nonce, удовлетворяющего текущим условиям блокчейн сети. Но на длительном промежутке времени в среднем каждый блок появляется один раз в 10 минут
Вот именно на этой особенности POW майнинга, т.е. на случайных отклонениях по времени нахождения новых блоков и основана атака Selfish Mining.
Что такое Selfish Mining?
По умолчанию каждый майнер при нахождении нового блока передает его данные в сеть моментально, что бы другие участники сети сбрасывали свои задачи и начинали искать новый блок с новыми данными (хеш-сумма последнего найденного блока). Если условный майнер находит блок благодаря удачи за 1 минуту вместо 10 минут, он вместо того, что бы записать этот блок в блокчейн, т.е. оповестить всех майнеров о нахождении нового блока, скрывает информацию о найденном блоке от других участников сети. В этом случае пока другие участники продолжают искать блок, условно назовем его номер 100, наш эгоистичный майнер уже ищет 101 блок, т.к. только он знает хеш сумму предыдущего 100 блока, которая необходима ему для математических расчетов при поиске числа Nonce.
Таким образом эгоистичный майнер может задержать выдачу в сеть blockchain данных по найденному блоку на несколько минут, тем самым дав себе фору в поиске следующего блока на эти самые несколько минут. Пока другие участники будут начинать работу по поиску нового блока с самого начала, наш нечестный майнер уже может выполнить половину работы для поиска следующего блока из-за чего шанс, что следующий блок найдет именно он значительно увеличивается.
Здесь следует иметь ввиду, что чем дольше будет задержка на выдачу в сеть найденного блока, тем больше шанс, что этот блок найдет другой майнер и запишет в блокчейн раньше атакующего. Тем самым у атакующего будет потеряна не только награда за уже найденный блок, но и вся работа майнера будет бесполезной, т.к. блок другого майнера будет иметь совсем другую хеш сумму.
Реализовать Selfish атаку на Bitcoin сейчас может только пул, т.к. в майнинге Bitcoin сейчас участвует сотни тысяч если не миллионы ASIC майнеров. Для эффективного использования селфиш майнинга мощность атакующего должна быть на уровне мощности остальных участников сети, что бы можно было реализовать свое преимущество в несколько минут по отношению к другим майнерам. Если же Selfish майнинг будет использовать мелкий майнер с расчетным поиском блока один раз в день и более, то заработанная фора в несколько минут за счет selfish майнинга для него не будет иметь большого значения.
Если предположить, что все участники сети будут использовать возможность эгоистичного майнинга, то в итоге увеличиться среднее время блока, что приведет к уменьшению дохода от майнинга, что естественно будет не выгодно в долгосрочной перспективе для всех участников. Поэтому можно предположить, что такой вариант развития событий имеет минимальный шанс на реализацию.
Еще один негативный сценарий использования эгоистичного майнинга всеми майнерами в сети это большая централизация и более высокий риск получения одним из пулов мощности 51% за счет вымывания более мелких пулов, которые больше всего потеряют в данной ситуации. Т.к. изначально мелкие пулы имеют расчетное время нахождения блока несколько часов или даже дней и уменьшение этого времени на несколько минут за счет selfish майнинга не даст какого либо эффекта. Чего не скажешь про крупные пулы с долей в общем хешрейте 20 или 30%.
Каждый пользователь может внести свой вклад для уменьшения негативного эффекта от эгоистичного майнинга и подключить свое майнинг оборудование к проверенному майнинг пулу, который дорожит своей репутацией. Одним из таких пулов является Binance Pool, который принадлежит известной криптобирже и интегрирован в общий сервис компании для максимально удобного использования.
Selfish mining может применяться не только к блокчейн сети Биткоин, но и ко всем другим POW криптовалютам, например, Ethereum у которого время блока задано в 13 секунд.
Вывод: Sellfish mining нельзя назвать полноценной угрозой для POW майнинга. Скорее это эксплойт, который могут использовать нечистые на руку владельцы пулов, что бы показать в краткосрочной перспективе более высокие показатели в нахождении блоков для привлечения клиентов. Чем менее популярная криптовалюта, тем больше она подвержена атаке Selfish Mining.