“Ленивые майнеры” стали причиной форка сетиВечером в субботу произошел неумышленный форк блокчейна сети Биткойн, вызванный тем, что значительное число майнеров не поддерживает безопасность сети. В настоящее время, форк разрешен и блокчейн синхронизирован, но поднятые им проблемы остаются.
Недавно добавленное в Bitcoin Core oбновление BIP66 призвано окончательно решить проблему “пластичности транзакций” (transaction malleability), через более строгие требования к проверке криптографических подписей транзакций. В рамках правил BIP, когда 950 последних 1000 блоков заявляют о поддержке этого обновления, блоки старой версии становятся устаревшими. Однако вчера вечером, уже после того как изменение вступило в силу, один из майнеров произвел старую версию блока. Вместо того, чтобы отвергнуть этот блок, примерно половина сети приняла его и блокчейн Биткойна разделился на 9 блоков в глубину.
Только скоординированная работа разработчиков Core, которые были на связи с крупнейшими пулами и быстро указали на ошибку, позволила быстро разрешить неожиданный форк цепи. В результате полученной информации от разработчиков, пулы быстро перешли на “правильную” цепочку и заорфанили “неправильную по новой версии”.
Хроника инцидентаРазделение цепи началось, когда пул BTCNuggets добыл устаревшую блока. Несмотря на то, что большинство майнеров (95%) ранее сигнализировало о готовности отвергать устаревшие блоки, они в реальности этого не сделали, и примерно половина майнеров продолжали добавлять свои блоки поверх устаревшей версии цепи. Вот как описывает происшедшее Bitcoin.org:
“Утром UTC 4 июля 2015 года, 950/1000 (95%) порог для перехода на новую версию был достигнут. Вскоре после этого, небольшой пул (из числа тех 5%, кто не проапгрейдил свое ПО) добыл неверный блок “старой” версии. Это было ожидаемое явление, но ожидалось что этот блок будет отвергнут другими майнерами. К сожалению, выяснилось, что примерно половина хэш-мощности сети НЕ ПРОВЕРЯЕТ валидность блоков (так называемый SPV майнинг) и они начали добавлять новые блоки поверх этого недействительного блока.
Обратите внимание, что ранее, эти SPV майнеры явно заявляли, что они будут следить за соблюдением правил BIP66. Не сделав этого, несколько крупных майнеров в итоге потеряли более $50 000 долларов майнингового дохода на данный момент.”
Кто оказался на “неверной стороне форка”? К сожалению, в их числе оказались крупнейшие пулы: Antpool, F2Pool а также серис Blockchain.info. Один только Antpool контролирует почти 36% хэш-мощности сети. Все эти пулы и сервисы пользовались “упрощенным майнингом” с использованием ПО основанного на bitcoinj разработки Maйка Хирна (Привет, сторонники Bitcoin-XT! Дело рук Майка Хирна уже во второй раз оказывается причиной форка сети.)
По состоянию на момент написания этой статьи, большинство пулов перешло на полноценный майнинг и теперь добывают только действительные блоки. Питер Тодд сообщает на Reddit, что только 4% сети по-прежнему ведет майнинг инвалидной цепочки.
Пользователям надо обновиться, или быть осторожнымиТе, кто пользуются клиентами с упрощенными подтверждениями (SPV – такие как Android Wallet и т.п.) остаются уязвимыми для подобных форков, поскольку их клиенты не делают никакой проверки получаемых транзакций. Вы можете видеть, что биткойны пришли на ваш адрес, в то время как ваш кошелек на самом деле получает данные с инвалидной цепи.
Следует обновить клиент Bitcoin Core до версии ядра 0.9.5 или более поздней. Ваши транзакции в любом случае являются безопасными, если вы получили их до 4 июля 2015 8:00 UTC. Для пользователей, работающих с веб и SPV кошельками (для действительно важных транзакций) стоит подождать 30 блоков, прежде чем окончательно принять транзакцию.
Майнеры должны проверить, что их пул уже обновил свою версию ПО и не пользуется уловками типа “майнинга по заголовкам” или переключиться на пул, который гарантирует, что он производит полную проверку блоков. Если они пользуются пулом, который занимается “SPV майнингом”, они могут потерять намайненные деньги.
Почему это вообще произошло?Короткий ответ – из-за того, что некоторые майнеры клепают блоки, не проверяя валидность предыдущих блоков и содержащихся в них транзакций. Как только они получают заголовок (header) нового блока, они сразу же начинают добавлять к нему свою работу, не дожидаясь полной проверки валидности блока или же вообще ничего не проверяя.
Почему майнеры пользуются подобными уловками?Потому, что блоки сейчас приближаются по размеру к 1 MB, и дожидаясь, пока скачается полный блок, прежде чем начать работу, майнеры теряют несколько десятков секунд, чего они не могут себе позволить – это чистые потери майнинговой мощности. Поэтому, они занимаются “читингом” – начинают майнить сразу же, как получили заголовок, и просто забивают на все проверки.
И раньше, были подозрения, что некоторые майнеры пользуются подобными уловками, ни никто не подозревал, что дело приобрело подобный масштаб. По результатам данного инцидента, оказалось, что почти 50% сети уже НЕ ПРОВЕРЯЕТ БЛОКИ И ТРАНЗАКЦИИ.
В этом свете, дебаты по поводу “скорейшего увеличения лимита блоков” приобретают новый оборот. Если бы блоки были размером не 1MB, а 20MB, то их скачивание у большинства майнеров заняло бы не десятки секунд, а уже минуты. Соответственно, не 50% майнеров, а все 100% начнут “майнить по заголовкам”, не добавляя сети ВООБЩЕ никакой безопасности, а просто собирая награду за блок и комиссию. Это фактически означает, что злоумышленник может объявить абсолютно “левый” блок, допустим с дабл-спендингом всех своих транзакций, и “ленивые майнеры” радостно подхватят его заголовок, ничего не проверяя, и будут добавлять поверх него блоки.
Тому, кто сейчас с пеной у рта кричит “Чем больше блоки, тем лучше!” и “Переходим на форк Bitcon-XT“, стоит задуматься о реальной проблеме с безопасностью сети, к которым приведет такое увеличение.
http://bitnovosti.com/2015/07/05/fork-seti/