В этом учебном экспериментальном приложении базовые токены ERC20 находятся в EVM-аккаунте хранилища. В Midnight пользователи хранят защищённые токены хранилища, представляющие их права на этот пул. То, что нативные активы остаются в Ethereum, показывает, где они записаны, но само по себе не отвечает на вопрос, кто может ими распоряжаться.

Это различие также объясняет сжигание. Начало вывода уничтожает погашаемое защищённое право, а не базовый токен ERC20. Успешный внешний платёж завершает погашение. Если платёж получает один из описанных статусов ошибки, приложение может восстановить право.

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

Контракт startWithdraw сжигает эту монету и ставит запрос в очередь. При последующей обработке очереди аккаунту хранилища назначается номер последовательности транзакции, известный как nonce. Затем на этапе отправки регистрируется запрос на перевод точной суммы ERC20 и направляется уведомление службе подписания MPC, то есть многосторонних вычислений.

Дальше следуют отдельные этапы с чётко разграниченными обязанностями:

Служба подписания не транслирует транзакцию в сеть. dApp или ретранслятор собирает её с проверенной подписью и отправляет в EVM-сеть.

Неудачный перевод и отсутствие ответа службы, это разные ситуации

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

Перед разрешением завершить расчёт хранилище проверяет аттестацию по настроенному в нём ключу ответа MPC.

В спецификации вывода описаны три способа восстановить право: транзакция была отменена, транзакция стала невыполнимой, поскольку другая транзакция использовала её nonce, или выполненный перевод ERC20 вернул значение false. После постановки аттестованного результата в очередь и её обработки выводящий завершает запрос и получает заново выпущенную защищённую сумму.

Успешный перевод, вернувший true, оставляет сжигание в силе и закрывает запрос. В случае ошибки восстанавливается право в хранилище Midnight, а не производится новый платёж нативного актива на адрес назначения.

Для описанного маршрута возврата требуется проверенная аттестация, прошедшая обработку очереди. Сам по себе запрос на подпись без ответа или отсутствие ответа о результате не удовлетворяют этому условию.

В коде хранилища также предусмотрен механизм экстренного восстановления. Разработчик может начать запрос на замену nonce для зависшей транзакции хранилища, используя перевод нулевой суммы с аккаунта хранилища на него же с тем же nonce.

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

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

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

Проверка в production должна охватывать весь путь вывода

Поддержка мейннета по-прежнему связана с ledger v9 в дорожной карте SIG. Обновление репозитория от 21 октября готовит пакет vault 0.5.0 на SIG Midnight 0.25.0. В этой версии кода опубликованный реестр адресов содержит адрес хранилища в stagenet, а поле mainnet оставлено пустым. Согласно файлу, это означает, что адрес ещё не развёрнут и не опубликован.

В отдельной полнофункциональной демонстрации SIG используются stagenet Midnight и Ethereum Sepolia, обе публичные тестовые сети, а также ответчик MPC «fakenet». Это демонстрирует работу приложения. Но это не подтверждает, что в этой демонстрации работает кворум независимых подписантов для production.

Описание порогового подписания SIG объясняет, как создаётся подпись. Для оценки реального развёртывания также необходимо знать, сколько подписантов должны действовать совместно, кто ими управляет, как эти условия могут меняться и какое восстановление возможно, если обычная служба недоступна.

Точность так же важна и при определении охвата аудита. Итоговый отчёт Hacken от 21 февраля 2025 года охватывает смарт-контракты Solidity для подписания транзакций в Ethereum. Он не подтверждает проверку более нового хранилища Compact или системы Nightmode целиком.

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