Le hachage du code d'initialisation est essentiellement le hachage keccak256 du bytecode des contrats. Utilisation du code d'initialisation
Le hachage du code d'initialisation est nécessaire "Puisque le calcul de l'adresse dépend du hachage le code d'initialisation. Le code d'initialisation est le code qui, une fois exécuté, produit le bytecode d'exécution qui sera placé dans l'état et qui est généralement utilisé par les langages de haut niveau pour implémenter un « constructeur ». «EIP-1014 : Skinny CREATE2», Propositions d'amélioration d'Ethereum, no. 1014, avril 2018. [Série en ligne]. Disponible : https://eips.ethereum.org/EIPS/eip-1014.
Utilisation du code d'initialisation L'utilisation principale du code d'initialisation concerne l'exploration d'adresses. Vous pouvez consulter https://github.com/0age/create2crunch pour un exemple de la façon dont nous pouvons exploiter CREATE2 et le code d'initialisation d'un contrat pour « exploiter » des adresses plus efficaces pour le déploiement du contrat. Voici un simple script bash qui utilise forge pour générer le hachage d'initialisation du code pour vous :
https://github.com/sambacha/foundry-scripts/tree/master/scripts/deploy
Scénario #!/usr/bin/env bash
exit_on_error() { echo "Erreur : $1" sortie 1 }
utilisation() { echo "Utilisation : $0 <chemin_contrat> <nom_contrat> [-v]" echo " <contract_path> : Chemin d'accès au fichier du contrat Solidity" echo " <contract_name> : Nom du contrat Solidity" echo " -v : Activer la sortie détaillée (facultatif)" sortie 1 }
si ! commande -v forge &> /dev/null; alors exit_on_error "Foundry n'est pas installé. Veuillez d'abord l'installer." fi
si [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; alors utilisation fi
CONTRACT_PATH=1 $ CONTRACT_NAME=2$ VERBEUX = faux
if [ "$#" -eq 3 ] && [ "$3" == "-v" ]; alors VERBOSE = vrai fi
si [ ! -f "$CONTRACT_PATH" ]; alors exit_on_error "Le chemin du contrat '$CONTRACT_PATH' n'existe pas ou n'est pas un fichier." fi
CONTRACT_DIR=$(répertoire "$CONTRACT_PATH")
CONTRACT_FILE=$(nom de base "$CONTRACT_PATH")
cd "$CONTRACT_DIR" || exit_on_error "Échec du changement de répertoire vers '$CONTRACT_DIR'."
echo "Compilation du contrat..." si $VERBOSE ; alors forger la construction --contracts . || exit_on_error "Échec de la compilation du contrat." sinon forger la construction --contracts . > /dev/null 2>&1 || exit_on_error "Échec de la compilation du contrat." fi
echo "Génération du code d'initialisation..." INIT_CODE=$(forge inspecte le bytecode "$CONTRACT_NAME") || exit_on_error "Échec de la génération du code d'initialisation."
echo "Calcul du hachage du code d'initialisation..." INIT_CODE_HASH=$(echo -n "$INIT_CODE" | keccak-256sum | cut -d' ' -f1) || exit_on_error "Échec du calcul du hachage du code d'initialisation."
OUTPUT_FILE="${CONTRACT_NAME}_INIT_CODE_HASH.txt" écho "$INIT_CODE_HASH" > "$OUTPUT_FILE" || exit_on_error "Échec de l'écriture du hachage du code d'initialisation dans le fichier."
echo "Le hachage du code d'initialisation a été écrit dans $OUTPUT_FILE" si $VERBOSE ; alors echo "Code d'initialisation : $INIT_CODE" echo "Hash du code d'initialisation : $INIT_CODE_HASH" fi
cd -> /dev/null || sortie
Voir la source CC BY-SA 4.0