Textgröße
Der Init-Code-Hash ist im Grunde der keccak256-Hash des Vertragsbytecodes.
Verwendung von Init-Code
Init-Code-Hash ist erforderlich, da die Adressberechnung vom Hashing abhängt
der Init-Code. Init-Code ist der Code, der bei seiner Ausführung Folgendes erzeugt
Laufzeitbytecode, der in den Zustand versetzt wird und welcher
Wird normalerweise von Hochsprachen verwendet, um a zu implementieren
„Konstrukteur“.
„EIP-1014: Skinny CREATE2“, Ethereum Improvement Proposals, Nr. 1014, April 2018. [Online-Serie]. Verfügbar: https://eips.ethereum.org/EIPS/eip-1014.
Verwendung von Init-Code
Init-Code wird hauptsächlich zum Mining von Adressen verwendet. Unter https://github.com/0age/create2crunch finden Sie ein Beispiel dafür, wie wir CREATE2 und den Init-Code eines Vertrags nutzen können, um effizientere Adressen für die Vertragsbereitstellung zu „minen“.
Hier ist ein einfaches Bash-Skript, das Forge verwendet, um den Code-Init-Hash für Sie zu generieren:
https://github.com/sambacha/foundry-scripts/tree/master/scripts/deploy
Skript
#!/usr/bin/env bash
# Funktion zum Beenden bei Fehler mit einer Meldung
exit_on_error() {
echo „Fehler: $1“
Ausgang 1
}
# Funktion zur Anzeige von Nutzungsinformationen
Nutzung() {
echo „Verwendung: $0 [-v]“
echo „ : Pfad zur Solidity-Vertragsdatei“
echo „ : Name des Solidity-Vertrags“
echo „ -v : Ausführliche Ausgabe aktivieren (optional)“
Ausgang 1
}
# Überprüfen Sie, ob Foundry installiert ist
wenn! Befehl -v forge &> /dev/null; dann
exit_on_error „Foundry ist nicht installiert. Bitte installieren Sie es zuerst.“
fi
# Überprüfen Sie, ob die richtige Anzahl an Argumenten angegeben ist
if [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; dann
Nutzung
fi
# Variablen aus Argumenten
CONTRACT_PATH=$1
CONTRACT_NAME=$2
VERBOSE=falsch
# Überprüfen Sie, ob die ausführliche Option aktiviert ist
if [ "$#" -eq 3 ] && [ "$3" == "-v" ]; dann
VERBOSE=wahr
fi
# Vertragspfad validieren
wenn [ ! -f "$CONTRACT_PATH" ]; dann
exit_on_error „Vertragspfad ‚$CONTRACT_PATH‘ existiert nicht oder ist keine Datei.“
fi
# Rufen Sie das Verzeichnis des Vertragspfads ab
CONTRACT_DIR=$(Verzeichnisname „$CONTRACT_PATH“)
# Shellcheck deaktivieren=SC2034
CONTRACT_FILE=$(Basisname „$CONTRACT_PATH“)
# Wechseln Sie in das Vertragsverzeichnis
cd „$CONTRACT_DIR“ || exit_on_error „Verzeichnis konnte nicht in ‚$CONTRACT_DIR‘ geändert werden.“
# Schritt 1: Erstellen Sie den Vertrag
echo „Der Vertrag wird erstellt...“
wenn $VERBOSE; dann
forge build --contracts . || exit_on_error „Der Vertrag konnte nicht kompiliert werden.“
sonst
forge build --contracts . > /dev/null 2>&1 || exit_on_error „Der Vertrag konnte nicht kompiliert werden.“
fi
# Schritt 2: Generieren Sie den Init-Code
echo „Init-Code wird generiert …“
INIT_CODE=$(forge inspect „$CONTRACT_NAME“ Bytecode) || exit_on_error „Fehler beim Generieren des Init-Codes.“
# Schritt 3: Berechnen Sie den Init-Code-Hash
echo „Init-Code-Hash wird berechnet …“
INIT_CODE_HASH=$(echo -n "$INIT_CODE" | keccak-256sum | cut -d' ' -f1) || exit_on_error „Init-Code-Hash konnte nicht berechnet werden.“
# Schritt 4: Schreiben Sie den Init-Code-Hash in eine Datei
OUTPUT_FILE="${CONTRACT_NAME}_INIT_CODE_HASH.txt"
echo „$INIT_CODE_HASH“ > „$OUTPUT_FILE“ || exit_on_error „Init-Code-Hash konnte nicht in die Datei geschrieben werden.“
# Temporäre Dateien bereinigen (falls vorhanden)
# (Fügen Sie hier Befehle hinzu, wenn temporäre Dateien bereinigt werden müssen)
# Schritt 5: Ergebnis ausgeben
echo „Init-Code-Hash wurde in $OUTPUT_FILE geschrieben“
wenn $VERBOSE; dann
echo „Init-Code: $INIT_CODE“
echo „Init-Code-Hash: $INIT_CODE_HASH“
fi
# Zum ursprünglichen Verzeichnis zurückkehren
cd - > /dev/null || Ausfahrt