My Profile Photo

Mehmet Cem Yücel


Technical Writings.
Architecture, Security, Java, Golang, Devops, Microservices, Spring Boot, Kafka, Distributed Systems and Blockchain


Türkçe Solidity Dersleri -2- Fee, Gas Kavramları

Geliştirme ortamını tanımaya başlamadan önce ilk derste bahsettiğimiz ama biraz daha derinlemesine bahsetme ihtiyacı duyduğum konu ile devam edeceğiz. Bu konu fee’ler ve hesaplanması.

İlk derste iki çeşit account tipi olduğundan bahsetmiştik. Bu hesaplar Externally Owned Accounts(EOA) ve Contract Accounts(CA) olarak adlandırılırlar. Bu hesaplar arası transferler de doğal olarak 2² ihtimalle gerçekleşeceklerdir:

  • Account to account
  • Account to contract
  • Contract to contract
  • Contract to account

Derlenmiş olan bytecode EVM’ler üzerinde çalıştırılır. Bu EVM’ler minerların bilgisayarlarıdır, dolayısıyla tüm minerları gözümüzde canlandırırsak Ethereum networkü aslında global çapta çok büyük bir bilgisayara benzetilebilir. Siz bir contractı deploy ettikten sonra networke bıraktığınız anda binlerce node sizin contractınızı çalıştırmaya başlayacaktır.

Tabii bu çalıştırmanın bir maliyeti mevcut. En basit anlamıyla kodunuz sistem kaynaklarını ne kadar çok tüketiyorsa o kadar çok ücret(fee) ödersiniz. Bu ücrete Ethereum’da Gas ismi verilmektedir. Bu ödemeyi o EVM’lerin tükettiği CPU ve bellek kaynakları için bir kiralama ücreti olarak da düşünebiliriz. Bu ücretin ne şekilde hesaplandığı Ethereum’un yellow paper’ında Appendix B bölümünde detaylıca anlatılmıştır. Dokümana buradan erişebilirsiniz. Eğer Assembly’e aşinaysanız oluşan bytekodun ne şekilde gas tüketeceğini hesaplamak çok zor olmayacaktır, ilerleyen derslerde bunun bir örneğini yapacağız.

Tam burada big O notation konusu değinmemiz gereken bir kavram halini alıyor. Bildiğiniz gibi big O notation yazdığımız kodun kompleksitesini hesaplayabilmemiz için matematiksel bir gösterim yöntemidir. Kodumuzun basit olması çok kritiktir, çünkü otomatik olarak kompleksitesi üssel artan bir algoritmayla yazılan kod çok fazla gas tüketecektir. Bu sebeple contractların mümkün olduğunca basit ve döngülerden uzak şekilde yazılmaları gerekmektedir.

Yazdığımız kodun yapısına göre contractımızın içerisine belirli bir miktar gas eklememiz gereklidir. Adının gas olması aslında bir tesadüf değildir, gerçekten de bu tutar kodunuzun yakıtıdır. Kodunuzun çalışabilmesi için contractınıza yeterli miktarda gas koymanız gerekmektedir. Kodunuz nihayete varıncaya kadar bu gas’ı tüketmeye devam edecektir. Contract’ınıza kodunuzun maksimum tüketebileceği gas tutarlarını belirtebilirsiniz. Bu ve bunun gibi bazı bilgiler contractınızın metadatasını oluşturmaktadır. Kodunuzun çalışması sona ermeden gas tükenirse veya maksimum değere ulaşırsa değişiklikleriniz rollback edilir. Yani nodelardaki ledgerlara değişiklik yansıtılmaz, çalıştırılan kadar değişiklikler iptal edilir.

Değişiklik kelimesi ücret hesaplamadaki kritik kelimelerden bir diğeridir. Contract kodundaki yaptığınız her işlem bu ücret hesabına dahil değildir. Yapılan işlemler eğer blockchain üzerinde etki yaratıyorsa, ledger üzerinde bir değişiklik söz konusuysa, ki biz buna state değişikliği diyoruz, işte o zaman sizden minerlara iletilmek üzere bir gas kesintisi yapılacaktır. İlerleyen derslerde metot tanımlarından, değişken tanımlarından bahsederken gas’tan tasarruf etmemizi sağlayacak ipuçlarını, optimizasyon yöntemlerini de paylaşacağız.

Yazılarımızın devamlılığını sağlayabilmemiz için lütfen yorumlarınızı iletmeyi unutmayınız. Ve bizi LinkedIn ve Facebook’ta takip edin, topluluğumuzun bir parçası olun.




May interest this topics

If you interested in Blockchain Technologies,


comments powered by Disqus