“Ленивые майнеры” стали причиной форка сети

Bitcoin-Block-Chain-Forked-620x420

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

Недавно добавленное в Bitcoin Core oбновление BIP66 призвано окончательно решить проблему “пластичности транзакций” (transaction malleability), через более строгие требования к проверке криптографических подписей транзакций. В рамках правил BIP, когда 950 последних 1000 блоков заявляют о поддержке этого обновления, блоки старой версии становятся устаревшими. Однако вчера вечером, уже после того как изменение вступило в силу, один из майнеров произвел старую версию блока. Вместо того, чтобы отвергнуть этот блок, примерно половина сети приняла его и блокчейн Биткойна разделился на 9 блоков в глубину.

Только скоординированная работа разработчиков Core, которые были на связи с крупнейшими пулами и быстро указали на ошибку, позволила быстро разрешить неожиданный форк цепи. В результате полученной информации от разработчиков, пулы быстро перешли на “правильную” цепочку и заорфанили “неправильную по новой версии”.

Хроника инцидента

Разделение цепи началось, когда пул BTCNuggets добыл устаревшую версию блока. Несмотря на то, что большинство майнеров (95%) ранее сигнализировало о готовности отвергать устаревшие блоки, они в реальности этого не сделали, и примерно половина майнеров продолжали добавлять свои блоки поверх неправильного блока BTCNuggets. Вот как описывает происшедшее Bitcoin.org:

“Утром UTC 4 июля 2015 года, 950/1000 (95%) порог для перехода на новую версию был достигнут. Вскоре после этого, небольшой пул (из числа тех 5%, кто не проапгрейдил свое ПО) добыл неверный блок “старой” версии. Это было ожидаемое явление, но ожидалось что этот блок будет отвергнут другими майнерами. К сожалению, выяснилось, что примерно половина хэш-мощности сети НЕ ПРОВЕРЯЕТ валидность блоков (так называемый SPV майнинг) и они начали добавлять новые блоки поверх этого недействительного блока.

Обратите внимание, что ранее, эти SPV майнеры явно заявляли, что они будут следить за соблюдением правил BIP66. Не сделав этого, несколько крупных майнеров в итоге потеряли более $50 000 долларов майнингового дохода на данный момент.”

Кто оказался на “неверной стороне форка”? К сожалению, в их числе оказались крупнейшие пулы: Antpool, F2Pool, а также сервис Blockchain.info. Соответственно, на Blockchain.info долгое время демонстрировалась неправильная версия цепочки, и многие зависящие от него сервисы не могли заметить потенциальный дабл-спендинг.

Bitcoin-Block-Chain-Fork-BlockchaininfoИз “неправильных” пулов, один только Antpool контролирует почти 36% хэш-мощности сети. Все эти пулы и сервисы пользовались “упрощенным майнингом” с использованием ПО основанного на bitcoinj разработки Maйка Хирна (Привет, сторонники Bitcoin-XT! Дело рук Майка Хирна уже во второй раз оказывается причиной форка сети.)

По состоянию на момент написания этой статьи, большинство пулов перешло на полноценный майнинг и теперь добывают только действительные блоки. Питер Тодд сообщает на Reddit, что только 4% сети по-прежнему ведет майнинг инвалидной цепочки.

Пользователям надо обновиться, или быть осторожными

Те, кто пользуются клиентами с упрощенными подтверждениями (SPV – такие как Android Wallet и т.п.) остаются уязвимыми для подобных форков, поскольку их клиенты не делают никакой проверки получаемых транзакций. Вы можете видеть, что биткойны пришли на ваш адрес, в то время как ваш кошелек на самом деле получает данные с инвалидной цепи.

Следует обновить клиент Bitcoin Core до версии ядра 0.9.5 или более поздней. Ваши транзакции в любом случае являются безопасными, если вы получили их до 4 июля 2015 15:00 UTC. Для пользователей, работающих с веб и SPV кошельками (для действительно важных транзакций) стоит подождать 30 блоков, прежде чем окончательно принять транзакцию. (UPDATE: разработчики Core coобщили, что проблема в основном снята, SPV юзерам достаточно получить 2-3 подтверждения)

