Ethereum’da bir transaction oluşturduğumuzda bunun işlenebilmesi için bir fee belirlememiz gerekiyor. Bu fee ne yazıkki tek bir rakamdan oluşmuyor. Bu yüzden gerçekte harcanan fee miktarını küçük bir matematiksel hesaplama neticesinde bulup transaction datasına eklememiz gerekiyor. Bu işleme geçmeden önce Ethereum’un çalışma mantığından bahsetmemiz gerekiyor. Bunu anladığımızda neden fee’yi tek bir sayı halinde değil de gas price ve gas limit olmak üzere iki değer kullanıldığını daha iyi anlayabiliriz. Ardından bu iki değeri kullanarak nasıl gerçek fee miktarını bulacağımızı anlatacağım.

Ethereumda bildiğiniz üzere Proof Of Work prensibine göre blok onaylaması yapılmaktadır. Bu sebepten dolayı sistemde çok miktarda miner mevcuttur ve bloktaki toplam transaction sayısından gelen toplam fee miktarı bu minerlara dağıtılır. İşte bu dağıtımın yapılabilmesi için bir “maximum” dağıtım miktarına ihtiyaç vardır. Bu miktarın ismine gas limit diyelim. Bu dağıtım miktarı kenarda dursun şimdilik. Bir de her dağıtım için ne kadarlık ETH kullanılacak bunun da belirtilmesi gerekiyor. Buna da gas price diyoruz.

Şimdi gelelim mining işlemine. Diyelim ki sistemde 100000 tane miner var (dünya çapında bu kadar miner mevcut olması muhtemeldir). Biz her dağıtım için kullanılacak olan ETH miktarını istediğimiz gibi belirleyebiliriz ama transactionın bir bloka girebilmesi için minimum ETH miktarını networkten almamız mümkün. Bu eth_gasPrice RPC komutu ile alınabilir. Şuan ETH networkünde kullanılması beklenen minimum gas price değeri 0,0000002 ETH civarlarındadır (yani diğer ifadeyle 200 Gwei, diğer ifadeyle 200000000000 Wei oluyor). Yazım kolaylığı açısından 200 Gwei diyelim. Şimdi gelelim gas limit belirlemeye. Bunu istediğimiz miktarda belirleyebiliriz ama miner sayısı çok yüksek olduğu için ve hepsine yeterli miktarda fee dağıtılabilmesi için bu sayısı da biraz yüksek seçmemiz gerekiyor. Gas limit sadece bir katsayıdır (çarpan) yani herhangi bir türü yoktur. Gas price’ın türü ETH’tır ama gas limit sadece bir katsayı yani çarpan olduğu için herhangi bir türü yoktur. Bu sadece belirtilen gas price’ın kaç kişiye (miner’a) dağıtılabileceğini belirten bir sayıdır. Bu değer genelde 21000 olarak belirlenmiştir. Dediğim gibi bunun bir standardı yok ama miner sayısı yüksek olduğu için ve belirttiğimiz gas price’ın birçok minera dengeli bir şekilde dağıtılabilmesi için bu sayısının biraz yüksek seçilmesi gerekiyor. 10000 seçebilirsiniz, 20000 seçebilirsiniz hatta 50000 bile seçebilirsiniz size kalmış. Fakat tüm dökümanlarda, yazışmalarda, test kodlarında bu değer 21000 olarak seçilmiştir. Biz de genel kabul görmüş bu değeri kullanalım.

Şimdi gelelim bizden mining işleminin sonucuna. Gas price’ımız 200 Gwei, gas limitimiz 21000. Bu iki değeri çarptığımızda bizden düşülecek olan net fee miktarını Gwei cinsinden bulmuş oluruz. Neden ETH değil de Gwei? Çünkü gas price’ın türü Gwe, gas limitin türü yok, sonuç olarak çıkan değer Gwei olmuş olur. 200 * 21000 = 4200000 Gwei miktarında bir fee bizden kesilir. Bu değer bizden düşülen miktardır. Peki miner’lar ne kadar fee alır? Bu da networkün o anki yoğunluğuna bağlı olarak kabaca şu şekilde hesaplanır. Birinci miner’a 10000 adet 200 Gwei = 2000000 Gwei, ikincisine 10000 adet 200 Gwei = 2000000 Gwei, üçüncüsüne de 1000 adet 200 Gwei = 200000 Gwei fee kalır. (Toplam dağıtım miktarının 21000 olduğuna dikkatinizi çekmek isterim.) 2000000 Gwei = 0.002 ETH, 200000 Gwei = 0.0002 ETH yapar. Toplamda bizden kesilen 0.0042 ETH miktarındaki fee üç minera bizim belirttiğimiz maximum limit (gas limit) miktarına bağlı olarak dağıtılmış olur.

Peki bizim yazdığımız yazılımlarda tek bir fee miktarını kullanıcıdan kesilecek şekilde bir gösterim yapamaz mıyız? Tabiki yapabiliriz. Temel formül neydi?

Gas Price * Gas Limit = Fee

Bu formüle göre biz fee’yi belirleyip gas limiti de standart 21000 olarak aldığımızda ihtiyaç duyduğumuz gas price değerini bulabiliriz. Bu durumda formülümüz şu şekilde olur:

 Fee / Gas Limit = Gas price

Örmeğin müşteriden 0.005 ETH değerinde bir komisyon keserek bir transaction oluşturmak istiyorsunuz. Yukarıdaki formüle göre gas price değeriniz:

0.005 / 21000 = 0,000000238095238 ETH

olacaktır. Bu değeri daha kolay yazabilmek için Gwei’ye çevirdiğimizde elde ettiğimiz değer 238.095238 Gwei olacaktır.

Fakat burada mutlaka temas etmem gereken bir nokta var. Eğer belirttiğiniz gas price ve gas limit değeri çok düşükse o zaman bu transaction muhtemelen uzun bir süre onaylanmayacaktır. Hatta yıllar sonra bile onaylanmamış olabilir. Bu probleme takılmamak için minimum gas price değerini bulmanız gerekiyor. Bunu da ETH RPC komutlarından eth_gasPrice ile bulabilirsiniz. Oluşturduğunuz transaciton’ın onaylanabilmesi için gas limit değeri 21000, gas price değeri ise minimum eth_gasPrice değeri olarak ayarladığınızdan emin olun. O zaman transaction’ınız birkaç dakika içerisinde onaylanacaktır.

Sorularınızı veya yanlış yaptığımı düşündüğünüz konuları aşağıya yorum olarak bırakabilir, teknik destek almak isterseniz 0850 308 0335 numaralı telefonu arayabilir veya Whatsapp’tan yazabilirsiniz. Bol kodlamalı günler dileriz.

 


0 yorum

Bir cevap yazın

Avatar placeholder

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.