Taille du texte
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
# Fonction pour quitter en cas d'erreur avec un message
exit_on_error() {
echo "Erreur : $1"
sortie 1
}
# Fonction pour afficher les informations d'utilisation
utilisation() {
echo "Utilisation : $0 [-v]"
echo " : Chemin d'accès au fichier du contrat Solidity"
echo " : Nom du contrat Solidity"
echo " -v : Activer la sortie détaillée (facultatif)"
sortie 1
}
# Vérifiez si la fonderie est installée
si ! commande -v forge &> /dev/null; alors
exit_on_error "Foundry n'est pas installé. Veuillez d'abord l'installer."
fi
# Vérifiez si le nombre correct d'arguments est fourni
si [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; alors
utilisation
fi
# Variables des arguments
CONTRACT_PATH=1 $
CONTRACT_NAME=2$
VERBEUX = faux
# Vérifiez si l'option verbeuse est activée
if [ "$#" -eq 3 ] && [ "$3" == "-v" ]; alors
VERBOSE = vrai
fi
# Valider le chemin du contrat
si [ ! -f "$CONTRACT_PATH" ]; alors
exit_on_error "Le chemin du contrat '$CONTRACT_PATH' n'existe pas ou n'est pas un fichier."
fi
# Récupère le répertoire du chemin du contrat
CONTRACT_DIR=$(répertoire "$CONTRACT_PATH")
# shellcheck désactiver=SC2034
CONTRACT_FILE=$(nom de base "$CONTRACT_PATH")
# Passage au répertoire des contrats
cd "$CONTRACT_DIR" || exit_on_error "Échec du changement de répertoire vers '$CONTRACT_DIR'."
# Étape 1 : Compiler le contrat
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
# Étape 2 : Générer le code d'initialisation
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."
# Étape 3 : Calculer le hachage 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."
# Étape 4 : Écrivez le hachage du code d'initialisation dans un fichier
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."
# Nettoyer les fichiers temporaires (le cas échéant)
# (Ajoutez des commandes ici s'il y a des fichiers temporaires à nettoyer)
# Étape 5 : Afficher le résultat
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
# Revenir au répertoire d'origine
cd -> /dev/null || sortie