Hardhat üzerinde js yazarak test yapmaktan bıktınız ve solidity ile hazırladığım kontratı neden js ile test ediyorum diyorsanız foundry imdadınıza yetişiyor.
Tüm içerik foundry resmi sitesi üzerinden alıntılanıp türkçeye çevrilmiştir. Yazı içerisinde ilgili sitedeki özellikli bağlantılara ayrıca yer verilmiştir.
https://book.getfoundry.sh
Foundry Kurulumu
Linux ve Mac sistemlerinde aşağıdaki kodu terminale yazarak ilk adımı atalım.
curl -L https://foundry.paradigm.xyz | bash
Aşağıda gördüğünüz üzere, ya mevcut terminalde belirtilen linki çalıştırıp sonrasında foundryup komutunu çalıştıracaksınız yada yeni terminal açıp foundryup komutunu çalıştıracaksınız.
Mac
Linux
Ben yeni bir terminal açıp foundryup komutunu çalıştırdım.
foundryup
Mac
Linux
Güncelleme yapmak için terminalde foundryup komutunu çalıştırmanız yeterli olacaktır.
Mac
Linux
Windows üzerinde nasıl kuracağınıza dair talimatlar şu sayfada.
Mac üzerinde hata alırsanız, brew install libusb
Foundry Projesine Başlama
forge init komutuyla istediğiniz adla yeni bir projeyi açabilirsiniz.
forge init hello_foundry
Proje dizinine gittiğinizde 4 klasör göreceksiniz. Bunlar sırasıyla; lib, script, src ve test klasörleridir.
Src dosyasının içinde yazdığımız kontrat, test dosyasının içinde ise kontrata ilişkin hazırladığımız test kontratı bulunmaktadır. Yaptığınız ilk yüklemede src klasörü altına Counter.sol ve test klasörü altına Counter.t.sol kontratları otomatik atılmaktadır.
Foundry Projesinin Derlenmesi
Derleme için forge build komutu kullanılır.
forge build
Foundry Projesinin Test Edilmesi
forge test
Test için forge test komutu kullanılır.
Test klasörü altında bulunan Counter.t.sol dosyasındaki 2 test [ testIncrement() ve testSetNumber() ] görüldüğü gibi (pass) sınavı geçmiştir.
Burada sadece foundry’e ilişkin temel bilgileri verdiğimiz için testlerdeki fonksiyonları [ testIncrement() ve testSetNumber() ] anlatmıyoruz.
Daha ayrıntılı test sonuçları için forge test -vvvv kullanılır.
forge test -vvvv
Sadece spesifik bir fonksiyonu test etmek için —match komutunu kullanacaksınız.
Counter.t.sol dosyasında sadece testIncrement() fonksiyonunu test etmek istediğimiz takdirde forge test —match testIncrement yazacağız.
forge test —match testIncrement
forge test -vvvv —-match testIncrement
Bu kod ile spesifik testi ayrıntılı olarak görebilirsiniz.( v sayısı azaltılarak daha az ayrıntılı görünüm elde edilir)
Diyelim ki birçok test konratıyla farklı sayfalarda çalışıyorsunuz.
Dots.t.sol kontratı içindeki testCountriesNumber testini çağırmak için aşağıdaki dizilimi kullanın.
forge test --match-contract Dots --match-test testCountriesNumber
Foundry Projesi Gaz Raporu
Kullanacağımız komut forge test --gas-report olacaktır.
forge test --gas-report
Foundry OpenZeppelin Kurulumu
Aşağıdaki komutu terminale girin.
forge install OpenZeppelin/openzeppelin-contracts --no-commit
Aşağıdaki komutu kullanarak dizinde txt dosyasını yaratın.
touch remappings.txt
Aşağıdaki komutu kullanarak oluşturduğunuz txt dosyasına ilgili yolu girin.(Komutu çalıştırın kısaca.)
Remappings.txt openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/
Kontratın içinde openzeppelin kodlarını import etmek aşağıdaki fiziksel yolları kullanın.
import "openzeppelin-contracts/security/ReentrancyGuard.sol";
import "openzeppelin-contracts/access/Ownable.sol";
Forge STD Kurulumu
forge install foundry-rs/forge-std
Foundry Kısa Yazımlar
Bu bölümü twitter’da paylaşım yapan Paul Razvan Berg’den aldım.
"--match-contract" ve "--match-test" yazmak yerine "--mc" ve "--mt" kısaltmaları kullanılabilinir.
"forge test" yerine "forge t" kullanılabilinir.
"forge build" yerine "forge b" kullanılabilinir.