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ış