L'hash del codice di inizializzazione è fondamentalmente l'hash keccak256 del bytecode del contratto. Utilizzo del codice di inizializzazione
L'hash del codice di inizializzazione è necessario "Poiché il calcolo dell'indirizzo dipende dall'hashing del codice di inizializzazione. Il codice di inizializzazione è il codice che, quando eseguito, produce il bytecode di runtime che verrà inserito nello stato, e che tipicamente viene utilizzato dai linguaggi di alto livello per implementare un 'costruttore'. "EIP-1014: Skinny CREATE2," Ethereum Improvement Proposals, no. 1014, aprile 2018. [Online serial]. Disponibile su: https://eips.ethereum.org/EIPS/eip-1014.
Utilizzo del codice di inizializzazione L'utilizzo principale del codice di inizializzazione è per il mining di indirizzi. Puoi consultare https://github.com/0age/create2crunch per un esempio di come possiamo sfruttare CREATE2 e il codice di inizializzazione di un contratto per 'minare' indirizzi più efficienti per il deployment del contratto. Ecco un semplice script bash che utilizza forge per generare l'hash del codice di inizializzazione per te:
https://github.com/sambacha/foundry-scripts/tree/master/scripts/deploy
Script #!/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."# Step 4: Scrivere l'hash del codice di inizializzazione su un file OUTPUT_FILE="${CONTRACT_NAME}_INIT_CODE_HASH.txt" echo "$INIT_CODE_HASH" > "$OUTPUT_FILE" || exit_on_error "Impossibile scrivere l'hash del codice di inizializzazione sul file."
echo "L'hash del codice di inizializzazione è stato scritto in $OUTPUT_FILE" if $VERBOSE; then echo "Codice di inizializzazione: $INIT_CODE" echo "Hash del codice di inizializzazione: $INIT_CODE_HASH" fi
cd - > /dev/null || exit
Visualizza fonte CC BY-SA 4.0