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
salida_en_error() { eco "Error: $1" salida 1 }
uso() { echo "Uso: $0 <ruta_contrato> <nombre_contrato> [-v]" echo "<ruta_contrato>: Ruta al archivo de contrato de Solidity" echo " <nombre_contrato>: Nombre del contrato de Solidity" echo "-v: Habilitar salida detallada (opcional)" salida 1 }
si! comando -v forjar &> /dev/null; entonces exit_on_error "Foundry no está instalado. Instálelo primero." fi
si [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; entonces uso fi
RUTA_CONTRATO=$1 CONTRATO_NOMBRE=$2 VERBOSO=falso
si [ "$#" -eq 3 ] && [ "$3" == "-v" ]; entonces VERBOSO = verdadero fi
si [ ! -f "$CONTRACT_PATH" ]; entonces exit_on_error "La ruta del contrato '$CONTRACT_PATH' no existe o no es un archivo." fi
CONTRACT_DIR=$(nombredirección "$CONTRACT_PATH")
CONTRACT_FILE=$(nombre base "$CONTRACT_PATH")
CD "$CONTRACT_DIR" || exit_on_error "Error al cambiar el directorio a '$CONTRACT_DIR'."
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
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."
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."
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."
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
CD - > /dev/null || salida
Ver fuente CC BY-SA 4.0