Вопросы и ответы

Что такое INIT_CODE_HASH и как он рассчитывается/используется в смарт-контрактах DeFi

Размер текста
Хэш кода инициализации — это, по сути, хеш keccak256 байт-кода контракта. Использование кода инициализации Требуется хэш кода инициализации «Поскольку вычисление адреса зависит от хеширования код инициализации. Код инициализации — это код, который при выполнении создает байт-код времени выполнения, который будет помещен в состояние и который обычно используется языками высокого уровня для реализации «конструктор». «EIP-1014: Skinny CREATE2», Предложения по улучшению Ethereum, №. 1014, апрель 2018. [Онлайн-сериал]. Доступно: https://eips.ethereum.org/EIPS/eip-1014. Использование кода инициализации Код инициализации в основном используется для майнинга адресов. Вы можете проверить https://github.com/0age/create2crunch, чтобы увидеть пример того, как мы можем использовать CREATE2 и код инициализации контракта для «добычи» более эффективных адресов для развертывания контракта. Вот простой bash-скрипт, который использует forge для генерации хеша инициализации кода: https://github.com/sambacha/foundry-scripts/tree/master/scripts/deploy Скрипт #!/usr/bin/env bash # Функция выхода при ошибке с сообщением выход_on_error() { эхо «Ошибка: $1» выход 1 } # Функция для отображения информации об использовании использование() { echo "Использование: $0 <путь_контракта> <имя_контракта> [-v]" echo ": Путь к файлу контракта Solidity" echo ": Имя контракта Solidity" echo "-v: включить подробный вывод (необязательно)" выход 1 } # Проверьте, установлен ли Foundry если! команда -v forge &> /dev/null; тогда exit_on_error "Foundry не установлен. Сначала установите его." фи # Проверьте, указано ли правильное количество аргументов если [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; тогда использование фи # Переменные из аргументов CONTRACT_PATH=$1 CONTRACT_NAME=2 доллара США ПОДРОБНЫЙ = ложь # Проверьте, включена ли опция подробного описания if [ "$#" -eq 3 ] && [ "$3" == "-v" ]; тогда ПОДРОБНО=истина фи # Проверка пути контракта если [ ! -f "$CONTRACT_PATH"]; тогда exit_on_error «Путь контракта «$CONTRACT_PATH» не существует или не является файлом». фи # Получить каталог пути контракта CONTRACT_DIR=$(имя каталога "$CONTRACT_PATH") # отключить проверку оболочки=SC2034 CONTRACT_FILE=$(базовое имя "$CONTRACT_PATH") # Переходим в каталог контракта компакт-диск "$CONTRACT_DIR" || exit_on_error «Не удалось изменить каталог на $CONTRACT_DIR». # Шаг 1: Составьте договор echo "Составление контракта..." если $VERBOSE; тогда Forge build --contracts. || exit_on_error "Не удалось скомпилировать контракт." еще Forge build --contracts. > /dev/null 2>&1 || exit_on_error "Не удалось скомпилировать контракт." фи # Шаг 2: Создайте код инициализации echo "Генерация кода инициализации..." INIT_CODE=$(подделать проверку байт-кода "$CONTRACT_NAME") || exit_on_error «Не удалось сгенерировать код инициализации». # Шаг 3: Вычислите хэш кода инициализации echo "Вычисление хэша кода инициализации..." INIT_CODE_HASH=$(echo -n "$INIT_CODE" | keccak-256sum | Cut -d' ' -f1) || exit_on_error «Не удалось вычислить хэш кода инициализации». # Шаг 4: Запишите хэш кода инициализации в файл OUTPUT_FILE="${CONTRACT_NAME}_INIT_CODE_HASH.txt" echo "$INIT_CODE_HASH" > "$OUTPUT_FILE" || exit_on_error «Не удалось записать хэш кода инициализации в файл». # Очистите временные файлы (если есть) # (Добавьте сюда команды, если есть временные файлы, которые нужно очистить) # Шаг 5: Выведите результат echo "Хеш кода инициализации записан в $OUTPUT_FILE" если $VERBOSE; тогда echo "Код инициализации: $INIT_CODE" echo "Хеш кода инициализации: $INIT_CODE_HASH" фи # Вернёмся в исходный каталог компакт-диск -> /dev/null || Выход
Продолжить изучениеКаталог данныхПоиск