هش کد Init اساساً هش keccak256 از بایتکد قرارداد است. کاربرد کد Init
هش کد Init مورد نیاز است «زیرا محاسبه آدرس به هش کردن کد init بستگی دارد. کد init کدی است که هنگام اجرا، بایتکد زمان اجرا را تولید میکند که در state قرار خواهد گرفت و معمولاً توسط زبانهای سطح بالا برای پیادهسازی 'constructor' استفاده میشود.» "EIP-1014: Skinny CREATE2," Ethereum Improvement Proposals, no. 1014, April 2018. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-1014.
کاربرد کد Init کاربرد اصلی کد init برای ماین کردن آدرسها است. میتوانید https://github.com/0age/create2crunch را برای نمونهای از نحوه استفاده از CREATE2 و کد init یک قرارداد برای 'ماین' کردن آدرسهای کارآمدتر برای استقرار قرارداد بررسی کنید. در اینجا یک اسکریپت bash ساده آورده شده است که از forge برای تولید هش کد init برای شما استفاده میکند:
https://github.com/sambacha/foundry-scripts/tree/master/scripts/deploy
اسکریپت #!/usr/bin/env bash
exit_on_error() { echo "Error: $1" exit 1 }
usage() { echo "Usage: $0 <contract_path> <contract_name> [-v]" echo " <contract_path> : Path to the Solidity contract file" echo " <contract_name> : Name of the Solidity contract" echo " -v : Enable verbose output (optional)" exit 1 }
if ! command -v forge &> /dev/null; then exit_on_error "Foundry is not installed. Please install it first." fi
if [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; then usage fi
CONTRACT_PATH=$1 CONTRACT_NAME=$2 VERBOSE=false
if [ "$#" -eq 3 ] && [ "$3" == "-v" ]; then VERBOSE=true fi
if [ ! -f "$CONTRACT_PATH" ]; then exit_on_error "Contract path '$CONTRACT_PATH' does not exist or is not a file." fi
CONTRACT_DIR=$(dirname "$CONTRACT_PATH")
CONTRACT_FILE=$(basename "$CONTRACT_PATH")
cd "$CONTRACT_DIR" || exit_on_error "Failed to change directory to '$CONTRACT_DIR'."
echo "Compiling the contract..." if $VERBOSE; then forge build --contracts . || exit_on_error "Failed to compile the contract." else forge build --contracts . > /dev/null 2>&1 || exit_on_error "Failed to compile the contract." fi
echo "Generating init code..." INIT_CODE=$(forge inspect "$CONTRACT_NAME" bytecode) || exit_on_error "Failed to generate init code."
echo "Calculating init code hash..." INIT_CODE_HASH=$(echo -n "$INIT_CODE" | keccak-256sum | cut -d' ' -f1) || exit_on_error "Failed to calculate init code hash."# گام ۴: نوشتن هش کد init در یک فایل OUTPUT_FILE="${CONTRACT_NAME}_INIT_CODE_HASH.txt" echo "$INIT_CODE_HASH" > "$OUTPUT_FILE" || exit_on_error "نوشتن هش کد init در فایل ناموفق بود."
echo "هش کد init در $OUTPUT_FILE نوشته شد" if $VERBOSE; then echo "کد init: $INIT_CODE" echo "هش کد init: $INIT_CODE_HASH" fi
cd - > /dev/null || exit
مشاهده منبع CC BY-SA 4.0