
Та же ошибка, два исхода: Telestai, Ravencoin и что наследует форк
Вчера мы писали об ошибке консенсуса Ravencoin — непроверяемом поле nHeight в заголовке блока, позволявшем подделывать доказательство работы, и о трёхдневной реорганизации цепи, которая понадобилась, чтобы это отменить.
У той истории есть вторая половина, и она полезнее. В другой сети была ровно та же ошибка ровно в том же месте. Её так и не использовали.
Разницу между двумя исходами стоит понять, потому что это не разница в коде.
Telestai унаследовал изъян, потому что форки так устроены
Telestai — форк Ravencoin. Его кодовая база происходит от кодовой базы Ravencoin, через Meowcoin: в примечаниях к выпуску Telestai Core 3.0.1 среди уборки до сих пор значится «вычистка исходников Meowcoin», а это показывает, насколько недавно эта родословная была видна прямо в дереве исходников.
Проверка заголовков в Ravencoin не сверяла объявленный nHeight с реальным положением блока в цепи. В Meowcoin — тоже. В Telestai — тоже. Никто не заносил эту ошибку в Telestai; она пришла вместе со всем остальным, тем самым способом, каким форк наследует и те части кода, на которые никто не смотрит, и те, на которые смотрят.
Это негламурная механика, по которой один изъян становится проблемой сразу нескольких сетей. Форки — не копии, дрейфующие к независимости. Это копии, несущие всю историю допущений родителя, включая, в данном случае, допущение, что кто-то уже проверяет это поле.
Что Telestai сделал, имея два дня форы
Эксплойт Ravencoin публично раскрыли 11 августа 2026 года. Telestai Core 2.1.8 вышел 13 августа под прямым заголовком «Security: KAWPOW nHeight bind».
Примечания к выпуску не смягчают формулировок:
Этот выпуск исправляет проблему консенсуса/DoS в KAWPOW, где поле заголовка
nHeight(выбирающее эпоху ethash) не было привязано к цепи. Тот же класс ошибки был использован в основной сети Ravencoin. Узлы Telestai на более старых версиях остаются уязвимыми, пока не обновятся.
Само исправление многослойное, и слоистость — самое интересное:
- Абсолютная граница эпохи применяется немедленно, ещё до какого-либо вычисления хеша доказательства работы.
- Строгая привязка
height == prev + 1активируется на блоке 1 100 000 — в стиле софтфорка, без переписывания истории. - Доказательство работы вычисляется только после того, как найден родительский блок и проверена высота; это закрывает путь исчерпания памяти, на котором узел можно было заставить проделать дорогую работу над заголовком, который он должен был отвергнуть сразу.
- Те же проверки применяются в
ConnectBlockиVerifyDB, чтобы узел, переиндексирующий базу, не принял втихую обратно то, что запрещают новые правила.
Основная сеть была на высоте около 1 057 000, когда вышла 2.1.8. Вступление правила в силу назначили на 1 100 000. Этот зазор — примерно 43 000 блоков — был намеренным: достаточно разбега, чтобы биржи, пулы, обозреватели и операторы узлов успели обновиться до включения правила, и не настолько много, чтобы окно оставалось открытым бесконечно.
Telestai также указал источник. Примечания ссылаются на 2miners/Ravencoin, ветку rvn-nheight-fix — тот самый патч, что вышел из инцидента Ravencoin, — и благодарят исследователей, документировавших более полное исправление приёма заголовков. Лекарство прошло тем же путём, каким прошла ошибка.
Два исхода рядом
Две сети. Одно кодовое наследство. Один и тот же спящий изъян.
Изъян Ravencoin первым нашёл атакующий. Итог: четыре дня поддельных блоков до публичного раскрытия, биржи, останавливающие ввод и вывод, падение цены примерно на 20% и трёхдневная реорганизация ради удаления отравленной ветки.
Изъян Telestai нашли, читая чужой отчёт об инциденте. Итог: патч через два дня, высота активации, назначенная с запасом, и — поскольку недействительную историю удалять было не нужно — никакой реорганизации вовсе. Ничего не откатывали, потому что откатывать было нечего.
В этом вся разница. Не лучший код. Не другая ошибка. Только то, кто заметил первым и насколько быстро люди, сопровождающие цепь, отреагировали на чужую плохую неделю.
Затем Telestai полностью сменил алгоритм
Через шесть дней после патча безопасности Telestai выпустил Core 3.0.0 с форком на блоке 1 150 000 — примерно 16 октября 2026 года — на Meraki, собственный алгоритм доказательства работы. Meraki по-прежнему родственник KAWPOW (производное от Ethash с привкусом ProgPoW, а майнер начинался как форк kawpowminer) и подаётся как менее энергоёмкий и доступный на скромных видеокартах.
С причинностью здесь стоит быть аккуратным, потому что соблазн провести прямую линию велик, а линия не прямая. Meraki был в работе ещё до августа: тестовые сборки 3.0.0 для тестовой сети публиковались 13 и 14 августа, в те же дни, что и выпуск безопасности, а такой график никто не собирает за сорок восемь часов. Смена алгоритма была плановой работой, случайно приземлившейся рядом с инцидентом, а не реакцией на него.
В списке выпусков есть и маленький урок о негламурных сторонах сопровождения цепи. Между исправлением безопасности и форком Telestai выпустил 2.1.9 по причине, к консенсусу отношения не имеющей: 2.1.8 была собрана против более новой Berkeley DB, и открытие ею старого wallet.dat могло переписать журналы кошелька так, что старые клиенты больше не читали файл. Поэтому пересобрали против Berkeley DB 4.8 и выпустили снова. От выпуска безопасности мало толку, если обновление до него ставит под угрозу файлы кошельков ваших пользователей.
Почему это важно за пределами двух маленьких сетей
У большинства читающих нет ни RVN, ни TLS. Обобщается здесь схема.
Форкнутые сети делят одну поверхность ошибок, и почти никто её не отслеживает. Litecoin, Dogecoin, Bitcoin Cash, Ravencoin, Zcash и десятки других происходят от Bitcoin Core, и каждая несёт точку расхождения, после которой исправления сверху перестают приходить сами. Уязвимость, раскрытая в одной сети, — это открытый вопрос для каждой сети ниже по течению того же кода, и чем дальше форк отошёл, тем больше труда нужно, чтобы просто понять, применим ли патч. Telestai ответил на этот вопрос за два дня. Не у каждого форка есть человек, чья это работа.
«Никто не использовал» — не то же самое, что «этого там не было». Узловое ПО Telestai было уязвимо всё время своего существования. Ошибка была настоящей всегда; новым было только внимание. Сети, которым никогда не приходит отчёт об инциденте от родственника, таким путём об этом не узнают.
Исправление до эксплойта не стоит почти ничего. То же исправление после стоит реорганизации. Техническая работа в Telestai 2.1.8 и в хардфорке Ravencoin — в целом один и тот же патч. Отличалось всё вокруг: была ли недействительная история, которую надо выбросить, приходилось ли биржам останавливаться, значили ли подтверждения пользователей хоть что-нибудь три дня подряд.
Это то же рассуждение, что стоит за воспроизводимыми сборками и разбором зависимостей: почти всё, что вас защищает, находится выше по течению от всего, что видно изнутри кошелька, и поддерживается людьми, которые внимательны за вас.
Что это значит в SSP
Практически — для вас не меняется ничего.
SSP поддерживает Ravencoin, и наш узел работает на 4.8.0 в восстановленной цепи: во вчерашнем тексте мы сверили хеши блоков по обе стороны реорганизации с эталонной цепью. Telestai SSP не поддерживает, так что никакого баланса Telestai в вашем кошельке, о котором стоило бы беспокоиться, нет.
Мы пишем о сети, которую не поддерживаем, потому что эта история чисто иллюстрирует то, к чему мы относимся серьёзно. Держать узловую инфраструктуру — значит следить за работой по безопасности вверх по течению для каждой сети, которую мы несём, включая те, чьи кодовые базы имеют общих предков. Ценность этого совершенно невидима, пока всё работает: пропатченный узел выглядит ровно как непропатченный — вплоть до того дня, когда перестаёт.
Август Telestai — это как выглядит то же самое изнутри: сопровождающий читает про чужой эксплойт, узнаёт его форму в собственном дереве кода и выпускает версию. Ни инцидента, ни реорганизации, ни объявления, которое кто-то снаружи запомнил бы. Просто номер версии, который вырос.


