Перевод «Ночной кошмар» - научно-фантастический рассказ в стиле Monero

Тема в разделе "Статьи", создана пользователем Mr. Pickles, 10 дек 2021.

  1. Mr. Pickles

    Команда форума Модератор Редактор

    Регистрация:
    11 сен 2017
    Сообщения:
    1.004
    Симпатии:
    249
    Первая и пока ещё самая известная на текущий момент криптовалюта, Bitcoin, обладает целым рядом инновационных и довольно интересных функций. Среди них — полностью децентрализованный способ управления платежами, называемыми транзакциями: за валютой стоит сеть, состоящая из тысяч так называемых узлов, компьютеров, на которых установлено программное обеспечение Bitcoin, и которые обмениваются друг с другом данными через Интернет с целью обмена, проверки и совместной записи таких транзакций. Программное обеспечение является бесплатным и не требует никаких разрешений по использованию: практически каждый, у кого есть приличный компьютер и подключение к Интернету, может создать и запустить собственный узел.

    Криптовалюта Monero, появившаяся через несколько лет после Bitcoin, также использует такую сеть. Узлы Monero, по каким-то заумным причинам, называемые демонами, обмениваются друг с другом информацией особым образом: они не используют ни один из широко распространённых протоколов, таких как HTTPS, которые браузеры задействуют для соединения с серверами WWW, а реализуют малоизвестный и проприетарный протокол под названием Levin. Частью этого протокола является подпись, строка байтов, которую демоны используют, чтобы сообщить друг другу в начале обмена информацией: «Да, всё правильно, я тоже демон, и вы можете обмениваться со мной данными, я всё пойму и отвечу вам». Любой сервер, который после контакта не вернёт соответствующую подпись или отреагирует неправильно, будет проигнорирован.

    Возможно, создатель протокола Levin был поклонником «Футурамы», американского научно-фантастического анимационного ситкома с роботом по имени Бендер в качестве одного из главных героев. В одном эпизоде роботу снится кошмар, где в последовательности двоичных разрядов, нулей и единиц, внезапно появляется что-то определённо лишнее — цифра 2.

    Этот роботизированный кошмар и превратился в подпись: демоны Monero подтверждают установление связи друг с другом с помощью последовательности из восьми байтов, которые при записи в виде шестнадцатеричного числа выглядят как 0101010101012101.

    ---​

    Большую часть 2019 года он был тайным правителем сети Monero. У него было более 5000 специальных вычислительных устройств, так называемых ASIC, которые работали днём и ночью. Все эти специализированные машины «добывали» Monero, решая что-то вроде ужасно сложных математических загадок. При этом каждая загадка решалась раньше, чем кому-либо другому разрешалось добавить новый блок в блокчейн Monero за вознаграждение в размере немногим более 2 XMR.

    Сеть Monero постоянно самонастраивается таким образом, чтобы новый блок в блокчейне появлялся в среднем каждые две минуты. В 2019 году вы могли обменять 1 XMR минимум на 50 долларов США, воспользовавшись услугами криптовалютной биржи. Поскольку его устройства ASIC были намного быстрее, чем всё то, что было доступно для майнинга Monero, он находил более половины всех блоков каждый день, а это означало, что он зарабатывал около 40 000 долларов США в день, то есть, более миллиона долларов ежемесячно.

    Конечно же, сначала он полностью профинансировал разработку машин и их производство, что было довольно дорого и рискованно. Но теперь он был впереди, и, по сути, только счёт за электричество раз в месяц съедал небольшую часть из этих 40 000 долларов непредвиденных доходов. Остальное же составляло чистую, лёгкую и даже не облагаемую налогом прибыль.

    Несмотря на то, что люди, занимающиеся разработкой программного обеспечения Monero, так и не узнали, кем он был, им прекрасно было известно, что его машины участвуют в процессе. Для этого было достаточно понаблюдать за тем, что происходило с этими блоками. Они считали его флот из устройств ASIC самой большой опасностью для Monero, потому что наличие более половины общей мощности майнинга под контролем одного лица, позволяло провести атаку на сеть, так называемую атаку 51%. Кроме того, они хотели, чтобы практически любой пользователь, обладающий устройством с быстрым процессором, имел возможность участвовать в майнинге криптовалюты, чтобы процесс майнинга был демократичным и децентрализованным.

    Для достижения этих целей они изобрели новый вид «загадки» под названием RandomX, и когда 30.11.2019 в 18:57:47 по всемирному времени на блоке 1978433 это решение было реализовано в сети, все эти замечательные «доходные» ASIC превратились в бесполезный электронный мусор, который уже никогда более не смог бы принести ни единого доллара прибыли от майнинга.

    Для тайного правителя сети Monero это стало внезапным и глубоким падением. Он поклялся себе вернуть прежнюю власть. Это более не могло быть связано с майнингом, поскольку RandomX был продуман так, чтобы сделать применение прибыльных ASIC более или менее невозможным. Но он решил, что найдёт другой способ.

    ---​

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

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

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

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

    Но и это, честно говоря, казалось маловероятным. Разработчики Monero давно мечтали о разработке альтернативных вариантов реализации демонов. Другие криптовалюты, такие как Bitcoin и Ethereum, использовали несколько различных типов узлов, которые обеспечивали положительный эффект, например, повышение устойчивости сети к ошибкам в целом и постепенное улучшение программного обеспечения, благодаря дружеской конкуренции между командами, поддерживающими такие узлы.

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

    ---​

    Только две недели спустя туман рассеялся, когда на сцене появилась анонимная команда разработчиков и представила Phoenix, полностью функциональный демон Monero, написанный на Rust, более современном языке программирования, чем C++, который использовался в случае со «старым» программным обеспечением Monero. Это был свежий, чистый код сверху и донизу, написанный явно компетентными людьми.

    Я испытал смешанные чувства по этому поводу. Безусловно, реализация второго вида узла была исключительно выгодна, но динамика мощности в «экосистеме» Monero, конечно же, при этом бы значительно изменилась. В течение многих лет группа из семи человек, объединившихся под названием Monero Core Team, занималась тем. что обеспечивала безопасность программного обеспечения Monero и, соответственно, валюты и сети Monero в целом, обеспечивая тем самым доверие и уважение со стороны огромного количества людей. И теперь внезапно появилась вторая команда, состоящая из «новичков», но уже, благодаря Phoenix, сосредоточившая в своих руках значительную власть.

    Это было немного странно. Разработка, вплоть до полной рабочей готовности, происходила скрытно, что необычно для программного обеспечения с открытым исходным кодом. Я также задавался вопросом, почему всё выглядело так, как будто ни один человек из команды Phoenix раньше не принимал участия в разработке Monero; «обычные подозреваемые» полностью отсутствовали.

    ---​

    Вскоре после этого Эндрю, мой коллега, также работавший над Monero, связался со мной через IRC. Он был явно обеспокоен.

    «Я решил связаться с тобой после долгого разговора с бывшим разработчиком Monero, который сумел попасть в команду Phoenix несколько месяцев назад. Они не знают, кто он такой, и поэтому он может тайно разоблачить их. То, что он мне рассказал, очень тревожно».

    «То есть, ты хочешь сказать, что они всячески избегают встречи с нами?» — спросил я.

    Эндрю ответил утвердительно: «Да. Они пытаются быть полностью независимыми и стараются сделать так, чтобы мы оставались в полном неведении в отношении их планов, касающихся демон Phoenix. И то, что они планируют, со слов нашего «осведомителя», действительно сильно».

    Я не смог сдержать смех: «Тебе, как и мне, прекрасно известно, что всё, касающееся сети Monero, максимально устойчиво, и разрабатывается именно таким образом, что учитывает возможность создания сторонних демонов Monero, включая те, что создаются нашими самыми страшными врагами. Ну и чего нам опасаться?»

    «Они планируют захват сети и установление полного контроля над Monero, ни больше, ни меньше».

    «Вот как? Уже трепещу».

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

    Я был настроен скептически: «Думаешь, одной большей сети с большим количеством активных демонов будет достаточно, чтобы переманить людей у тех, кому они доверяли в течение многих лет, и чьё программное обеспечение программное обеспечение использовали всё это время?»

    «Да. Кроме того, дело далеко не только в самом демоне. Ведь демоны, используемые важными криптовалютными биржами и в большими майнинговыми пулами, в некотором смысле намного важнее, чем твои и мои демоны. И, похоже, они заняты тем, что активно подкупают такие стороны, чтобы те за деньги переключились на Phoenix».

    А это уже звучало тревожно.

    «Я ещё не рассказал самого интересного из своей беседы с информатором, — добавил Эндрю. — Феникс — это ведь птица, возродившаяся из пепла, верно? Помнишь тот таинственный флот примерно из 5000 ASIC, который управлял сетью в 2019 году, прежде чем мы смогли избавиться от них благодаря RandomX?»

    «Ну, конечно же, я помню».

    «Отлично. Человек, стоящий за проектом Phoenix, запустивший его ещё в 2020 году и полностью профинансировавший его, и был владельцем всех этих ASIC. Он всё ещё чертовски зол на нас за то, что мы, так скажем, отняли у него сеть. Он хочет вернуть её, и Phoenix станет его инструментом».

    «Хмм... Это уже совсем не хорошо. Есть какие-нибудь подробности, касающиеся того, как он собирается разделить сеть?»

    «Ночной кошмар Бендера».

    До меня дошло не сразу: «Подпись Levin?»

    «Именно. Они переключат свои демоны на 0101010101013101 или что-то вроде этого, что-то несовместимое, и это приведет к немедленному разделению сети на две отдельные».

    Я был вынужден согласиться. «Действительно, кошмар».

    ---​

    Чуть позже нас осенило, что демонам Phoenix понадобится второй механизм, необходимый для того, чтобы согласовать между собой непосредственный момент разделения сети. Мы с Эндрю обсудили это и пришли к выводу, что для этого лучше всего было бы использовать то, что уже имеется. Демоны Monero делают всё возможное для того, чтобы о каждой новой транзакции узнавала вся сеть. Учитывая это, достаточно просто найти способ, позволяющий превратить транзакцию в триггер. Самым простым и самым надёжным способом стала бы реакция на транзакцию с определённым идентификатором.

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

    Однако, существовала одна проблема. И проблема была монументальной.

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

    Идентификаторы транзакций Monero — это чудовищные по длине числа, например, 789e63f1d2a95c891642ef571e3d959c8bf4182e23ec3f3b38e629beac0338f7. Они выводятся на основе байтов, составляющих транзакции, в процессе, называемом хешированием, который работает только в одном направлении, а это означает, что с при наличии таких длинных хешей не существует никакого практического способа найти последовательность байтов, которая даст конкретно этот идентификатор.

    Это означало, что мы просто были не в состоянии создать вторую транзакцию с таким же точно идентификатором.

    Был ли какой-то хитрый способ решить эту проблему? Мы задались вопросом: можно ли создать и передать произвольную транзакцию, в которой бы просто утверждалось, что у неё имеется тот самый магический идентификатор? Но проблематичность реализации этой идеи быстро всплыла наружу: демоны Monero не принимают транзакции для обработки и немедленного их распространения; сначала они всячески проверяют транзакции, чтобы убедиться в том, что они действительны. Они бы повторно вычислили идентификатор на основе байтов транзакции, определили бы, что заявленный идентификатор неверен, и попросту отклонили бы транзакцию.

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

    ---​

    На следующий день Эндрю начал разговор в IRC с восклицания: «Победа!»

    «Как это?»

    Я почти чувствовал, как его восторг передаётся мне через Интернет. «Там есть ошибка».

    «Давай же, не томи!»

    «Исключительно от отчаяния я всё равно решил отправить демону Phoenix недействительную транзакцию с триггерным идентификатором. Я чуть не упал со стула, когда он отреагировал на неё. Вместо того, чтобы полностью игнорировать её и ничего не предпринимать, он начал проверять проверяет идентификатор».

    «Ха! Выглядит в точности так, как та глупая ошибка, которую все мы время от времени допускаем :) »

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

    «Как бы то ни было, не имеет значения. Но погоди, мы всё же не можем заставить сеть транслировать недействительную транзакцию, не так ли? Какой нам толк от этой ошибки?»

    «Рад, что ты спросил. Я уже работаю над этим. Нам не нужны никакие демоны. Я параллельно работаю над программой, которая использует протокол Levin и достаточно умна для того, чтобы находить всех демонов в сети и напрямую выдавать каждому из них нашу транзакцию с триггерным идентификатором».

    «Гениально :) »

    ---​

    День, когда всё стало известно общественности, вошёл в историю как «День мести Бендера». И у всей этой истории даже был счастливый конец: некоторые заслуживающие доверия разработчики Monero вывели Phoenix из под контроля нашего врага, «разветвив» код и опубликовав свою собственную версию, и с тех пор не поддерживали её в актуальном состоянии, равно как и её совместимость со «старым» демоном Monero. Таким образом, мы не только победили «Мистера Monero-ASIC» во второй раз, но и получили нечто очень ценное — альтернативную версию реализации узла.

    Мне просто интересно, действительно ли это конец истории, или же наш противник уже вынашивает новые планы...

    ---

    Источник: "Nightmare" - A Monero Fiction Short Story

    Перевод:
    Mr. Pickles (@v1docq47)
    Редактирование:
    Agent LvM (@LvMi4)
    Коррекция:
    Kukima (@Kukima)
     
  • О нас

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