Cardano зазнала свого найсерйознішого технічного збою від часу запуску у 2017 році, коли некоректна транзакція спричинила 14-годинний спліт ланцюга 21 листопада, розділивши блокчейн вартістю $14 млрд на конкуруючі форки та спровокувавши гостру дискусію, чи був інцидент навмисною атакою чи невдалою тестовою спробою.
Епізод, який розробники охрестили «Poison Piggy», оголив трирічний баг у програмному забезпеченні вузлів Cardano, що створив дві несумісні версії блокчейна.
Поки засновник Чарльз Госкінсон наполягав, що спліт був «спланованою атакою», яка потребує участі ФБР, розробник під псевдонімом «Homer J» публічно взяв на себе відповідальність, назвавши подію «необережною дією» під час особистого челенджу з відтворення аномалії з тестнета.
Як стався форк
Згідно з звітем про інцидент від Intersect, спліт ланцюга виник через помилку серіалізації, яка вперше проявилася на preview-тестнеті Cardano 20 листопада. Хтось відправив некоректний сертифікат делегування із завеликим хешем – по суті, делегував до «RATSRATS» замість «RATS» (особистий stake-pool Госкінсона).
Старі вузли коректно відхилили недійсний хеш, тоді як вузли з кодом, оновленим у листопаді 2024 року, обрізали його та розцінили як валідний.
Ця різниця версій створила те, що блокчейн-розробник Пі Леннінгем описав у своїй детальній післяінцидентній доповіді як два несумісні ланцюги: «курячий ланцюг», який виконував суворішу валідацію, та «свинячий ланцюг», який прийняв некоректну транзакцію. 21 листопада приблизно о 3:02 ранку за EST до mainnet було надіслано майже ідентичне некоректне делегування, що й розщепило мережу.
Читайте також: Cardano's Hoskinson Calls Fiat System 'Ponzi Scheme', Tells 'Paper Hands' to Hold as Markets Lost $1 Trillion Since October
Погіршення сервісу та наслідки
Аналіз Леннінгема показує значні, але локалізовані збитки. Протягом 14 годин «свинячий» ланцюг створив 846 блоків, тоді як «курячий» – приблизно 13 900 блоків. Включення транзакцій через основну інфраструктуру різко сповільнилося: затримки сягали приблизно 400 секунд, а час створення блоків – до 16 хвилин у найгірші моменти.
Із 14 383 спостережуваних транзакцій 479 – близько 3,3% – з’явилися лише у відкинутому «свинячому» ланцюзі й ніколи не потрапили до фінальної канонічної історії. Більшість із них при повторному надсиланні виявилися невалідними через прострочені інтервали дійсності або конфліктні вхідні дані. Блок-експлорери зазнавали труднощів, інколи зависали або показували суперечливі дані щодо розщепленої мережі.
«Це є серйозним погіршенням якості сервісу для користувачів, але в межах очікувань для сервісу з високою доступністю», – написав Леннінгем. Він наголосив, що попри падіння якості обслуговування, кошти залишалися в безпеці, а мережа продовжувала рухатися вперед протягом усієї кризи.
Атака чи випадковість?
Інцидент спровокував гостру суперечку щодо намірів. Госкінсон охарактеризував його як цілеспрямовану атаку «обуреного оператора stake-пулу», який місяцями шукав спосіб зашкодити мережі. «Це була цілеспрямована атака. Спланована. Ймовірно, знадобилося кілька годин, щоб зрозуміти, як це зробити… Це був зловмисний акт», – заявив Госкінсон, додавши, що було залучено ФБР.
Однак людина, що стоїть за транзакцією, виступаючи як «Homer J» у соцмережах, запропонувала іншу версію: «Вибачте (я розумію, що цього слова недостатньо, зважаючи на наслідки моїх дій), спільното Cardano, це я наражив мережу на небезпеку своєю необережною дією вчора ввечері. Все почалося як особистий челендж “подивитися, чи зможу я відтворити погану транзакцію”, а потім я вчинив дурість», розгорнувши її в mainnet.
Часовий збіг посилив підозри: та сама аномалія з’явилася на тестнеті всього за 24 години до цього, що натякає на тестування експлойта перед запуском у основній мережі.
Відновлення мережі через консенсус
Попри серйозність події, реакція Cardano продемонструвала її децентралізовану модель управління. Завдяки інциденту в тестнеті виправлений вузол уже був доступний. Уночі Input Output Global, Cardano Foundation, Emurgo, Intersect, біржі та оператори stake-пулів скоординувалися через екстрені дзвінки, щоб оновитися до виправленої версії та слідувати за більш суворим «курячим» ланцюгом.
Не було ані відкоту на рівні протоколу, ані централізованого «перезапуску». У міру міграції стейку на оновлені вузли виробництво блоків у «свинячому» ланцюзі сповільнювалося, тоді як «курячий» прискорювався. Коли здоровий форк випередив отруєний, властивості ймовірнісної фінальності Ouroboros забезпечили автоматичне перемикання вузлів на довший, щільніший ланцюг.
«Це є конкретним доказом того, як консенсус Накомото спрацював так, як задумано, та звів мережу до єдиної канонічної історії», – стверджує Леннінгем. Госкінсон зайшов далі, припустивши, що подібний інцидент «вбив би інші ланцюги», але дизайн Cardano дав достатньо часу для скоординованого відновлення.
Уроки та майбутнє посилення безпеки
І Госкінсон, і Леннінгем визнали серйозні вразливості, які виявив інцидент. «Сам факт появи бага – це провал нашої тестової дисципліни», – визнав Леннінгем. Залежність від cardano-db-sync залишила екосистему «сліпою», коли цей компонент упав через некоректну транзакцію. Багато операторів stake-пулів оновилися, не проводячи власного аналізу вибору форку, покладаючись на рекомендації засновницьких структур.
Післяінцидентний дорожній план передбачає посилене fuzz-тестування та тестування, орієнтоване на специфікації, багатші протоколи взаємодії вузол-клієнт, які дозволять гаманцям і біржам впроваджувати «аварійні вимикачі» на основі реального стану консенсусу, більшу різноманітність інфраструктури моніторингу та кращу освіту операторів щодо поведінки Ouroboros під навантаженням.
Ціна ADA впала приблизно на 6% під час інциденту, відстаючи від ширшого відновлення крипторинку, і наразі торгується близько $0,41. Помірне падіння порівняно з масштабом події свідчить, що ринки сприйняли інцидент як тест на стійкість мережі, а не як фундаментальний провал – тест, який Cardano зрештою пройшла, хоча й виявивши ділянки, що потребують термінового вдосконалення.
Читайте далі: Cardano Whales Accumulate $204 Million in Four Days Despite 30% Price Decline

