የጽሑፍ መጠን
የ Init code hash በመሠረቱ የኮንትራቶች ባይትኮድ keccak256 ሃሽ ነው።
የ Init Code አጠቃቀም
Init code hash ያስፈልጋል "የአድራሻ ስሌት የ init code ሃሽን ስለሚወስን። Init code የሚፈጽምበት ጊዜ ወደ state የሚገባውን runtime bytecode የሚያመነጭ ኮድ ነው፣ እናም በተለምዶ በከፍተኛ ደረጃ ቋንቋዎች 'constructor' ለመተግበር ያገለግላል።"
"EIP-1014: Skinny CREATE2," Ethereum Improvement Proposals, no. 1014, April 2018. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-1014.
የ Init Code አጠቃቀም
የ init code ዋና አጠቃቀም አድራሻዎችን ለማግኘት ነው። CREATE2 እና የኮንትራት init code እንዴት ተጠቅመን ለኮንትራት ማሰማራት የበለጠ ቀልጣፋ አድራሻዎችን 'ማግኘት' እንደምንችል ምሳሌ ለማየት https://github.com/0age/create2crunch ይመልከቱ።
የኮድ init hash ለእርስዎ ለማመንጨት forge የሚጠቀም ቀላል የ bash ስክሪፕት እነሆ፡
https://github.com/sambacha/foundry-scripts/tree/master/scripts/deploy
ስክሪፕት
#!/usr/bin/env bash
# Function to exit on error with a message
exit_on_error() {
echo "Error: $1"
exit 1
}
# Function to display usage information
usage() {
echo "Usage: $0 [-v]"
echo " : Path to the Solidity contract file"
echo " : Name of the Solidity contract"
echo " -v : Enable verbose output (optional)"
exit 1
}
# Check if foundry is installed
if ! command -v forge &> /dev/null; then
exit_on_error "Foundry is not installed. Please install it first."
fi
# Check if correct number of arguments is provided
if [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; then
usage
fi
# Variables from arguments
CONTRACT_PATH=$1
CONTRACT_NAME=$2
VERBOSE=false
# Check if verbose option is enabled
if [ "$#" -eq 3 ] && [ "$3" == "-v" ]; then
VERBOSE=true
fi
# Validate contract path
if [ ! -f "$CONTRACT_PATH" ]; then
exit_on_error "Contract path '$CONTRACT_PATH' does not exist or is not a file."
fi
# Get the directory of the contract path
CONTRACT_DIR=$(dirname "$CONTRACT_PATH")
# shellcheck disable=SC2034
CONTRACT_FILE=$(basename "$CONTRACT_PATH")
# Change to the contract directory
cd "$CONTRACT_DIR" || exit_on_error "Failed to change directory to '$CONTRACT_DIR'."
# Step 1: Compile the contract
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
# Step 2: Generate the init code
echo "Generating init code..."
INIT_CODE=$(forge inspect "$CONTRACT_NAME" bytecode) || exit_on_error "Failed to generate init code."
# Step 3: Calculate the init code hash
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."# ደረጃ 4: የ init ኮድ ሃሽን ወደ ፋይል ይጻፉ
OUTPUT_FILE="${CONTRACT_NAME}_INIT_CODE_HASH.txt"
echo "$INIT_CODE_HASH" > "$OUTPUT_FILE" || exit_on_error "የ init ኮድ ሃሽን ወደ ፋይል መጻፍ አልተሳካም።"
# ጊዜያዊ ፋይሎችን ያጽዱ (ካሉ)
# (ማጽዳት የሚያስፈልጋቸው ጊዜያዊ ፋይሎች ካሉ ትዕዛዞችን እዚህ ያክሉ)
# ደረጃ 5: ውጤቱን ያውጡ
echo "የ init ኮድ ሃሽ ወደ $OUTPUT_FILE ተጽፏል"
if $VERBOSE; then
echo "Init ኮድ: $INIT_CODE"
echo "የ init ኮድ ሃሽ: $INIT_CODE_HASH"
fi
# ወደ መጀመሪያው ማውጫ ይመለሱ
cd - > /dev/null || exit