Preguntas y respuestas

¿Qué es INIT_CODE_HASH y cómo se calcula/utiliza en los contratos inteligentes DeFi?

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
Seguir explorandoCatálogo de datosBuscar