
Giriş
Solidity ile geliştirmeye başladığımda, kısa sürede çevrimiçi IDE'leri bırakıp Hardhat'ı yeni ana çerçeve olarak benimsedim. Projelerin yapımına ve bununla ilgili bir iş akışının oluşturulmasına aylar geçtikten sonra, ağ düzeni, test stratejisi ve proje organizasyonundan memnun kaldım.
Ancak, birisi Foundry performans avantajlarının etkileyici olduğunu söylediğinde, akıllı sözleşme geliştirme alanında popüler olan iki çerçeve arasında doğru bir karşılaştırma yapmak için yeterince ilgimi çekti.
Adil bir değerlendirme yapabilmek için, her ikisinin yardımıyla aynı projeleri oluşturdum ve aynı MiniBank sözleşmesini ve diğer test ayarlarını uyguladım. Bu pratik deneyim, performans, geliştiricilerin deneyimi ve iş akışının bu iki araç arasında büyük farklılıklar gösterdiğini ve bu iki araç arasında seçim yapacak olan herkesin bunu incelemesi gerektiğini ortaya koydu.
Proje Mimarisi ve Kurulumları
İkili çerçeve içinde bunları kurarken ilk deneyim oldukça farklıdır. Foundry, Hardhat hardhat.config.js dosyasına benzer şekilde anahtar-değer çiftlerine dayalı bir foundry.toml yapılandırma dosyası oluşturur. Her ikisi de kaynak klasörleri, derleme çıktı dizinleri vb. özelleştirmeyi destekler.
Varsayılan klasör yapısı Foundry'de oldukça farklıdır, ancak Hardhat birden fazla ağı mükemmel bir şekilde yönetebildiğinden, yapılandırma dosyasında birden fazla ağ doğrudan yapılandırılamaz. Foundry.toml dosyasındaki diğer parametreler, ayrıntı düzeyi veya hesap ayarları ve gaz fiyatı seçenekleri gibi test seçenekleriyle bağlantılıdır.
Foundry'nin yeniden eşleme özelliği, bağımlılıkların içe aktarılmasına güçlü bir yaklaşım sunduğu için özellikle ilginçtir. Yapılandırmada kısayollar oluşturarak sözleşmelerin içe aktarılmasını çok daha kolay hale getirebilirsiniz.
Örneğin, uzun içe aktarma yolları yazmak yerine, kodunuzun daha okunabilir ve bakımı daha kolay olmasını sağlayan kısa el eşlemeleri yazabilirsiniz.
Bağımlılık Yönetimi Yaklaşımları
Çerçeveler, bağımlılıkları yönetme şekilleri açısından büyük farklılıklar gösterir:
- •Hardhat, JavaScript geliştiricilerine anında açık olan, yerleşik npm ekosistemini kullanır.
- •OpenZeppelin sözleşmelerinin kurulumu sadece bir npm install komutudur
- •Foundry, forge CLI aracı aracılığıyla Git alt modülünün bağımlılık yönetimine dayanır.
- •Bağımlılıklar lib/ klasöründe saklanır ve package.json dosyasının aksine .gitmodules dosyasında izlenir.
Bu yöntem, akıllı sözleşmeleri bağımlılık olarak içeren herhangi bir GitHub deposunu alır ve kütüphane seçiminde daha esnek olmanızı sağlar.
GitHub organizasyonunu ve depo adını belirtebilir ve isteğe bağlı olarak yüklemek istediğiniz dalı veya etiketi belirtebilirsiniz. Forge yüklendikten sonra, forge remapping komutu kullanılarak Foundry'nin kullanacağı varsayılan içe aktarma yolları görüntülenebilir ve bu yollar yapılandırma dosyaları ile daha da özelleştirilebilir.
Geliştirme ve Hata Ayıklama Araçları
Hardhat'ın üstün olduğu alanlardan biri, hata ayıklama deneyimidir. Çerçeve ayrıca, JavaScript geliştirmede beklenen hata ayıklama stiline benzeyen console.log kullanımını varsayılan olarak sunar. Bu işlevsellik, bir satış noktası olarak yoğun bir şekilde pazarlanmaktadır ve geliştiriciler tarafından, yürütmenin nasıl gerçekleştirildiğini ve neyin yanlış olduğunu anlamak için kolayca izlenebilir.
Foundry, sözleşmelere giriş yapmak için alternatif bir yönteme ihtiyaç duyar. Hardhat'ı manuel olarak yükleyip içe aktarmak ve bir konsol sözleşmesi yüklemek mümkün olsa da, bunu yapmanın en iyi yolu, özel bir konsol sözleşmesini projenize kopyalamaktır.
Özellikle test dosyaları söz konusu olduğunda, dahil edilen DSTest sözleşmesi, logstring, logint ve logaddress gibi ekstra bağımlılıklar olmadan yayınlanabilen günlük olaylarını içerir.
Test Metodolojileri
Test deneyimi, iki çerçeve arasındaki belki de en dikkat çekici farktır.
Baret Test Yaklaşımı
Hardhat, standart JavaScript test modellerine dayanmaktadır:
- •Varsayılan doğrulama kütüphanesi olarak Mocha ile birlikte describe ve it bloklarını kullanır
- •Test dosyaları, web geliştirmeye aşina olan geliştiricilerin daha doğal stiline benzeyebilir
- •Amacını açıkça belirten açıklayıcı test adları sunar
- •Tanıdık asenkron kalıplar
- •Modern web geliştirmeye zaten aşina olanlar için öğrenme eğrisi minimum düzeydedir.
Dökümhane Test Yaklaşımı
Foundry tamamen farklı bir şekilde çalışır:
- •Testler, DSTest'i miras alan Solidity akıllı sözleşmeleri olarak geliştirilir
- •Tüm testler, test veya testFail kelimesiyle başlayan işlevlerle başlar.
- •Tüm iddialar, miras alınan DSTest sözleşmesi aracılığıyla yapılır.
- •Test dosyaları, testlerde kullanılan gerçek akıllı sözleşmelerdir.
Akıllı Sözleşme Testinde Ustalaşın
Çerçeveleri karşılaştırın ve projeniz için en uygun test yaklaşımını seçin.
Foundry yöntemi bir dizi sonuç doğurur:
- •Test sözleşmeleri, JavaScript müşterilerinde beforeEach'e benzer bir setUp() prosedüründe örneklenmelidir.
- •ETH'nin sözleşme yöntemi gönderimi, kıvrımlı parantezlerle çevrili değer parametreleri içeren belirli bir sözdizimi içerir
- •Başlangıçta öğrenme eğrisinin dik olması, asenkron işlemlerin yönetilmesini gerektirmediği gerçeğiyle dengelenebilir.
Learning Foundry Test Özellikleri
Foundry, güçlü test araçları sunan hile kodları olarak bilinen kavramı tanıtmaktadır. Bunlar, test sırasında blok zincirindeki duruma erişmenizi sağlayan, belirli bir sözleşme adresinde özel olan işlevlerdir.
Şunları yapabilirsiniz:
- •Mevcut blok numarasını değiştirin
- •Başka hesapların kimliğine bürünmeyin.
- •Belirli sözleşme davranışlarını talep edin
Hile kodlarını kullanmak için bir arayüz tanımlamanız ve bunu hilenin özel adresine bir durum değişkeni olarak örneklendirmeniz gerekir. Kurulumdan sonra, aşağıdaki gibi işlevlerle hile yapmak mümkündür:
- •vm.prank() ile bir sonraki sözleşme çağrısını farklı bir alıcıya ayarlayın
- •vm.roll() ile blok zincirini belirli bir noktaya ilerletin
En ilginç hile kodlarından biri, başarısız olmasını istediğiniz işlemden önce çağrılması gereken vm.expectRevert() kodudur. Standart onay kalıplarının bu tersine çevrilmesi sezgilere aykırı olabilir, ancak olası başarısızlık koşullarının net bir şekilde kontrol edilmesini sağlar.
Performans Karşılaştırması Sonuçları
Çerçeveler arasındaki performans farkı önemli ve anında fark edilebilir. Aynı sözleşmeler ve test senaryolarında, derleme ve test yürütme süresi konusunda çarpıcı sonuçlar elde ettim:
Performans Karşılaştırma Sonuçları
| Senaryo | Dökümhane | Baret |
|---|---|---|
| Projeleri temizleyin (önbellek yok) | 1,44 saniye | 5,17 saniye |
| Önbellekleme etkinleştirildiğinde | 0,45 saniye | 3,98 saniye |
| 26 akıllı sözleşme projesi | 8,53 saniye | 14,56 saniye |
Bu performans farklılıkları, projenin karmaşıklığı arttıkça daha belirgin hale gelir.
Dökümhane Testi: Avantajları ve Dezavantajları
Dökümhane Testinin Artıları ve Eksileri
| Artılar | Eksileri |
|---|---|
| Async/await karmaşıklığı yok | Test isimleri, JavaScript testlerinde olduğu kadar açıklayıcı değildir. |
| Testler çok hızlı çalışır | expectRevert ifadesi mantığa aykırıdır |
| Otomatik olarak oluşturulan gaz raporu | Hile kodları için öğrenme eğrisi |
| Solidity ile yazılmış her şey | Dağıtım araçları hala geliştirme aşamasındadır. |
Performansın faydaları tartışılmaz ve Solidity test isimleri JavaScript test isimleri kadar açıklayıcı olamaz, bu da test amacının anlaşılmasını zorlaştırabilir. Hile kodu sistemi güçlü olsa da, öğrenmek için başlangıçta bir maliyet gerektirecektir.
Sözleşme Dağıtım Stratejileri
Dağıtım, Hardhat'ın şu anda daha iyi bir geliştirici deneyimi sunduğu alanlardan biridir. Çerçeve şunları kabul eder:
- •JavaScript tabanlı dağıtım komut dosyaları
- •Çeşitli ağlarla bağlantı
- •Ortam değişkenleri aracılığıyla yapılandırmayı yükleyin
- •Karmaşık dağıtım durumlarını ustaca ele alın
JavaScript tabanlı dağıtım komut dosyaları şu anda Foundry'de gereklidir, ancak yapıcıların argümanlarının sağlanması gerektiğinde bu durum zahmetli olabilir. Önerilen çözüm, dağıtımların karmaşıklığını ele almak için dağıtım bash komut dosyaları oluşturmaktır, ancak geliştirme ekibi daha gelişmiş dağıtım çözümleri geliştirmektedir.
Bu, Hardhat'ın gelişmiş bir dağıtım ekosistemine sahip olmasıyla ilgili olarak Foundry'nin günümüzün en ciddi zayıf noktalarından biridir.
Komut Satırı Arayüzü Araçları
Foundry, blok zinciri ile etkileşim kurmak ve akıllı sözleşmeleri sorgulamak için cast CLI aracına sahiptir. Bu, aşağıdakileri yapmanızı sağlayan güçlü bir yardımcı programdır:
- •Sözleşme işlevlerini çağırın
- •Blockchain durumunu sorgula
- •Komut satırında bir dizi blok zinciri eylemi gerçekleştirin
Cast, blok zinciri ile etkileşimde tam işlevsellik sağlasa da, karmaşık işlemleri gerçekleştirmek için karmaşık komut satırı yapısı gerektirir. Dağıtımla benzer şekilde, uzun komutları tekrar tekrar yazmaktan kaçınmak için bash komut dosyası yazımı gerekebilir.
Çerçeve Karşılaştırma Özeti
Çerçeve Özellik Karşılaştırması
| Özellik | Dökümhane | Baret |
|---|---|---|
| Kurulum | CLI curl komutu aracılığıyla | npx ile veya npm aracılığıyla gerekli değildir |
| CLI araçları | projeyi yönetmek için forge, sözleşmelerle etkileşim kurmak için cast kullanın | hardhat projeyi yönet (komut dosyalarını derle/derle/çalıştır) |
| Performansı oluşturun ve test edin | Olağanüstü hız | Orta düzeyde performans |
| Bağımlılıklar | Git alt modülleri | npm paketleri |
| Yapılandırma | foundry.toml | hardhat.config.js |
| Test izolasyonu | Evet, -match-test -match-contract aracılığıyla | Evet, yalnızca test dosyalarında kullanın veya atlayın |
| Sözleşme dağıtımları | Cast CLI aracı aracılığıyla | JavaScript tabanlı komut dosyaları |
Doğru Seçimi Yapmak
Foundry, olağanüstü performansı, aktif topluluğu ve akıllı sözleşmeleri test etmek için kullandığı yaratıcı yöntemiyle büyük bir potansiyel sergiliyor. Yapısı hızlı geliştirme döngüsü için mükemmel ve kullanımını öğrendikten sonra geliştirmeyi büyük ölçüde hızlandırabilecek harika test araçlarına sahip.
Bununla birlikte, Foundry özellikle dağıtım araçları ve geliştirici deneyimi iyileştirmeleri konusunda hala gelişme aşamasındadır. Foundry, hibrit modeli tercih eden geliştiriciler için bazı ilginç avantajlara sahiptir:
- •Sözleşme geliştirme ve test için Foundry
- •Dağıtım ve komut dosyaları için Hardhat
Standart JavaScript araçlarına ve yerleşik dağıtım uygulamalarına daha alışkın olan kullanıcılar, Hardhat ile artık daha üretken olabilirler, ancak bu karar yine sizin geçmişinize ve yeni araçları kullanma becerinize bağlıdır.
Her iki mimari de hala hızla değişmektedir ve akıllı sözleşme geliştirme ekosisteminde, çeşitli geliştiricilerin ve uygulama örneklerinin ihtiyaçlarını karşılayan çeşitli uygulanabilir alternatifler bulunmaktadır.


