Ethereum Blok Zinciri(Ethereum hesap yapısı, Gaz Ücreti, Transaksiyonlar, Düğümler, Madenciler ve EVM)

Ethereum Blok Zinciri(Ethereum hesap yapısı, Gaz Ücreti, Transaksiyonlar, Düğümler, Madenciler ve EVM)

Merhaba, Blok zincir yazı dizimizin üçüncü bölümünde Ethereum blok zinciri ve sahip olduğu yapıyı detaylı olarak ele alıyoruz.

Bölüm İçeriği:
1.  Ethereum Blok Zinciri
1.1. Ethereum Blok Zincirinde Durum(State)
1.2. Etherem Blok Zincirinde Hesaplar
1.3. Gaz Ücreti
1.4. Ethereum Blok Zincirinde Transaksiyonlar
1.5. Ethereum Blok Zincirinde Düğümler ve Madenciler
1.6. Ethereum Sanal Makinesi

Bitcoin’ in yaygınlaşması ve kendini kanıtlamasıyla birlikte insanlar bu başarılı sistemi farklı senaryolarda kullanmak istedi. Ancak Bitcoin bir para birimi olarak tasarlandığı için yalnızca varlıkların harcanıp harcanmadığı ile ilgilenir. Bu durum Bitcoin blok zinciri ile uygulama geliştirmeyi çok zorlu kılar. 2013 yılının Aralık ayında Vitalik Buterin, Ethereum’un arkasındaki fikri anlatan bir teknik dokümanı yayınladı. Ethereum blok zinciri icerisinde yerleşik bir Turing Complete programlama diline sahiptir[1].Çok sınırlı bir betik diline sahip olan Bitcoin’den farklı olarak, Ethereum, keyfi ve sınırsız karmaşıklıkta kod yürütebilen sanal bir makine çalıştıran genel amaçlı programlanabilir bir blok zinciri olarak tasarlanmıştır [2].

1.1. Ethereum Blok Zincirinde Durum(State)

Harcanmamış transaksiyon çıktıları baz alınarak hesap bakiyelerinin saptandığı Bitcoin’den farklı olarak Ethereum’da haritalama yöntemi ile hesap bakiyeleri saklanmaktadır. Bakiyelerin saklandığı haritalamada hesap adresleri benzersiz adres olarak kullanılır ve her bir adrese karşılık olarak bir hesap objesi vardır.

1.2. Etherem Blok Zincirinde Hesaplar

Ethereum’da Bitcoin’in aksine 2 adet hesap türü vardır. Bunlar Harici olarak sahip olunan (Externally Owned) hesaplar ve sözleşme (Contract) adı verilen sözleşme hesaplarıdır. Harici olarak sahip olunan hesaplar nonce ve bakiye verilerini tutarken, sözleşme hesapları nonce ve balance değerlerine ek olarak kod hash (code hash) ve depolama ağacı (storage trie) verilerini tutar.

Şekil 1.1. Ethereum hesap yapısı[3].

Nonce: İş kanıtı konsensüs mekanizmadaki kullanımları dışında Ethereum’ da nonce değeri bir hesabın gönderdiği tüm transaksiyonların sayısını ifade eder ve sıfırdan başlar. Sözleşme hesaplarında ise nonce değeri söz konusu hesabın oluşturduğu hesapların sayısını ifade eder.

Bakiye (Balance): Harcanmamış transaksiyon çıktısına gerek kalmadan bir hesabın sahip olduğu bakiyeyi ifade eder.  Ethereum’da hesap bakiyeleri Wei birimi cinsinden ifade edilir. 1 eth 1e+18(10 üzeri 8) Wei eşitliği vardır.

Kod hash (Code Hash): Yalnızca sözleşme hesaplarında bulunan kod hash, hesabın Ethereum sanal makinesinde yer alan kod verisinin hash değeridir. Sözleşme hesapları herhangi bir çağrı aldığında bu kodlar tetiklenir ve programlandığı şekilde çalışır. Diğer hesap bileşenlerinin aksine Kod Hash değiştirilemez.

Depolama Kökü(Storage Root-Hash): Sözleşme hesaplarındaki değişkenleri ve karşılık gelen değerleri tutar. Hesap ağacının 256 bitlik kökünden oluşur. Ayrıca harici olarak sahip olunan hesaplar için boş bir string değerine eşittir.

1.3. Gaz Ücreti