Майнеры должны проверить, что их пул уже обновил свою версию ПО и не пользуется уловками типа “майнинга по заголовкам” или переключиться на пул, который гарантирует, что он производит полную проверку блоков. Если они пользуются пулом, который занимается “SPV майнингом”, они могут потерять намайненные биткойны.

Почему это вообще произошло?

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

Почему майнеры пользуются подобными уловками?

Потому, что блоки сейчас приближаются по размеру к 1 MB, и дожидаясь, пока скачается полный блок, прежде чем начать работу, майнеры теряют несколько десятков секунд, чего они не могут себе позволить – ведь это чистые потери майнинговой мощности. Поэтому, они занимаются “читингом” – начинают майнить сразу же, как получили заголовок, и просто забивают на все проверки.

И раньше, были подозрения, что некоторые майнеры пользуются подобными уловками, но никто не подозревал, что дело приобрело подобный масштаб. По результатам данного инцидента, оказалось, что почти 50% сети уже НЕ ПРОВЕРЯЕТ БЛОКИ И ТРАНЗАКЦИИ.

В этом свете, дебаты по поводу “скорейшего увеличения лимита блоков” приобретают новый оборот. Если бы блоки были размером не 1MB, а 20MB, то их скачивание у большинства майнеров заняло бы не десятки секунд, а уже минуты. Соответственно, не 50% майнеров, а все 100% начнут “майнить по заголовкам”, не добавляя сети ВООБЩЕ никакой безопасности, а просто собирая награду за блок и комиссию. Это фактически означает, что злоумышленник может объявить абсолютно “левый” блок, допустим с дабл-спендингом всех своих транзакций, и “ленивые майнеры” радостно подхватят его заголовок, ничего не проверяя, и будут добавлять поверх него блоки.

Тому, кто сейчас с пеной у рта кричит “Чем больше блоки, тем лучше!” и “Переходим на форк Bitcon-XT“, стоит задуматься о реальных проблемах с безопасностью сети, к которым приведет такое увеличение.



Categories: Важное, Майнинг, Происшествия, Технологии

Tags: ,

