Как найти ранний выход конструктора, теряющий immutable в EraVM
Нативный компилятор EraVM завершает конструктор Solidity возвратом служебных данных immutable механизму развёртывания. Явный выход из assembly может обойти этот этап.
Проверьте геттер после развёртывания
Фрагмент показывает присваивание immutable и явный STOP. Разверните аналогичный тест нативным компилятором и прочтите геттер. Сравните со вторым вариантом, где конструктор завершается обычным путём.
constructor() {
threshold = 45; // immutable
assembly { stop() }
}
При нативном создании значения immutable возвращаются для установки системными контрактами. Assembly STOP или RETURN может оставить их неинициализированными. Успешная квитанция создания значение не подтверждает.
Проверьте assembly унаследованных конструкторов
Изучите базовые конструкторы и участки assembly, завершающие всё исполнение. Сохраните сгенерированный компилятором путь завершения и тестируйте развёрнутый артефакт в целевом режиме VM. Обычный выход из функции за пределами конструктора — другой случай. docs.zksync.io ZKsync documentation