Как пересчитать нативный CREATE2-адрес ZKsync после изменения конструктора

Планировщик с формулой Ethereum CREATE2 может стабильно ошибаться для нативного кода EraVM. Нативная формула отдельно фиксирует хеш байткода и входные данные конструктора.

Соберите нативный прообраз

Префикс — Keccak-256 от ASCII-строки zksyncCreate2. Дополните адрес развёртывающей стороны нулями слева до 32 байт, используйте соль в 32 байта, нативный хеш байткода и Keccak-256 точных байтов конструктора.

digest = keccak256(prefix || sender32 || salt32 || bytecodeHash || keccak256(constructorInput))
address = last20(digest)

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

Уточните режим исполнения

Нативная формула относится к развёртыванию EraVM-кода. В EVM-интерпретаторе ZKsync для EVM-байткода возможна схема адресов Ethereum. До сравнения результата с трассировкой определите реальный путь создания. docs.zksync.io ZKsync documentation