Как перенести чтение чужого runtime-байткода в нативную EraVM
Библиотеки иногда хранят данные в байткоде контракта и извлекают их через EXTCODECOPY. Нативные компиляторы ZKsync не поддерживают эту инструкцию как общий способ скопировать чужой код в память.
Найдите зависимость от байтов до замены библиотеки
В примере предпринимается попытка прочитать 32 байта с нулевого смещения у target. Найдите в зависимостях пути извлечения данных по указателю, чтения метаданных кода и восстановления программы. Скомпилируйте нужный путь целевым нативным компилятором.
assembly { extcodecopy(target, dest, 0, 32) }
Если приложению нужны данные, предоставьте их явным геттером из хранилища или вычислением. Для внешнего исследования кода используйте соответствующие источники ноды и артефакты. Срез хеша программы не восстанавливает произвольные байты кода.
Проверьте смысл замены
После смены источника проверьте права, формат данных, исторические чтения и стоимость газа. Эта проверка переносимости относится к нативной компиляции EraVM. Для EVM-байткода в поддерживаемом интерпретаторе действует другое окружение инструкций. docs.zksync.io ZKsync documentation