سوالات و جوابات

INIT_CODE_HASH کیا ہے اور DeFi اسمارٹ کنٹریکٹس میں اس کا حساب کیسے لگایا جاتا ہے / استعمال کیسے ہوتا ہے

متن کا سائز
Init code hash بنیادی طور پر کنٹریکٹ کے bytecode کا keccak256 hash ہے۔ Init Code کا استعمال Init code hash کی ضرورت اس لیے ہوتی ہے "چونکہ ایڈریس کا حساب init code کو hash کرنے پر منحصر ہے۔ Init code وہ کوڈ ہے جو، جب execute کیا جاتا ہے، تو runtime bytecode پیدا کرتا ہے جو state میں رکھا جائے گا، اور جو عام طور پر high level زبانوں کے ذریعے 'constructor' کو implement کرنے کے لیے استعمال ہوتا ہے۔" "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 کا بنیادی استعمال ایڈریسز کی mining کے لیے ہے۔ آپ https://github.com/0age/create2crunch دیکھ سکتے ہیں کہ ہم کس طرح CREATE2 اور کنٹریکٹ کے init code کو استعمال کرتے ہوئے کنٹریکٹ deployment کے لیے زیادہ موثر ایڈریسز 'mine' کر سکتے ہیں۔ یہاں ایک سادہ bash script ہے جو forge استعمال کرتے ہوئے آپ کے لیے code init hash generate کرتی ہے: https://github.com/sambacha/foundry-scripts/tree/master/scripts/deploy Script #!/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 code hash کو فائل میں لکھیں OUTPUT_FILE="${CONTRACT_NAME}_INIT_CODE_HASH.txt" echo "$INIT_CODE_HASH" > "$OUTPUT_FILE" || exit_on_error "init code hash کو فائل میں لکھنے میں ناکامی۔" # عارضی فائلوں کی صفائی (اگر کوئی ہوں) # (اگر صاف کرنے کے لیے کوئی عارضی فائلیں ہوں تو یہاں کمانڈز شامل کریں) # مرحلہ 5: نتیجہ آؤٹ پٹ کریں echo "Init code hash $OUTPUT_FILE میں لکھ دیا گیا ہے" if $VERBOSE; then echo "Init code: $INIT_CODE" echo "Init code hash: $INIT_CODE_HASH" fi # اصل ڈائریکٹری پر واپس جائیں cd - > /dev/null || exit
مزید دریافت کریںڈیٹا کیٹلاگتلاش