پرش به محتوای اصلی
iCute Financeدارایی‌های دیجیتال · بررسی بازار
فارسی
فهرست پژوهش‌ها
iCute Finance

ناوبری اصلی

ناوبری اصلی

دارایی‌های دیجیتال · بررسی بازار

INIT_CODE_HASH چیست و چگونه در قراردادهای هوشمند دیفای محاسبه / استفاده می‌شود؟

هش کد 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