Soru ve cevaplar

INIT_CODE_HASH nedir ve DeFi akıllı sözleşmelerinde nasıl hesaplanır/kullanılır?

Metin boyutu
Başlangıç ​​kodu karması temel olarak sözleşmelerin bayt kodunun keccak256 karmasıdır. Başlatma Kodunun Kullanımı Başlangıç kodu karması gerekli "Adres hesaplaması karma işlemine bağlı olduğundan başlangıç kodu. Başlatma kodu, yürütüldüğünde aşağıdakileri üreten koddur. duruma yerleştirilecek çalışma zamanı bayt kodu ve genellikle yüksek seviyeli diller tarafından bir uygulamayı uygulamak için kullanılır. 'yapıcı'. "EIP-1014: Skinny CREATE2," Ethereum İyileştirme Önerileri, no. 1014, Nisan 2018. [Çevrimiçi seri]. Mevcut: https://eips.ethereum.org/EIPS/eip-1014. Başlatma Kodunun Kullanımı Başlangıç kodunun birincil kullanımı madencilik adresleri içindir. Sözleşme dağıtımı için daha verimli adresleri 'çıkarmak' amacıyla CREATE2'den ve bir sözleşmenin başlangıç ​​kodundan nasıl yararlanabileceğimize ilişkin bir örnek için https://github.com/0age/create2crunch adresini ziyaret edebilirsiniz. İşte sizin için init hash kodunu oluşturmak için forge kullanan basit bir bash betiği: https://github.com/sambacha/foundry-scripts/tree/master/scripts/deploy Senaryo #!/usr/bin/env bash # Hata durumunda mesajla çıkma işlevi çıkış_on_error() { echo "Hata: $1" çıkış 1 } # Kullanım bilgilerini görüntüleme işlevi kullanım() { echo "Kullanım: $0 [-v]" echo " : Solidity sözleşme dosyasının yolu" echo " : Sağlamlık sözleşmesinin adı" echo " -v : Ayrıntılı çıktıyı etkinleştir (isteğe bağlı)" çıkış 1 } # Dökümhanenin kurulu olup olmadığını kontrol edin eğer! komut -v forge &> /dev/null; o zaman çıkış_on_error "Foundry kurulu değil. Lütfen önce onu kurun." fi # Doğru sayıda argümanın sağlanıp sağlanmadığını kontrol edin if [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; o zaman kullanım fi # Bağımsız değişkenlerdeki değişkenler CONTRACT_PATH=1$ CONTRACT_NAME=2$ VERBOSE=yanlış # Ayrıntılı seçeneğin etkin olup olmadığını kontrol edin if [ "$#" -eq 3 ] && [ "$3" == "-v" ]; o zaman VERBOSE=doğru fi # Sözleşme yolunu doğrula eğer [ ! -f "$SÖZLEŞME_YOLU" ]; o zaman çıkış_on_error "'$CONTRACT_PATH' sözleşme yolu mevcut değil veya bir dosya değil." fi # Sözleşme yolunun dizinini alın CONTRACT_DIR=$(dizin adı "$CONTRACT_PATH") # kabuk denetimini devre dışı bırak=SC2034 CONTRACT_FILE=$(temel adı "$CONTRACT_PATH") # Sözleşme dizinine geçiş CD "$CONTRACT_DIR" || çıkış_on_error "Dizin '$CONTRACT_DIR' olarak değiştirilemedi." # Adım 1: Sözleşmeyi derleyin echo "Sözleşme derleniyor..." $VERBOSE ise; o zaman forge build --sözleşmeler . || çıkış_on_error "Sözleşme derlenemedi." başka forge build --sözleşmeler . > /dev/null 2>&1 || çıkış_on_error "Sözleşme derlenemedi." fi # Adım 2: Başlangıç kodunu oluşturun echo "Başlangıç kodu oluşturuluyor..." INIT_CODE=$("$CONTRACT_NAME" bayt kodunu denetleyin) || çıkış_on_error "Başlangıç ​​kodu oluşturulamadı." # Adım 3: Başlangıç kodu karmasını hesaplayın echo "Başlangıç kodu karması hesaplanıyor..." INIT_CODE_HASH=$(echo -n "$INIT_CODE" | keccak-256sum | kesim -d' ' -f1) || çıkış_on_error "Başlangıç ​​kodu karması hesaplanamadı." # Adım 4: Başlangıç kodu karmasını bir dosyaya yazın OUTPUT_FILE = "${CONTRACT_NAME_INIT_CODE_HASH.txt" echo "$INIT_CODE_HASH" > "$OUTPUT_FILE" || çıkış_on_error "Başlangıç ​​kodu karması dosyaya yazılamadı." # Geçici dosyaları temizleyin (varsa) # (Temizlenecek geçici dosyalar varsa komutları buraya ekleyin) # Adım 5: Sonucun çıktısını alın echo "Başlatma kodu karması $OUTPUT_FILE dosyasına yazıldı" $VERBOSE ise; o zaman echo "Başlatma kodu: $INIT_CODE" echo "Kod karmasını başlat: $INIT_CODE_HASH" fi # Orijinal dizine geri dön cd - > /dev/null || çıkış
Keşfetmeye devam edinVeri kataloğuAra