Questions et réponses

Qu'est-ce que INIT_CODE_HASH et comment est-il calculé/utilisé dans les contrats intelligents DeFi

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
Continuer l'explorationCatalogue de donnéesRechercher