Saltar al contenido principal
iCute FinanceACTIVOS DIGITALES · OBSERVACIÓN DEL MERCADO
Español
Directorio de investigación
iCute Finance

Navegación principal

Navegación principal

ACTIVOS DIGITALES · OBSERVACIÓN DEL MERCADO

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

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