Ir para o conteúdo principal
iCute FinanceATIVOS DIGITAIS · VISÃO DO MERCADO
Português (Brasil)
Diretório de pesquisa
iCute Finance

Navegação principal

Navegação principal

ATIVOS DIGITAIS · VISÃO DO MERCADO

O que é INIT_CODE_HASH e como ele é calculado/usado em contratos inteligentes DeFi

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 <caminho_do_contrato> <nome_do_contrato> [-v]" echo " <contract_path> : Caminho para o arquivo do contrato do Solidity" echo "<contract_name>: 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

if [ "$#" -lt 2 ] || [ "$#" -gt3]; então uso fi

CONTRACT_PATH=$1 CONTRACT_NAME=$2 VERBOSE=falso

if [ "$#" -eq 3 ] && [ "$3" == "-v" ]; então VERBOSE = verdadeiro fi

se [ ! -f "$CONTRACT_PATH"]; então exit_on_error "O caminho do contrato '$CONTRACT_PATH' não existe ou não é um arquivo." fi

CONTRACT_DIR=$(nome do diretório "$CONTRACT_PATH")

CONTRACT_FILE=$(nome base "$CONTRACT_PATH")

cd "$CONTRACT_DIR" || exit_on_error "Falha ao alterar o diretório para '$CONTRACT_DIR'."

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

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."

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."

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."

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

cd - > /dev/null || saída

Ver fonte CC BY-SA 4.0