Lewati ke konten utama
iCute FinanceASET DIGITAL · PENGAMATAN PASAR
Bahasa Indonesia
Direktori riset
iCute Finance

Navigasi utama

Navigasi utama

ASET DIGITAL · PENGAMATAN PASAR

Apa itu INIT_CODE_HASH dan bagaimana cara menghitung / menggunakannya dalam kontrak pintar DeFi

Init code hash pada dasarnya adalah hash keccak256 dari bytecode kontrak. Penggunaan Init Code

Init code hash diperlukan "Karena perhitungan alamat bergantung pada hashing init code. Init code adalah kode yang, ketika dieksekusi, menghasilkan runtime bytecode yang akan ditempatkan ke dalam state, dan yang biasanya digunakan oleh bahasa tingkat tinggi untuk mengimplementasikan ‘constructor’." "EIP-1014: Skinny CREATE2," Ethereum Improvement Proposals, no. 1014, April 2018. [Online serial]. Tersedia: https://eips.ethereum.org/EIPS/eip-1014.

Penggunaan Init Code Penggunaan utama init code adalah untuk mining alamat. Anda dapat melihat https://github.com/0age/create2crunch untuk contoh bagaimana kita dapat memanfaatkan CREATE2 dan init code sebuah kontrak untuk 'menambang' alamat yang lebih efisien untuk deployment kontrak. Berikut adalah skrip bash sederhana yang menggunakan forge untuk menghasilkan code init hash untuk Anda:

https://github.com/sambacha/foundry-scripts/tree/master/scripts/deploy

Script #!/usr/bin/env bash

exit_on_error() { echo "Error: $1" exit 1 }

usage() { echo "Usage: $0 <contract_path> <contract_name> [-v]" echo " <contract_path> : Path to the Solidity contract file" echo " <contract_name> : Name of the Solidity contract" echo " -v : Enable verbose output (optional)" exit 1 }

if ! command -v forge &> /dev/null; then exit_on_error "Foundry is not installed. Please install it first." fi

if [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; then usage fi

CONTRACT_PATH=$1 CONTRACT_NAME=$2 VERBOSE=false

if [ "$#" -eq 3 ] && [ "$3" == "-v" ]; then VERBOSE=true fi

if [ ! -f "$CONTRACT_PATH" ]; then exit_on_error "Contract path '$CONTRACT_PATH' does not exist or is not a file." fi

CONTRACT_DIR=$(dirname "$CONTRACT_PATH")

CONTRACT_FILE=$(basename "$CONTRACT_PATH")

cd "$CONTRACT_DIR" || exit_on_error "Failed to change directory to '$CONTRACT_DIR'."

echo "Compiling the contract..." if $VERBOSE; then forge build --contracts . || exit_on_error "Failed to compile the contract." else forge build --contracts . > /dev/null 2>&1 || exit_on_error "Failed to compile the contract." fi

echo "Generating init code..." INIT_CODE=$(forge inspect "$CONTRACT_NAME" bytecode) || exit_on_error "Failed to generate init code."

echo "Calculating init code hash..." INIT_CODE_HASH=$(echo -n "$INIT_CODE" | keccak-256sum | cut -d' ' -f1) || exit_on_error "Failed to calculate init code hash."# Langkah 4: Tulis hash kode init ke file OUTPUT_FILE="${CONTRACT_NAME}_INIT_CODE_HASH.txt" echo "$INIT_CODE_HASH" > "$OUTPUT_FILE" || exit_on_error "Gagal menulis hash kode init ke file."

echo "Hash kode init telah ditulis ke $OUTPUT_FILE" if $VERBOSE; then echo "Kode init: $INIT_CODE" echo "Hash kode init: $INIT_CODE_HASH" fi

cd - > /dev/null || exit

Lihat sumber CC BY-SA 4.0