Tamaño del texto
El hash del código de inicio es básicamente el hash keccak256 del código de bytes de los contratos.
Uso del código de inicio
Se necesita hash del código de inicio "Dado que el cálculo de la dirección depende del hash
el código de inicio. El código de inicio es el código que, cuando se ejecuta, produce el
código de bytes en tiempo de ejecución que se colocará en el estado y que
Normalmente es utilizado por lenguajes de alto nivel para implementar un
'constructor'.
"EIP-1014: Skinny CREATE2", Propuestas de mejora de Ethereum, no. 1014, abril de 2018. [Serie en línea]. Disponible: https://eips.ethereum.org/EIPS/eip-1014.
Uso del código de inicio
El uso principal del código de inicio es para extraer direcciones. Puede consultar https://github.com/0age/create2crunch para ver un ejemplo de cómo podemos aprovechar CREATE2 y el código de inicio de un contrato para "extraer" direcciones más eficientes para la implementación del contrato.
Aquí hay un script bash simple que usa forge para generar el hash de inicio del código:
https://github.com/sambacha/foundry-scripts/tree/master/scripts/deploy
Guión
#!/usr/bin/env bash
# Función para salir en caso de error con un mensaje
salida_en_error() {
eco "Error: $1"
salida 1
}
# Función para mostrar información de uso.
uso() {
echo "Uso: $0 [-v]"
echo ": Ruta al archivo de contrato de Solidity"
echo " : Nombre del contrato de Solidity"
echo "-v: Habilitar salida detallada (opcional)"
salida 1
}
# Comprobar si la fundición está instalada
si! comando -v forjar &> /dev/null; entonces
exit_on_error "Foundry no está instalado. Instálelo primero."
fi
# Comprobar si se proporciona el número correcto de argumentos
si [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; entonces
uso
fi
# Variables de argumentos
RUTA_CONTRATO=$1
CONTRATO_NOMBRE=$2
VERBOSO=falso
# Comprobar si la opción detallada está habilitada
si [ "$#" -eq 3 ] && [ "$3" == "-v" ]; entonces
VERBOSO = verdadero
fi
# Validar ruta del contrato
si [ ! -f "$CONTRACT_PATH" ]; entonces
exit_on_error "La ruta del contrato '$CONTRACT_PATH' no existe o no es un archivo."
fi
# Obtener el directorio de la ruta del contrato.
CONTRACT_DIR=$(nombredirección "$CONTRACT_PATH")
# shellcheck desactivar=SC2034
CONTRACT_FILE=$(nombre base "$CONTRACT_PATH")
# Cambiar al directorio de contratos
CD "$CONTRACT_DIR" || exit_on_error "Error al cambiar el directorio a '$CONTRACT_DIR'."
# Paso 1: compilar el contrato
echo "Compilando el contrato..."
si $VERBOSE; entonces
forjar construcción --contratos. || exit_on_error "Error al compilar el contrato."
otra cosa
forjar construcción --contratos. > /dev/null 2>&1 || exit_on_error "Error al compilar el contrato."
fi
# Paso 2: generar el código de inicio
echo "Generando código de inicio..."
INIT_CODE=$(forge inspecciona el código de bytes "$CONTRACT_NAME") || exit_on_error "Error al generar el código de inicio."
# Paso 3: Calcular el hash del código de inicio
echo "Calculando el hash del código de inicio..."
INIT_CODE_HASH=$(echo -n "$INIT_CODE" | keccak-256sum | cut -d'' -f1) || exit_on_error "Error al calcular el hash del código de inicio."
# Paso 4: escriba el hash del código de inicio en un archivo
OUTPUT_FILE="${CONTRACT_NAME}_INIT_CODE_HASH.txt"
echo "$INIT_CODE_HASH" > "$OUTPUT_FILE" || exit_on_error "Error al escribir el hash del código de inicio en el archivo."
# Limpiar archivos temporales (si los hay)
# (Agregue comandos aquí si hay archivos temporales que limpiar)
# Paso 5: generar el resultado
echo "El hash del código de inicio se ha escrito en $OUTPUT_FILE"
si $VERBOSE; entonces
echo "Código de inicio: $INIT_CODE"
echo "Hash del código inicial: $INIT_CODE_HASH"
fi
# Regresar al directorio original
CD - > /dev/null || salida