O hash do código de inicialização é basicamente o hash keccak256 do bytecode do contrato. Uso do código inicial
O hash do código de inicialização é necessário "Como o cálculo do endereço depende do hash o código de inicialização. Código de inicialização é o código que, quando executado, produz o bytecode de tempo de execução que será colocado no estado e que normalmente é usado por linguagens de alto nível para implementar um ‘construtor’. "EIP-1014: Skinny CREATE2," Propostas de Melhoria Ethereum, no. 1014, abril de 2018. [Série online]. Disponível: https://eips.ethereum.org/EIPS/eip-1014.
Uso do código inicial O uso principal do código init é para mineração de endereços. Você pode verificar https://github.com/0age/create2crunch para obter um exemplo de como podemos aproveitar o CREATE2 e o código inicial de um contrato para 'minerar' endereços mais eficientes para implantação de contrato. Aqui está um script bash simples que usa forge para gerar o hash de inicialização do código para você:
https://github.com/sambacha/foundry-scripts/tree/master/scripts/deploy
Roteiro #!/usr/bin/env bash
#Função para sair em caso de erro com uma mensagem exit_on_error() { eco "Erro: $1" saída 1 }
#Função para exibir informações de uso uso() { echo "Uso: $0 [-v]" echo " : Caminho para o arquivo do contrato do Solidity" echo ": Nome do contrato Solidity" echo "-v: Habilita saída detalhada (opcional)" saída 1 }
#Verifique se o Foundry está instalado se! comando -v forjar &> /dev/null; então exit_on_error "Foundry não está instalado. Instale-o primeiro." fi
# Verifica se o número correto de argumentos foi fornecido if [ "$#" -lt 2 ] || [ "$#" -gt3]; então uso fi
# Variáveis de argumentos CONTRACT_PATH=$1 CONTRACT_NAME=$2 VERBOSE=falso
# Verifica se a opção detalhada está habilitada if [ "$#" -eq 3 ] && [ "$3" == "-v" ]; então VERBOSE = verdadeiro fi
# Validar caminho do contrato se [ ! -f "$CONTRACT_PATH"]; então exit_on_error "O caminho do contrato '$CONTRACT_PATH' não existe ou não é um arquivo." fi
# Obtém o diretório do caminho do contrato CONTRACT_DIR=$(nome do diretório "$CONTRACT_PATH") # shellcheck desabilitar=SC2034 CONTRACT_FILE=$(nome base "$CONTRACT_PATH")
# Mude para o diretório de contratos cd "$CONTRACT_DIR" || exit_on_error "Falha ao alterar o diretório para '$CONTRACT_DIR'."
# Etapa 1: Compilar o contrato echo "Compilando o contrato..." se $VERBOSE; então forjar construir --contratos . || exit_on_error "Falha ao compilar o contrato." mais forjar construir --contratos . > /dev/null 2>&1 || exit_on_error "Falha ao compilar o contrato." fi
# Etapa 2: Gere o código de inicialização echo "Gerando código de inicialização..." INIT_CODE=$(forja inspecionar bytecode "$CONTRACT_NAME") || exit_on_error "Falha ao gerar código de inicialização."
# Etapa 3: Calcule o hash do código inicial echo "Calculando hash do código de inicialização..." INIT_CODE_HASH=$(echo -n "$INIT_CODE" | keccak-256sum | cut -d' ' -f1) || exit_on_error "Falha ao calcular o hash do código inicial."
# Etapa 4: Escreva o hash do código inicial em um arquivo OUTPUT_FILE="${CONTRACT_NAME}_INIT_CODE_HASH.txt" echo "$INIT_CODE_HASH" > "$OUTPUT_FILE" || exit_on_error "Falha ao gravar o hash do código de inicialização no arquivo."
# Limpe arquivos temporários (se houver) # (Adicione comandos aqui se houver algum arquivo temporário para limpar)
# Etapa 5: produza o resultado echo "Hash do código de inicialização foi gravado em $OUTPUT_FILE" se $VERBOSE; então echo "Código de inicialização: $INIT_CODE" echo "Hash do código de inicialização: $INIT_CODE_HASH" fi
# Reverte para o diretório original cd - > /dev/null || saída