Selam THT ailesi. Bugün sizlerle beraber Akıllı kontratların vazgeçilmez bir parçası olan OpenZeppelini inceleyeceğiz ve openzeppelin ile hızlıca bir token oluşturacağız. Bu yazımızdan önce ERC-20 standartında akıllı kontrat yazmak adlı yazıma bakmanızı öneririm. Bu konuyla ilgili her yazım bir önceki yazımla alakalı oluyor. Bu nedenle burada kullandığım terimler size yabancı geliyorsa bu konudan önceki yazılarıma bakmanızı öneririm. Bu seriyi en temelden aldım ve daha da ileri seviyeye taşıyorum. Bu iş için meraklı iseniz hiçbir yazıyı atlamamanızı öneririm. Bu yazımızda ise OpenZeppelinin ne olduğunu, Akıllı kontratlardaki etkisini ve kod bilmeden sadece OpenZeppelin kullanarak hızlıca bir token oluşturup yayınlamayı göreceğiz (Burada yayınlamaktan bahsettiğimiz token özel olarak bir proje tokeni değil, daha çok memecoin yerine geçebilecek tokenlerdir.).
OpenZeppelin, Solidity ile yazılmış açık kaynak kodlu, standartlara uygun ve güvenlik denetimlerinden geçmiş akıllı kontrat kütüphanesidir. En yaygın kullandığımız token standartları (ERC-20, ERC-721, ERC-1155) üzerinde Ownable (sahiplik), AccesControl gibi işlemleri ve fazlasını içerir. Yani kısaca kodlarımızı kısaltmamıza yardımcı olan denetlenmiş bir kütüphane. Peki OpenZeppelinin akıllı kontratlardaki etkisi sadece güvenlik ile mi sınırlıdır ? OpenZeppelinin akıllı kontratlardaki etkisi nelerdir?
OpenZeppelin, biz geliştiricilerin Solidity ile yazdığı kontratlarda güvenlik zaafiyetlerini minimize eden sürekli denetlenen modülleri kullanmamıza olanak tanır. Bununla birlikte yazılım mimarisini standartlaşmaya götürerek kodlardaki okunabilirliği ve sürdürülebilir yapıyı arttırdı. En önemli işlevlerinden biri ise Token üretimini ve geliştirme süresini saatlere düşürmüş olmasıdır. Artık sadece OpenZeppelin kullanarak kolayca bir token yazabiliyor, ve bunu yayınlayabiliyoruz. Peki bu işlem nasıl yapılıyor ?
öncesinde OpenZeppelin "Contracts Wizard" a gidiyoruz. Contracts Wizard
Gördüğünüz gibi bizi bir terminal ve yanında özelleştirebileceğimiz bir panel karşılıyor. Name kısmına yaratcağımzı tokenin ismini yazıyoruz. Symbol kısmına tokenimizi temsil edecek bir sembol yazıyoruz. Permint kısmına ilk dağıtımda ne kadar token deploy edeceğimizi yazıyoruz. Yani başlangıç arzı ayarlıyoruz. Özellikler kısmına geldiğimizde bizi bazı özellikler karşılıyor.
NOT: burada konuyu kısa tutmak amaçlı sadece kullanacağımız modülleri ve fonksiyonları açıklayacağım. İlerleyen konularımızda her modül için ayrı ayrı konular açacağım.
"Mintable", kısmı token arzını istediğimiz zaman arttırmamızı sağlar (bu fonksiyon sadece owner tarafından kullanılabilir). "Burnable", ownerkarın ellerindeki tokenleri yakmasına izin verir. Böylece arz azalmış olur ve token değeri artar. "Pausable", saldırı gibi acil durumlarda tüm token işlemlerini dondurur. "Callback", ERC-1363 standardını uygular. Yani belirli fonksiyonların belirli işlemleri tetiklemesini sağlar. Örnek verecek ..... . "Permit", Kullanıcıların token harcama iznini approve imza ile vermesini sağlar, bu sayede gazsız işlem yapılmasına olanak tanır (burada kullanıcılar onay için gas ödemezler). "Flash Minting", aynı işlem içinde kullanıcılara token verir ve bu tokeni geri alır. Bu işleme Flaş kredi de denebilir. Kullancılar aynı işlem içerisinde tokeni geri ödedikleri sürece istedikleri kadar token talep edebilirler.
Şimdi ise tokenimize bir isim, sembol ve başlangıç arzı verelim. Sonrasında features daki tüm özellikleri verelim (isteğe bağlı).
kontratımızın son hali bu şekilde. Sonrasında bunu test ortamına sokmak için yukarıdaki "Open in Remix" butonuna basarak Remix IDE'de açılmasını sağlıyoruz.
Gördüğünüz üzere Remix IDE'de kodumuz açıldı. Ancak burada compiler sürümü ile kodumuzun sürüm uyumuna dikkat edelim. Sonrasında kodumuzu test ağında test etmek ve dağıtmak için compile edip "Deploy and run transactions" kısmına geçelim.
Bu sayfaya geldiğimizde "Environment" kısmında Sepolia test ağını seçiyoruz ve Deploy kısmında 4 tane ethereum cüzdan adresi girip kontratımızı Deploy ediyoruz (Bunun sebebi kontratımızdaki "constructor(address recipient, address defaultAdmin, address pauser, address minter)" fonksiyonu. Bu fonksiyon sayesinde tüm yetkiler bir cüzdan adresinde olmak yerine rollere ayrılıyor). Ben tüm istenen adrese tek adresimi girdim.
Gördüğünüz üzere test ağına istek gitti. Onayladıktan sonra ise yeni bir kontrat adresimiz ve test ağında tokenimiz olacak.
Token başarılı bir şekilde test ağına işlenmiştir. Şimdi ise kontrat fonksiyonlarımızı solda "Deployed Contracts" kısmında görüyoruz. Dilerseniz oradan tüm fonksiyonları deneyebilirsiniz. Şimdi Sepolia Etherscande kontratımızı kontrol edelim. Sepolia Etherscan
Gördüğünüz gibi WinterS token artık test ağında yerini aldı. Ziyaret etmek isterseniz akıllı kontrat adresini aşağıya bırakıyorum :
0x362760fdd32026016a9530786cf00dfb384fa1aa
Bu yazımızda sadece OpenZeppelin kulanarak kod bilgisine ihtiyaç duymadan kendi tokenimizi yazdık ve bunu test ortamında yayınladık. Bir dahaki konumuzda NFT'lerin ne olduklarına, ERC-721 ve ERC-1155 standartlarına göz atacağız. İyi forumlar.
Hiçbir şeye ihtiyacımız yok, yalnız bir şeye ihtiyacımız vardır; çalışkan olmak!
OpenZeppelin, Solidity ile yazılmış açık kaynak kodlu, standartlara uygun ve güvenlik denetimlerinden geçmiş akıllı kontrat kütüphanesidir. En yaygın kullandığımız token standartları (ERC-20, ERC-721, ERC-1155) üzerinde Ownable (sahiplik), AccesControl gibi işlemleri ve fazlasını içerir. Yani kısaca kodlarımızı kısaltmamıza yardımcı olan denetlenmiş bir kütüphane. Peki OpenZeppelinin akıllı kontratlardaki etkisi sadece güvenlik ile mi sınırlıdır ? OpenZeppelinin akıllı kontratlardaki etkisi nelerdir?
OpenZeppelin, biz geliştiricilerin Solidity ile yazdığı kontratlarda güvenlik zaafiyetlerini minimize eden sürekli denetlenen modülleri kullanmamıza olanak tanır. Bununla birlikte yazılım mimarisini standartlaşmaya götürerek kodlardaki okunabilirliği ve sürdürülebilir yapıyı arttırdı. En önemli işlevlerinden biri ise Token üretimini ve geliştirme süresini saatlere düşürmüş olmasıdır. Artık sadece OpenZeppelin kullanarak kolayca bir token yazabiliyor, ve bunu yayınlayabiliyoruz. Peki bu işlem nasıl yapılıyor ?
öncesinde OpenZeppelin "Contracts Wizard" a gidiyoruz. Contracts Wizard
Gördüğünüz gibi bizi bir terminal ve yanında özelleştirebileceğimiz bir panel karşılıyor. Name kısmına yaratcağımzı tokenin ismini yazıyoruz. Symbol kısmına tokenimizi temsil edecek bir sembol yazıyoruz. Permint kısmına ilk dağıtımda ne kadar token deploy edeceğimizi yazıyoruz. Yani başlangıç arzı ayarlıyoruz. Özellikler kısmına geldiğimizde bizi bazı özellikler karşılıyor.
NOT: burada konuyu kısa tutmak amaçlı sadece kullanacağımız modülleri ve fonksiyonları açıklayacağım. İlerleyen konularımızda her modül için ayrı ayrı konular açacağım.
"Mintable", kısmı token arzını istediğimiz zaman arttırmamızı sağlar (bu fonksiyon sadece owner tarafından kullanılabilir). "Burnable", ownerkarın ellerindeki tokenleri yakmasına izin verir. Böylece arz azalmış olur ve token değeri artar. "Pausable", saldırı gibi acil durumlarda tüm token işlemlerini dondurur. "Callback", ERC-1363 standardını uygular. Yani belirli fonksiyonların belirli işlemleri tetiklemesini sağlar. Örnek verecek ..... . "Permit", Kullanıcıların token harcama iznini approve imza ile vermesini sağlar, bu sayede gazsız işlem yapılmasına olanak tanır (burada kullanıcılar onay için gas ödemezler). "Flash Minting", aynı işlem içinde kullanıcılara token verir ve bu tokeni geri alır. Bu işleme Flaş kredi de denebilir. Kullancılar aynı işlem içerisinde tokeni geri ödedikleri sürece istedikleri kadar token talep edebilirler.
Şimdi ise tokenimize bir isim, sembol ve başlangıç arzı verelim. Sonrasında features daki tüm özellikleri verelim (isteğe bağlı).
kontratımızın son hali bu şekilde. Sonrasında bunu test ortamına sokmak için yukarıdaki "Open in Remix" butonuna basarak Remix IDE'de açılmasını sağlıyoruz.
Gördüğünüz üzere Remix IDE'de kodumuz açıldı. Ancak burada compiler sürümü ile kodumuzun sürüm uyumuna dikkat edelim. Sonrasında kodumuzu test ağında test etmek ve dağıtmak için compile edip "Deploy and run transactions" kısmına geçelim.
Bu sayfaya geldiğimizde "Environment" kısmında Sepolia test ağını seçiyoruz ve Deploy kısmında 4 tane ethereum cüzdan adresi girip kontratımızı Deploy ediyoruz (Bunun sebebi kontratımızdaki "constructor(address recipient, address defaultAdmin, address pauser, address minter)" fonksiyonu. Bu fonksiyon sayesinde tüm yetkiler bir cüzdan adresinde olmak yerine rollere ayrılıyor). Ben tüm istenen adrese tek adresimi girdim.
Gördüğünüz üzere test ağına istek gitti. Onayladıktan sonra ise yeni bir kontrat adresimiz ve test ağında tokenimiz olacak.
Token başarılı bir şekilde test ağına işlenmiştir. Şimdi ise kontrat fonksiyonlarımızı solda "Deployed Contracts" kısmında görüyoruz. Dilerseniz oradan tüm fonksiyonları deneyebilirsiniz. Şimdi Sepolia Etherscande kontratımızı kontrol edelim. Sepolia Etherscan
Gördüğünüz gibi WinterS token artık test ağında yerini aldı. Ziyaret etmek isterseniz akıllı kontrat adresini aşağıya bırakıyorum :
0x362760fdd32026016a9530786cf00dfb384fa1aa
Bu yazımızda sadece OpenZeppelin kulanarak kod bilgisine ihtiyaç duymadan kendi tokenimizi yazdık ve bunu test ortamında yayınladık. Bir dahaki konumuzda NFT'lerin ne olduklarına, ERC-721 ve ERC-1155 standartlarına göz atacağız. İyi forumlar.



