Обновление Zcash блокирует монеты Sprout даже при наличии правильных ключей
Ключевые выводы
- •Активация обновления NU7 на блоке 3 543 405 прекратит траты из Sprout, поскольку ни один из сохраняющих валидность форматов транзакций — версии 5 и 6 — не поддерживает этот пул.
- •Держатели Sprout вынуждены полагаться на сторонние инструменты восстановления, такие как приложение Argos от Sovright, поскольку устаревший zcashd был последним поддерживаемым ПО, способным создавать транзакции Sprout.
- •Скорость восстановления зависит от резервной копии: файлы кошелька с данными тратимых нот очищаются за секунды, а «голые» ключи требуют сканирования всей цепочки объемом около 26 ГБ, занимающего часы.
- •Оставленные средства Sprout не сжигаются и остаются в эмитированном предложении Zcash, а ZIP 2003 указывает, что траты Sprout могут никогда не вернуться.
- •Подтверждение любого перевода из Sprout должно поступать от NU7-совместимого узлового ПО, такого как Zebra 7.0.0, поскольку устаревшие узлы могут оставаться онлайн и следовать цепочке до-NU7.

По данным ZecStats, на которые ссылается отчет CoinDesk, утром четверга в экранированном пуле Sprout в Zcash оставалось около 12 226 ZEC против примерно 22 263 неделей ранее. Основная часть оттока пришлась на воскресенье, когда из пула вышло около 9 094 ZEC. При цене 1 300 долларов за монету, использованной CoinDesk, остаток стоит около 16 миллионов долларов.
Крайний срок — блок 3 543 405: это высота активации Mainnet, установленная в ZIP 259, спецификации развертывания обновления сети NU7, и повторенная в уведомлении Zcash Foundation о релизе Zebra 7.0.0. CoinDesk сообщила, что по данным Blockchair цепочка находилась на блоке 3 542 391 в 05:24 UTC в четверг, что при текущем целевом интервале в 75 секунд означало активацию примерно в 02:30 UTC в пятницу. Реальный темп задают майнеры, поэтому оценка может сместиться в любую сторону. Таким образом, эта дата является границей консенсусной валидности, а не гарантированным сервисным дедлайном: решающее событие — майнинг блока, тогда как кошельки и кастодианы могут устанавливать собственные операционные сроки.
Две поломки, которые в кошельке выглядят одинаково
Правило за дедлайном шире, чем Sprout. ZIP 2003 запрещает все транзакции версии 4 начиная с NU7, а ZIP 259 уточняет, что это касается и прозрачных платежей, и платежей Sapling. Sprout оказывается под ударом, поскольку ни один из сохранившихся форматов его не поддерживает: версия 5, появившаяся с NU5, и версия 6, появившаяся с NU6.3.
Поэтому кошелек, отказывающийся отправлять транзакцию, может столкнуться с одной из двух проблем, и лишь одна из них переживет активацию:
Монеты, оставшиеся в Sprout. Что ломается: единственный формат транзакций, способный их потратить, перестает быть валидным. После блока: поддерживаемой замены не существует. Окно закрывается на блоке 3 543 405.
Прозрачные ZEC или ZEC в Sapling в устаревшем кошельке. Что ломается: ПО создает платежи версии 4, которые сеть отклоняет. После блока: баланс остается доступным для траты, и ПО, создающее версии 5 или 6, может воссоздать платеж — повторное подписание старого не сработает. Окно остается открытым при обновленном ПО.
Заранее подготовленные платежи требуют отдельной проверки. ZIP 259 предупреждает, что транзакции версий 5 и 6 также не автоматически валидны через активацию, поскольку их подписи привязаны к идентификатору консенсусной ветки. Платеж, сохраненный или подписанный офлайн до обновления, может не пройти, если попадет в блок после крайнего срока, независимо от формата.
Кастодиальные балансы находятся у удерживающей их платформы. Уведомление Zcash Foundation адресует правило о версии 4 напрямую кошелькам, биржам и другим сервисам, создающим транзакции от имени пользователей.
Материалы восстановления задают таймер
Для держателей Sprout более сложная задача — найти ПО, которое все еще способно создать перевод. ZIP 2003 отмечает, что вывод из эксплуатации zcashd незадолго до NU6.3 лишил пользователей единственного поддерживаемого ПО, offering функциональность кошелька Sprout. Правила консенсуса принимают траты Sprout до активации, но держателям остается полагаться на сторонние инструменты восстановления.
Сначала нужно идентифицировать монеты. В документации Zcash по адресам экранированные адреса Sprout имеют префикс zc, а адреса Sapling — zs. Префикс показывает, к какому пулу принадлежит адрес, но не наличие на нем баланса.
Резервная копия важнее адреса. В инструкциях Zcash по резервному копированию устаревшие экранированные ключи рассматриваются отдельно от сида, стоящего за адресами Sapling. Разработчик приложения для восстановления Argos добавляет две детали в своей документации: сид ZecWallet Lite не может восстановить ключи Sprout, которые этот кошелек генерировал независимо, а wallet.dat от zcashd вообще не имеет мастер-сида, поскольку его ключи хранятся по одному — из файла можно восстановить только содержащиеся в нем ключи.
Содержимое резервной копии также определяет, сколько займет спасение. Согласно заметкам о релизе Argos 1.2.0, файл кошелька, уже содержащий данные тратимых нот Sprout, можно очистить без сканирования за секунды. Ключи без данных нот, такие как отдельные ключи траты или ключи, импортированные в zcashd без рескана, требуют сканирования, которое попытается расшифровать каждую экранированную транзакцию в истории цепочки, поскольку индекса адресов Sprout не существует. На сайте разработчика указано, что сканирование Sprout по «голому» ключу составляет около 26 ГБ трафика на Mainnet и может идти часами. При дедлайне, измеряемом часами, эта разница может решить, возможен ли перевод вообще.
Назначение также фиксировано. Средства из Sprout могут перейти только в пул Sapling, поэтому заметки о релизе требуют адрес zs1 или Unified Address с получателем Sapling. Перемещение средств дальше в Orchard — отдельная транзакция, которую держатель совершает после.
Проверка инструмента спасения в условиях дедлайна
Argos — стороннее настольное приложение от Sovright, созданное после прекращения поддержки ZecWallet Lite. На сайте разработчика сказано, что приложение прошло независимый аудит Least Authority, обрабатывает сиды и ключи локально и подключается к интернету только для чтения публичных данных блоков и отправки финального вывода средств. Для крупных балансов разработчик рекомендует совершенно новый компьютер, поскольку сброс к заводским настройкам не удаляет вредоносное ПО уровня прошивки с давно используемой машины.
Перед нажатием sweep:
- Загрузка. Сборки для macOS и Windows подписаны кодом. Каждый релиз на GitHub содержит файл SHA256SUMS и подтверждение сборки, проверяемое командой
gh attestation verify <file> --repo sovright/argos. - Разделение. На этапе проверки вывода средств предусмотрено необязательное пожертвование Sovright с размером по умолчанию 10%. Обе суммы отображаются до подтверждения, поэтому задайте значение осознанно.
- Канал. Разработчик заявляет, что его поддержка никогда не запросит сид, файл кошелька, парольную фразу или ключ. Запрос любого из них на любой платформе — мошенничество.
После подтверждения вывода средств разработчик советует вывести из обращения старые материалы восстановления, так как вредоносное ПО на машине восстановления могло их перехватить. Оригинальный файл кошелька следует сохранять, пока не опустошен каждый охватываемый им пул.
Подтвердить перевод может только обновленный узел
Подписанный и отправленный в сеть перевод из Sprout засчитывается только после включения в блок до высоты активации. Важно и то, откуда читается подтверждение. ZIP 259 отменяет обычное требование истечения срока работы старого узлового ПО перед обновлением и предупреждает, что неподдерживаемые узлы могут оставаться онлайн и следовать ветке до-NU7. В уведомлении Zcash Foundation сказано, что необновленные узлы последуют за другой цепочкой. Держатель, проверяющий устаревший узел, может увидеть перевод, который обновленная сеть не признает, поэтому подтверждение должно приходить от NU7-совместимого ПО, такого как Zebra 7.0.0 — первый стабильный релиз Zebra с поддержкой NU7 на Mainnet.
Выход также публичен. В разделе о приватности ZIP 2003 отмечается, что уход средств из Sprout меняет видимый баланс пула и что короткий период выхода облегчает привязку времени и характерных сумм к конкретным держателям. При движении всего около 40 ZEC в среду у позднего вывода мало окружающего трафика, в котором можно раствориться.
Оставшиеся монеты остаются на балансе
ZIP 2003, автором которого является Дэйра-Эмма Хопвуд, не изымает и не сжигает средства Sprout. Баланс пула на момент активации остается в эмитированном предложении Zcash, в том числе для расчетов Механизма устойчивости сети в ZIP 237. Поэтому учет предложения Zcash продолжает считать монеты, которые сейчас не могут двигаться.
Предложение оставляет теоретический путь назад: либо повторное включение транзакций версии 4, либо добавление иного механизма извлечения, если сообщество сочтет это целесообразным. В нем также указано, что траты Sprout могут никогда не вернуться.
Обоснование принятия этой стоимости основано на безопасности узлов. ZIP 2003 отмечает, что Sprout с момента обновления Sapling использует общую с Sapling доказательственную систему Groth16 и кривые BLS12-381. Его схема JoinSplit и обработка nullifier-ов и обязательств нот по-прежнему нагружают код, принимающий новые транзакции, в том числе как поверхность для атак типа «отказ в обслуживании». Поскольку Sprout почти не используется, реализациям узлов нет смысла оптимизировать этот путь. Как определялся охват обновления, описано в отчете Coindoo о голосовании держателей монет по NU7.
Издержки ложатся на узкую группу: держателей, чьи ключи Sprout лежат в непроверенных или утерянных резервных копиях. Публичный баланс пула не позволяет их различить. Итоговую точку в истории поставит стоимость пула Sprout в данных ZecStats после майнинга блока 3 543 405 — она покажет, сколько ZEC осталось за обновлением. Единственным признаком возможного возврата доступа станет последующий ZIP с предложением механизма извлечения.
Источник: Coindoo