40 replies

  1. Хорошая статья, особенно для тех, кто считает биткоин самым безопасным среди форков ))

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

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

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

    • ВОТ ИМЕННО! И текущий рост курса обусловлен быстрым решением этой проблемы. это же высокоэффективная организация, что смогла устранить такой масштабный глюк всего за меньше суток.. и теперь представьте подобный глюк в вашем банке. Это как минимум, вам надо ждать у банкомата 2 часа. А максимум – вы прете в банк и пошло поеб…
      Вот в Греции знакомый живет. я ему пишу ты про биткины знаешь? он пишет 2 дня назад – не. сегодня пишу ты знаешь про биткоины? он уже грит знаю. Вот и пошла волна, ребятки! 2 недели, как минимум.

  5. И раньше, были подозрения, что некоторые майнеры пользуются подобными уловками, ни никто не подозревал, что дело приобрело подобный масштаб. По результатам данного инцидента, оказалось, что почти 50% сети уже НЕ ПРОВЕРЯЕТ БЛОКИ И ТРАНЗАКЦИИ.

    В этом свете, дебаты по поводу “скорейшего увеличения лимита блоков” приобретают новый оборот. Если бы блоки были размером не 1MB, а 20MB, то их скачивание у большинства майнеров заняло бы не десятки секунд, а уже минуты. Соответственно, не 50% майнеров, а все 100% начнут “майнить по заголовкам”, не добавляя сети ВООБЩЕ никакой безопасности, а просто собирая награду за блок и комиссию. Это фактически означает, что злоумышленник может объявить абсолютно “левый” блок, допустим с дабл-спендингом всех своих транзакций, и “ленивые майнеры” радостно подхватят его заголовок, ничего не проверяя, и будут добавлять поверх него блоки.

    Господа, это какойто сюрреализм! Или по-русски полный пиp*ец.

    • Тому, кто сейчас с пеной у рта кричит “Чем больше блоки, тем лучше!” и “Переходим на форк Bitcon-XT“, стоит задуматься о реальной проблеме с безопасностью сети, к которым приведет такое увеличение.

      • А ничего, что майнерам наплевать на реальную безопасность сети? Вы уверены что сеть выживет, если начнет играть по правилам существующей фин. системы, а именно – “Не заплатишь, не поплывешь”? Ведь биткойн красив именно тем, что в нем правила диктует только алгоритм. Если же правила начинает диктовать БИЗНЕС, то вся игра меняется. А майнеры, как раз и переходят в режим бизнес игры.

        Не проще ли перестать кричать “наши мощности основа безопасности”, а признать, что игра лишь ради профита. И тогда лучше сразу вернуть все на круги своя. Каждый пользователь, не взирая на выгоду, выделяет мощность своей машины для поддержания работы сети. При этом сеть будет работать потому что это выгодно всем, а не только майнерам. Я с удовольствием отдам 10-20% своих домашних вычислительных ресурсов, не ожидая в замен ничего. Отдам, потому, что буду знать что это делают большинство, безусловно, только бы работала сеть.

        Все, что я сейчас могу сделать, это держать ноду запуская Bitcoin Core. Майнить, ради поддержки сети, не могу, т.к нет софта уровня “простой юзер” под этот процесс. К сожалению в ранних версия клиента эту функцию убрали, и простой пользователь не может этого сейчас сделать.

        • На примере торрент сети. У меня практически всегда включен торрент клиент. Он запускается автоматом при включении компьютера, и я не обращаю на это никакого внимания. Мне совершенно не жалко мощности которую он потребляет, я просто этого не замечаю. Мой жесткий диски занят десятком гигабайт контента, который был скачан при помощи торрент сети, и который работаем на благо этой сети до момента когда я его удаляю по причине ненадобности . Причем это все происходит естественно. Я просто пользуюсь сетью, не ищу специальной выгоды, но и не считаю отданного ей. Иногда вижу статистику отданного и скачанного, причем отдача зачастую бывает выше, чем потребление. И мне совершенно не жалко, я полностью хладнокровен к этим цифрам. Достаточно того, что я удовлетворен полученным контентом. Ценен сам факт возможности использования торрент сети. Все это можно наложить и на биткойн сеть. Не важно сколько она заберет моей мощности, пока будет включен домашний ПК, важно то удовлетворение, то удобство, скорость, комфорт который я получаю за то, что могу пользоваться биткойном.

        • Если из-за намеренно лениво-хитрозадых майнеров начнется систематический приём инвалидных блоков, то ценность биткойна станет равна нулю. Это – не то, в чем заинтересованы майнеры.

          Так что со стимулами для бизнеса тут всё нормально.

          • Ситуация показала, что они заинтересованны только в профите который можно качать из биткойн сети. Судя по этому 50% плевать на завтра, главное урвать сегодня. Иначе почему они не проверяют блоки и транзакции, а стремятся сэкономив секунды? И это не просто лень.

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

              Короче, не понимаю я этой антикапиталистической ментальности.

            • Антикапитализм – это пережиток времени, ведь у нас многие еще не избавились от совка в голове, и продолжают ему слепо следовать, даже если думают, что действуют в каких-то “новомодных” рамках. Пример – истошное желание старого поколения покупать совершенно бесполезные устройства, менять айфоны каждые 3 месяца, смотреть широченные плазмы и питаться как молодежь, хотя “ресторан макдональдс” он “молодежный” ровно настолько же, насколько кока-кола – напиток успешных миллионеров спортсменов. Вместо того, чтобы делать СВОЙ выбор, соввок делает “то, что надо”, “как у людей”, и “а что соседи подумают?”. Это вполне нормальная ситуация. В СНГ из зовут “совки”, или “колхозники”, в Америке – “реднеки”, в Польше – “кметы”, в Германии – “уленшпигели” и тп.

  6. Зачем вносить изменения в код? если в цепочке форка появился неправильный блок он будет отвергнут как отвергались множественные цепочки когда находились одновременно два блока. Пусть майнеры фиксят свои клиенты чтобы вернуться на правильный блокчейн

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

    • Ну вроде того)

      • Вообще, “проверяющих” нужно ВСЕГДА проверять. Человеческий фактор, т.е. абсолютная и подавляющая ЛЕНЬ большинства населения планеты, всегда играет роль в каком нибудь эпичном фейле. Надеемся, что Биткойн – станет приятным исключением и с ним не будет “поломки” по вине рукожопых Гэвина и Хирна, которым выпендреж и бизнес куда дороже, как оказывается, стабильности системы. Хорошо, что не все в их руках, а то было бы уже некак считать себя “финансово независимым”.

        • А причем здесь Гэвин и Хирн? Софт, который они выпустили, должны были обновить пулы. А вот БИЗНЕС куда дороже, как оказалось, стал для майнеров, чем безопасность. Ведь они не проверяли блоки, создав вилку, гнались за профитом, забив на все остальное.

  8. Мне кажется, все идет от лени. Вернее, не было экономической выгоды.
    Вероятность появления плохого блока близка к 0. Поэтому зачем тратить ресурсы на проверку. Будут появляться плохие блоки, будут проверять. Потому как, майнинг от плохого блока приводит к недополучению прибыли.

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

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

    • “Параллельно другим процессом продолжаешь проверять блок.”
      Тратить ресурсы на необязательную проверку это потеря экономической выгоды для китайских майнеров.

      • Здесь нужно определяться за кого ты играешь. Или ты ищешь чисто свою выгоду, или выгоду для всей сети. Если ты только получаешь выгоду, а ничего не даешь, то ты паразит, а если ты еще и вредишь, как это было в этот раз, то ты уже вредитель. А вредители точно не нужны сети биткойн.

        • Тут и определяться нечего. Майнеры “играют” за себя и конкурирую при этом с другими майнерами. И это нормально. Что не нормально, так это недобросовесная конкуренция – когда майнер пренебрегает отраслевыми стандартами для получения дополнительного конкурентного преимущества.

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

          А для альтруистов есть различные благотворительные фонды 🙂

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

            • Централизация майнинга биткойнов привела к тому, что действия крупных пулов нужно контролировать извне. В теории, для этого нужно выработать единые для всех правила “игры” (если не нравися слово стандарты) и как то обязать их выполнять.

              Вчера эти майнеры не хотели включать в блоки транзакции с якобы низкими комиссиями и лепили пустые блоки.
              Сегодня они не хотят проверять проверять валидность предыдущих блоков и неумышленно (?) создают форк сети.
              А завтра пара крупных пулов попросят скинуться им на пенсию иначе сами намайнят себе 22M btc.

              Скажите конспирология? Слишком много совпадений в последнее время..

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

  9. надо платить только после проверки

    • Не понял, ЩИТО?

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

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

        • Блок считается найденным после того как вычислился хэш точка. Если часть майнеров считает не правильно тогда они теряют деньги т.к. большинство отбросит такой блок как неправильный.

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

  10. А возможна такая реализация: на время ожидания получения твоим текущим пулом блока в 1МБ (20МБ), перепрыгивать как раз на тот пул, что этот блок создал?

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

  11. не увеличивать а уменьшать блок

    • В принципе, согласен. Но нам нужны оценки комсы и лояльности.

    • Надо выкинуть из транзакций весь мусор типа комментариев и ограничить количество инпутов и аутпутов. Тогда и транзакций больше будет влезать.

    • Не стоит, размер итак уже используется в среднем на 40%, если уменьшить в 2 раза, “потолок” можно пробить таки.

Поделитесь своими мыслями

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s