Foundry'e Giriş

Foundry'e Giriş

Foundry Zamanı

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.

Resim

"forge test" yerine "forge t" kullanılabilinir.

Resim

"forge build" yerine "forge b" kullanılabilinir.

Resim

Did you find this article valuable?

Support Buildchain by becoming a sponsor. Any amount is appreciated!