11 августа контрибьютор по имени Шон сообщил, что его же трюк экономии байтов в спецификации заменяемых токенов KCC20 позволял любому минтить токены вовсе без подписи. Он опубликовал исправление — три байта — в тот же день, до того как кто-либо успел выпустить код, опирающийся на дефект. Это чистый пример того, зачем существует открытое ревью и почему «черновик» означает черновик.
Что такое KCC20 и на каком этапе он находится
KCC20 — это предлагаемый стандарт заменяемых токенов для Kaspa на основе ковенантов. Он существует в виде не имеющего версии открытого пулл-реквеста в репозитории kaspanet/kccs. Он не был смержен, версионирован или утверждён никаким формальным процессом.
Это не помешало людям разворачивать токены на его основе. Хардфорк Toccata активировал поддержку ковенантов в мейннете 30 июня, и с тех пор разработчики экспериментируют. Спецификация — это песочница, но она всё ещё рисуется.
В этом контексте Шон — одновременно и контрибьютор спецификации, и разработчик, работающий с ней — за несколько дней до 11 августа предложил небольшую оптимизацию. Трюк экономил байты в структуре транзакции. Он также, как Шон обнаружил, полностью снимал требование подписи для одного класса входов.
Баг: минтинг без подписи
В основе логики ковенантных токенов лежит аутентификация: доказательство того, что сущность, перемещающая или создающая токены, имеет на это право. Трюк Шона освобождал один вход от этой проверки ради снижения веса транзакции.
Его собственная формулировка точна:
«Если вы освобождаете один вход от аутентификации для экономии байтов, собственные флаги этого входа становятся всей границей безопасности.»
Перевод: то, что должно было быть защищено, стало единственным, что обеспечивает защиту. Любой держатель KAS — не только деплойер токена — мог минтить произвольное количество, потому что для авторизации минтинга не требовалась подпись. Флаги на входе были замком, а замок был открыт по дизайну.
Это не тонкий криптографический сбой. Это логическая ошибка в черновом документе — из тех, что случаются, когда быстро итерируешь новый примитив. Важная часть — то, чего *не* произошло: никто не выпустил кошелёк, DEX или токен-мост, которые доверяли бы дефектному трюку.
Три байта
Исправление восстановило проверку подписи на освобождённом входе. Три байта. Дифф тривиален; последствия необнаружения — нет.
Шон сам нашёл и сообщил о баге. Он опубликовал исправление в том же пулл-реквесте. Спецификация остаётся черновиком. По любому разумному стандарту это система, работающая правильно: открытый исходный код, открытое ревью, раннее обнаружение.
Почему это важно за пределами KCC20
Ковенантам Toccata около семи недель в мейннете. UTXO-множество ковенантов выросло до 2730 — рекордного значения, — хотя количество транзакций, создающих ковенант-связанные выходы, снизилось на 92,6% от пика 1 августа. Разработка идёт, но находится на ранней стадии.
Silverscript — язык, на котором пишутся ковенанты, — объединил свою первую политику безопасности 11 августа, на следующий день после прохода по харденингу, и под влиянием разработчика, обнаружившего, что функция подписи ведёт себя не так, как он предполагал. Он сообщил об этом приватно, а не выкладывая детали публично. Мейнтейнеры ответили, что это уже исправлено апстримом. Его практическая заметка для остальных: если вы привязаны к старой версии компилятора, убедитесь, что встроенная функция подписи, которую вы вызываете, действительно компилируется в verify.
Между тем не существует стандартного способа для кошелька обнаруживать, декодировать или тратить состояние ковенант-токена. Команда, запускающая ковенант-токен в тестнете, описала ситуацию прямо: «Сейчас приложение — это актор, и иначе быть не может. Мы встраиваем кошелёк внутрь приложения… Ни один чужой кошелёк не может работать с нашим токеном без повторной реализации всего.» Решение — спецификация дескриптора, спецификация ридера, спецификация врайтера — существует только как черновой дизайн.
Вот ландшафт. Ковенанты работают. Токены разворачиваются. Но спецификации — черновики, инструментарий фрагментирован, а поверхность атаки всё ещё картографируется. Баг минтинга KCC20 — не тревога; это точка данных о темпе и профиле рисков этого этапа.
Что это значит для держателей и разработчиков Kaspa
Если вы держите KAS и следите за развитием экосистемы ковенантов, вывод не в том, что «ковенанты сломаны». Консенсусный слой Toccata и компилятор Silverscript отделены от любой отдельной спецификации токенов. Баг был в черновике, найден автором черновика и исправлен до того, как от него кто-либо зависел.
То, что это *должно* закрепить, — осторожность при развёртывании капитала на не имеющих версии спецификациях. Токен, который выглядит работающим, может опираться на допущения, ещё не прошедшие публичную проверку. Исправление в три байта — напоминание о том, что в логике контрактов малые вещи имеют непропорционально большой вес.
Тот же принцип — открытые контракты, ключи на вашем устройстве, код, который можно проверить — пронизывает всё, что построено на Toccata. Контракты хранилища Kaspa Safe — открытый исходный код с 25 проверками самотестирования в ноде VM; ключ тревоги и пути наследования видны в блокчейне, а не скрыты за платформой. Когда спецификация ещё пишется, проверяемость — не роскошь. Это минимум.
Общая картина ковенантов на этой неделе
Баг Шона был самой резкой новостью, но неделя 10–14 августа несла несколько сопутствующих сигналов:
- Первый тай-брейкер DAGKnight покинул стадию TODO.
coderofstuffобъединил рабочую реализацию 12 августа на фича-бранчеdagknight, а не наmaster. Ничего в мейннете, никакой даты активации. Это преемник GHOSTDAG без параметров, а правило тай-брейкинга обрабатывает случай, когда две конкурирующие группы блоков завершают поиск вничью.
- kaspa-x402 Alpha.10 вышел 10 августа — тестнетовая привязка для схемы x402 payment-required, перестроенная на ковенантах Toccata, чтобы платежи переживали дозапросы и частичные клеймы. В заметках к релизу есть собственная оговорка: только тестнет, без заявлений о готовности к мейннету.
- Ежедневное количество транзакций Kaspa составляет около 84 000 — снижение более чем на 99% по сравнению с 11,8 миллиона на второй неделе июня. Снижение реальное, но вывод, который большинство сделало бы, неверен. 30 июня хардфорк Toccata повысил минимальную комиссию ретрансляции с 1 сомпи за грамм до 100 — стократное увеличение самой дешёвой транзакции, которую нода примет. Это правило мемпула, а не консенсуса; транзакции с нулевой комиссией остаются консенсусно валидными. Основной объём до хардфорка шёл от Kaspadrome, который, по всей видимости, не работает с момента хардфорка и, вероятно, адаптируется к изменениям. Эта цифра измеряет то, что ноды ретранслируют, а не то, на что сеть способна.
Каждый из этих пунктов — баг спецификации, веха алгоритма, тестнетовая платёжная привязка, сдвиг в политике комиссий — это фрагмент одной и той же ранней стадии разработки. Паттерн ясен: серьёзная инженерия, публичные итерации, никаких преждевременных заявлений.
Три байта и ценность слова «черновик»
Баг минтинга KCC20 — не последний дефект, который будет найден в спецификации ковенантов Kaspa. Ковенанты — новый примитив на молодом контрактном слое. Важна форма обратной связи: открытые предложения, контрибьюторы, тестирующие свою собственную работу, исправления, опубликованные до ущерба, и никто не делает вид, что черновик — это продакшн.
Три байта Шона — небольшой патч. Привычка, их породившая — строить, ломать собственное и чинить на виду — вот что стоит сохранить.
FAQ
Что такое KCC20?
KCC20 — это черновая спецификация заменяемых токенов для Kaspa, построенная на ковенантах Toccata. Она всё ещё остаётся не имеющим версии открытым пулл-реквестом в kaspanet/kccs и официально не выпущена.
В чём заключался баг KCC20?
Предложенный контрибьютором Шоном трюк для экономии байтов позволял любому минтить токены без предоставления подписи. Исключение из аутентификации означало, что собственные флаги входа становились единственной границей безопасности, которую было тривиально обойти.
Как баг был исправлен?
Тремя байтами. Исправление восстановило проверку подписи на затронутом входе до того, как кто-либо создал инструментарий на основе дефектного черновика.
Развёрнут ли KCC20 в мейннете?
Токены уже развёрнуты по черновой спецификации, но сам KCC20 остаётся пулл-реквестом без версионного релиза. Поддержка ковенант-токенов кошельками фрагментирована: каждый проект выпускает собственную реализацию.
Значит ли это, что ковенанты Kaspa небезопасны?
Нет. Баг находился в сторонней спецификации токенов, а не в консенсусном слое Toccata или компиляторе Silverscript. Он был обнаружен и исправлен в процессе открытого ревью — именно так черновые спецификации и должны работать.
Держите KAS там, где кражу можно отменить
Ковенант-сейф в мейннете Kaspa: ваши ключи, ваши правила, наш инструмент. Ончейн — бесплатно, навсегда.
Создать сейф
