Blockchain Yazılımcısı Olmak (5) — Akıllı Kontrat Yazmak
Bir önceki yazıda akıllı kontrat temellerini öğrenmiştik. Şimdi ise kontrat yazmaya geçelim. Bu yazıda remix hakkında temel bilgileri edinmiş olduğunuzu varsayarak kaynaklar paylaşacağım. Önceki yazıda remix ethereum üzerine bir kaç video paylaşmıştım. Onlara bakarak en azından remix de kontrat nereye yazılır, nasıl compile edilir, nerden deploy edilir vs. gibi konularda bilgi sahibi olmanız lazım.
Paylaşacağım videolar solidity ve akıllı kontratlar hakkında biraz daha ileri seviye bilgiler içerecektir. Bu videolar arasında inheritance nasıl yapılır, akıllı kontrat dizaynı nasıl olmalıdır, bir kontrat içerisinden başka bir kontrat nasıl çağırılır vs. gibi konular mevcuttur.
Akıllı Kontrat Yazmak
Giriş
- Bu videoda basit bir pet örneği üzerinden kontrat temelleri hatırlatılmış. Tekrar hatırlatmakta fayda var. Kullanılan solidity versiyonu 0.4.17, şu an ki versiyonuna göre oldukça eski. Bazı şeyler değişmiş olabilir o yüzden mutlaka döküman üzerinden çalışmayan veya değiştirilen şeyleri kontrol etmenizi öneririm. Bu döküman okuma becerinizi de oldukça arttıracaktır.
Akıllı Kontratlar Arası Etkileşim
- Programlama temeli olan kişiler hemen ne olduğunu kavracaklardır. Bir kontrat içerisinde diğer kontratı tanımlamak(instantiate) olarak tanımlanabilir. Bu videoda bir üzerinden nasıl yapıldığına bakalım.
- Tabiki tek kontrat çağırma metodu direk “CALL” değil. Diğer bir önemli metod olan “DelegateCall” metodunu da öğrenmek gerek. Bu linkteki açıklamayı okuduktan sonra kendinizde mutlaka araştırın.
- Son kaynak olarak buradaki yazıyı okumanı tavsiye ederim.
Kalıtım (Inheritance)
- Inheritance nesne yönelimli programlamanın en önemli konseptidir. Diğer diller sayesinde çoğu kişi konuya az çok hakimdir diye düşünüyorum. Solidity ile inheritance hakkında bu yazı ile genel bir bakış açısı kazanalım.
- Ethereumdev de yayınlanan bu yazı örneklerle beraber oldukça açıklayıcı bir şekilde anlatmış.
- Tabiki konuya solidity dökümanından bakmazsak olmaz.
- Hazır inheritance konusuna gelmişken, abstract kontratlara da mutlaka bakmak lazım. Kontrat yazarken oldukça kullanışlı olabiliyor bazen. Bu yazı anlamanıza yardıcı olacaktır.
- Son olarak da interface konusundaki bu yazı buraya dahil edilebilir. Bir çok programlama dilinde interface kavramı mevcuttur. Kod verimliliği açısından oldukça kullanışlı olduğu için öğrenmekte fayda var.
Kütüphaneler and the EPM (Ethereum Package Manager)
EVM yapısı gereği, kontrat üzerinde gerçekleştirilen işlemler oldukça maliyetli olabilir. Bu sebeple standart kütüphaneler geliştirilmiş ve kullanıma sunulmuştur. “DelegateCall” ile çağırılıp kullanılan bu kütüphaneler bizi büyük bir işlem yükünden kurtarıyor. Tabi ki kendi kütüphanenizi de yazıp çağırarak kullanabilirsiniz.
- Solidity de kütüphanelerin kullanımı ile ilgili yazılmış oldukça güzel bir medium yazısı.
- Solidity dökümanından bir yazı.
- Akıllı kontratlarda ileri seviyelerden biri olan EthPM ile tekrar kullanılabilir akıllı kontratlar hakkında güzel bir yazı. Bu konu benimde çok ilgimi çeken konulardan biri olmuştur.
Akıllı Kontrat Sistem Dizaynı
Akıllı kontrat yazılırken mutlaka sağlam bir dizayna göre yazılmalıdır. Yapılacak en ufak hatalar, bırakılacak açıklar kontratınızın hack’lenmesine, bir daha değiştirilemez oldukları için de kontratınızın tamamen işlevsiz hale gelmesine sebep olabilir.
- Bu videoda bir oylama uygulaması üzerinden bir akıllı kontratın nasıl dizayn edilebileceği anlatılmış.
- Videoda anlatılan örnek üzerinden yazılı bir kaynak.
- Voting uygulaması part 1
- Voting uygulaması part 2; Bu iki yazı ise aynı örnek üzerinden baştan sonra detaylı bir kontrat dizaynı nasıl yapılabileceğini anlatmış. Bazı kısımları ileri seviye kaçabilir sorun etmeyin. Temel mantığı anlamış olacaksınız.
Buraya kadar gelebildiyseniz şimdi kendi bilginizi test etmeniz için üç ayrı kontrat ödevi vereceğim. Bu 3 kontrat Consensys Academia tarafından oluşturulmuş o kursu bitirirken tamamladığım görevlerdi. Bu 3 kontratı da çalışabilir şekilde yazabilirseniz, kendinizi solidity de belli bir seviyeye gelmiş sayabilirsiniz. Sırasıyla kolaydan zora doğru gidecek ve bu sırada yapmanızı tavsiye ederim.
Kontratın çalışıp çalışmadığını kontrol etmek için normalde vereceğim github reposunda yazılmış testler var, bunları truffle ile isterseniz çalıştırabilirsiniz ama herkesin test çalıştırabilmeyi bilip bilmediğinden emin olamadığım için kontratı remix üzerinden compile ve deploy edip kendinizin test etmesini öneririm. Zaten comment-line’lar ile beraber ne yapmanız gerektiği çok açık bir şekilde yazılmış. Son olarak kontratların çözülmüş yani tamamlanmış halini de en sonda paylaşacağım.
1. Basit Banka Uygulaması
Çözülmemiş Kontrat üzerindeki kodları kopyala yapıştır ile remix üzerinde bir dosyaya yapıştırarak çalışmaya başlayabilirsiniz.
ÇÖZÜM: Çözülmüş Kontrat
2. Tedarik-Zinciri Uygulaması
Çözülmemiş Kontrat kodlarını remix üzerine yapıştırarak çözmeye başlayabilirsiniz.
ÇÖZÜM: Çözülmüş Kontrat
3. Event Ticket Uygulaması
Bu uygulama iki versiyondan oluşuyor. İlk versiyon biraz daha basit olan ve daha az özellik içeren versiyon. İkinci versiyon ise daha zor ve fazla özellik içeren versiyon. Bence her ikisini de mutlaka yapmaya çalışın. İkincisi biraz zor olabilir fakat çözerseniz kendinize ne bildiğinizi kanıtlamış olursunuz.
V1 Çözülmemiş kontrat kodlarını diğerleri gibi remix üzerine alıp çalışmaya başlayabilirsiniz.
ÇÖZÜM: V1 Çözülmüş kontrat
V2 Çözülmemiş Kontrat kodlarını da ilkini çözdükten sonra alıp çalışmaya başlayabilirsiniz. Zaten ilkini çözdükten sonra bunu çözmek biraz daha basit olacaktır diye düşünüyorum.
ÇÖZÜM: V2 Çözülmüş Kontrat
Eğer bu 3 kontratı da gerçekten kendi başınıza yazabildiyseniz, ethereum üzerinde çoğu kontratı yavaş yavaş anlayabilecek, kendi başınıza kontratlar yazmaya başlayabilecek seviyeye gelmişsiniz demektir. Tabi bu sizi rehavete sürüklemesin çünkü solidity ve akıllı kontratlar ile ilgili çok fazla konu var ele alınması gereken. Bu seviyeye gelmeniz artık daha ileri seviyeye gidebileceğiniz anlamına gelmektedir aynı zamanda.
Benim çözümlerimden biraz farklı çözebilirsiniz, yazabilirsiniz. Sadece kontratın istenileni sağladığından emin olun. Bundan sonraki yazıda ise kontratlar hakkında daha ileri konulara geçeceğiz.
Bir sonraki yazıda görüşmek üzere…
Murat ÇELİKTEPE
LinkedIn → celiktepemurat
Twitter → muratctp