Her blok zincir gibi Ethereum blok zincirinde de bir işlemi gerçekleştirebilmek için blok madencilerine veya blok onaylayıcılarına yaptıkları iş karşılığında belli bir miktar ücret ödenir. Ethereum blok zincirinde madencilere ödenen ücret gaz ile ifade edilir. Gaz ücreti Ethereum’ un kendi para birimi olan ‘Ether’ ile ödenir gwei adı verilen gaz birimi 1 Gwei(giga-wei) 0.000000001 (10-9) Ether’ a eşittir.

1.4. Ethereum Blok Zincirinde Transaksiyonlar

Ethereum blok zincirinde transaksiyonlar normal transaksiyonlar, sözleşme konuşlandırma transaksiyonları ve sözleşme tetikleme transaksiyonları olarak üçe ayrılırlar.  Normal transaksiyon herhangi iki cüzdan arasında gerçekleşen varlık transfer işlemini gerçekleştirir. Sözleşme konuşlandırma transaksiyonları Ethereum blok zincirinde sözleşme konuşlandırmak için kullanılır ve bu tip transaksiyonlarda sözleşme kodu da yer alır. Sözleşme tetikleme transaksiyonları ise daha önce ethereum blok zincirinde konuşlandırılmış bir sözleşme ile etkileşime girmek için kullanılır.

Ethereum blok zincirindeki herhangi bir türde transaksiyon gerçekleştirebilmek için aşağıdaki bilgilerin sağlanması gerekmektedir.

Alıcı (Recipient): Normal transaksiyonlarda alıcı varlık transferi yapacağımız kişinin adresidir. Herhangi bir akıllı sözleşme kodunu çalıştırmak istediğimizde ise alıcı sözleşmenin adresidir.

İmza (Signature): Transaksiyonu gerçekleştirmek isteyen kişinin transaksiyonu onayladığını belirtir. Transaksiyon gerçekleştirebilmek için özel anahtarımız ile transaksiyonu imzalayıp onaylamalıyız.

Miktar (Amount): Transaksiyonu gönderen kişiden alıcıya gönderilecek olan Ether miktarını belirtir. Ether ethereum blok zincirinin para birimidir.

Veri (Data): Normal transaksiyonlarda opsiyonel iken sözleşmeler ile etkileşime giren transaksiyonlarda gerektiği takdirde veri kısmının doldurulması gerekir. Akıllı sözleşmeler veri ismini okur ve ona göre aksiyon alır.

Gaz limiti (Gas Limit): Transaksiyonun gerçekleştirebilmesi için madencilere ödenen komisyon miktarıdır.

Ethereum blok zincirinde gerçekleşen transaksiyonlar için transaksiyon dekontu (transaction receipt) oluşur. Bu dekont transaksiyon ile ilgili bilgileri içerir ve doğrulama yapmaya yarar. Transaksiyon dekontunun içerdiği bilgiler şu şekildedir:

ethereum transaksiyon dekontu

Şekil 1.2. Transaksiyon dekontu.

Blok numarası: Transaksiyonu içeren bloğu belirtir.

Sözleşme adresi: Etkileşime girilen sözleşmenin adresidir. Eğer herhangi bir etkileşime girilmeden transaksiyon işlemi gerçekleştirilirse sözleşme adresi herhangi bir değere sahip olmaz.

Blok hash değeri: Transaksiyonu içeren bloğun hash değeridir.

Harcanan gaz miktarı: Transaksiyonun bir blok içerisine alınabilmesi için madenciye ödenen gaz miktarını GWEI biriminden belirtir.

Kök: Ethereum durum ağacının (state root) transaksiyon gerçekleşmeden önce kök değerini ifade eder. Başka bir deyişle transaksiyon gerçekleşmeden önceki Ethereum durumunu belirtir.

Transaksiyon hash: Transaksiyonun tüm değerlerinden oluşan hash değeridir.

1.5. Ethereum Blok Zincirinde Düğümler ve Madenciler

Ethereum, blokları ve işlem verilerini doğrulayabilen düğüm(node) olarak bilinen bir yazılım çalıştıran dağıtılmış bir bilgisayar ağıdır.[4] Başka bir deyişle düğümler Ethereum ağına katılan bilgisayarlara verilen isimdir. Sahip olduğumuz node Ethereum blok zincirindeki tüm transaksiyonları hali hazırda kullanılan konsensüs mekanizmasına karşı kendi başına doğrular.

Geth adı verilen Ethereum tarafından geliştirilmiş olan istemci yazılımını çalıştırarak Ethereum ağına katılınabilir. Geth aynı zamanda Ethereum Sanal Makinesi(Ethereum Virtual Machine) adı verilen sanal makineyi içerir. Ethereum blok zincirinde düğüm olmanın bazı faydaları şunlardır:

Ethereum ağında doğrulama işlemine katılarak diğer düğümlere bağlı kalmadan doğrulama yapabiliriz. Ağdaki durum sayısı ne kadar fazla olursa blok zincir bir o kadar merkeziyetsiz olur gibi bir çıkarım da yapabiliriz.

Merkeziyetsiz uygulamalarda kendi oluşturduğumuz düğümü kullanarak hesabımızın bakiye durumunu ve özel anahtarı gibi bilgileri koruyabiliriz. Herhangi bir Ethereum düğümü ile merkeziyetiz uygulamamızı çalıştırabiliriz ancak kimi kötü niyetli yazılımlar bilgilerimize erişebilir.

Transaksiyon değişim işlemlerinde zamandan kazanç sağlayabiliriz. Kimi zaman bir transaksiyonun herhangi bir blok içerisine alınması uzun zaman alabiliyor. Kullanıcılar genellikle Ethereum cüzdanlarında bulunan hızlandır butonu ile mevcut gaz ücretini artırarak yeni bir transaksiyon gönderirler. Kullanıcılar kendi özel düğümlerini kullandıklarında ise bir transaksiyonu başka bir transaksiyon ile hızlı bir şekilde değiştirebilirler.

Ethereum blok zincirinde yeni blokların zincire eklenmesini sağlayan madenciler tam düğüm(full node) çalıştırmak zorundadır. Bu yüzden maden düğümü olarak tanımlanırlar. Normal düğümlerden farklı olarak matematiksel işlemleri de çalıştırarak yeni blokların eklenmesinde rol alırlar.

Şekil 1.3. Ethereum kullanıcı düğüm ve ağ ilişkisi[5].

1.6. Ethereum Sanal Makinesi

Ethereum’da doğrulama yapmaya yarayan düğümler aynı zamanda Ethereum Sanal Makinesi(Ethereum Virtual Machine) adı verilen sanal makineyi de içerirler. Bu sanal makine Ethereum blok zincirinde geliştirilen uygulamaları çalıştırmaya ve Ethereum’ un mevcut durumunun takibini yapar. Ethereum’da uygulama geliştirmek için Akıllı sözleşmeler (Smart Contracts) Solidity ve Vyper gibi yüksek seviyeli diller tarafından programlanır. Programlanan bu sözleşmeler derleyici tarafından EVM’ nin anlayabileceği şekilde bayt koda dönüştürülür. Bayt koda dönüştürülen sözleşmeler transaksiyonlar ile blokzincire kaydedilir. Geth yazılımını çalıştıran herkes Ethereum’da konuşlandırılan sözleşmenin bir kopyasına sahiptir.

Konuşlandırılan sözleşme ile transaksiyonlar yardımıyla etkileşime geçilir. Bir akıllı sözleşme ile etkileşime geçtiğimizde tüm sanal makineler sözleşmemizin bir kopyasını blok zincirinden çeker ve bayt koddan oluşan sözleşmemizi çalıştırırlar. Eğer sözleşmemizdeki fonksiyon Ethereum’da durumu değiştiren bir fonksiyon ise EVM Ethereum’ un mevcut durumunu değiştirir. Durum değiştiren fonksiyonlara örnek olarak bir jeton sözleşmesinde yeni jeton üretilmesi verilebilir.

Kaynaklar

[1]      Vujičić, D., Jagodić, D., & Ranđić, S. (2018, March). Blockchain technology, bitcoin, and Ethereum: A brief overview. In 2018 17th international symposium infoteh-jahorina (infoteh) (pp. 1-6). IEEE.

[2]     Antonopoulos, Andreas M., and Gavin Wood. Mastering ethereum: building smart contracts and dapps. O’reilly Media, 2018.

[3]     https://ethereum.org/tr/developers/docs/accounts/

[4]     https://ethereum.org/en/developers/docs/nodes-and-clients/

[5]      Nguyen, C. T., Hoang, D. T., Nguyen, D. N., Niyato, D., Nguyen, H. T., & Dutkiewicz, E. (2019). Proof-of-stake consensus mechanisms for future blockchain networks: fundamentals, applications and opportunities. IEEE Access, 7, 85727-85745.

4. Bölüm ->



Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir