Murat Can Bastug
15 min readMar 8, 2022
Blockchain

Bitcoin Nasıl Çalışır?

Blockchain teknolojisiyle ilgili temel bilgilere sahip değilseniz önceki yazımızı okuyunuz.

Öncelikle Blockchain teknolojisi ile Bitcoin’in farklı şeyler olduğunun farkına varmamız gerekiyor. Bitcoin, Blockchain teknolojisi üzerine yazılmış ilk “cryptocurrency”dır. Peki ne demek bu cryptocurrency? Currency para birimi demektir. Cryptocurrency de adından da anlaşılabileceği gibi Türkçeye kripto para olarak çevrilebilir. Bu noktada incelememiz gereken iki yeni kavram bizi karşılar: Kripto ve Para.

- Kripto, matematiğin kriptografi dalını kullanarak şifrelenen ögelerdir. Bu kısma çok daha geniş açıdan bakacağız.

- Para ise toplumun bir değişim aracı olarak kullanmak amacıyla kurgulamış olduğu bir unsurdur. Para dendiğinde aklımıza ne kadar üzerinde değeri yazan kağıt unsurlar gelse de bu kurgu temelde sadece sayılardan ibarettir ve toplumun tamamının onu kabul etmesiyle çalışır. Burada dikkat etmemiz gereken ifadeler ise “kurgu” ve “toplumun kabulü”dür. Ortada bir anlaşma var ve bu anlaşmanın kurallarını gündelik hayatta iletişime geçebileceğiniz her insan kabul ediyor. Bu sayede de işlemleriniz aksamadan devam edebiliyor. Şu anda herhangi birinin bu anlaşmayı reddetmesinin mümkün olmadığı gibi geçmişte de kimse kendisine bir kağıt parçası uzattığınızda size 1 kilo pirinç vermezdi.

Kripto paralar da tamamen aynı prensip üzerine inşa edilmiştir. Kendisine istediğiniz ismi verebileceğiniz dijital bir birim oluşturur ve bu birimin varlığını insanlara kabul ettirirseniz artık bu birim üzerinden alışveriş yapabilirsiniz.

Para için geçerli olan kurgu ve toplumun kabulü ifadeleri kripto paralar ve blockchain teknolojisi için de geçerlidir. Sistem Blockchain ağında yer alan bir değiştirelemeyen ve dağıtık olarak tutulan bir anlaşmayı -ki biz buna akıllı kontrat diyoruz- o ağdaki insanların kabul etmesi üzerine çalışır. Peki gelelim asıl konumuza:

Blockchain ağı nasıl çalışıyor da bir akıllı sözleşme oluşturup bu ağa yüklüyoruz?

Önceki yazımızda Blockchain teknolojisinin merkeziyetsizliği nasıl sağladığını ve kabaca nasıl çalıştığını incelemiştik. Şimdi biraz daha teknik detayları inceleyelim. Sisteme dahil olan herkesin bir muhasebe defteri gibi işlemlerin kaydını tuttuğundan ve bu kayıtları tutarken önce bloklara yazdıklarından sonra da bu blokları ardı ardına bağlayarak bir blok zinciri oluşturduklarından bahsetmiştik. Şimdi blockchain’de işlem yapmak istediğinizde nasıl bir yolculuk izlediğinizi adım adım inceleyelim: Varsayalım ki Murat, Gökçe’ye 1 Bitcoin yollamak istiyor.

Transaction Özeti
Şekil 1 Transaction Özeti

Bu işlemi yapmak için Gökçe’nin cüzdan adresini öğrendi ve kendi cüzdanına girerek Gökçe’nin adresine 1 BTC yollama talebini verdi. Sistem öncelikle Murat’ın en az 1 BTCsahibi olup olmadığına bakacaktır. Eğer Murat 1 veya daha fazla BTC’ye sahipse yukarıdaki gibi bir işlem oluşturulacaktır. Bu işlemi incelemek gerekirse gönderim miktarı, zaman damgası, gönderen adres ve alıcı adres bilgilerini görebiliriz. Ayrıca tüm bu işlemlerin bir de Hash kodunu görebiliriz. Hash’in nasıl üretildiğini detaylı olarak incelemek için bakınız. Bu yazımızda anlatıma devam etmek adına çok küçük bir giriş yapmak istiyorum.

Hash Fonksiyonuna Giriş

Hash bir fonksiyondur ve blockchain ve birçok güvenlik sisteminde de şifreleme yapmak için kullanılır. Örneğin “HelloHUCHAIN” gibi bir ifademiz olsun ve bu fonksiyona sokalım:

Hash(HelloHUCHAIN) -> 334ac28ba640f606f575955f6ed0a60113542e308acf433f33206ecf1f850868

Hash(helloHUCHAIN) -> 8462154d98795d9dfa1e7f84beecf29ee800663097f5864c20d91403bc1085bf

Hash(HellöHUCHAIN)-> a5ca8cb99b3879f0eb3f4e0c8b789247b02eecc65d53894d75850637a7d6542f

Gördüğünüz gibi ifademdeki bir harfin bile değişmesi tamamen farklı bir çıktı almama yol açıyor. Kabaca Hash fonksiyonları bu şekilde kendilerine verilen ifadeyi şifrelemek için kullanılır. Blockchain ve kriptografinin bu kadar iç içe olmasının sebebi de Hash fonksiyonlarıdır. Elde ettiğimiz hash değerlerinden içeriğe ulaşmak ise mümkün değildir. Örneğin:

Hash(334ac28ba640f606f575955f6ed0a60113542e308acf433f33206ecf1f850868) -X-> HelloHUCHAIN

Şimdi örneğimize geri dönelim.

Örneğimizdeki hash kodu da işlem özetimizin tamamının fonksiyona sokulmasıyla elde edilen bir değerdir. Şimdi elimizde gönderen kişi, alıcı, gönderim tutarı, gönderim zamanı ve tüm bu bilgilerin hash fonksiyonuna sokulmasıyla elde edilmiş olan hash kodu var. Tüm bu bilgilerin bir araya gelmesiyle bir “transaction” (işlem) oluşuyor. Bu transaction öncelikle bellek havuzu dediğimiz bekleme alanına alınır. Buradaki işlemler henüz doğrulanmamış ve blok zincire eklenmemiş işlemlerdir. Daha sonra “miner” (madenci) adını verdiğimiz birisi gelip bu havuzdan belli sayıda işlem alarak bir blok oluşturur.

Blok Yapısı
Şekil 2 Blok Yapısı

Şimdi de bir blokta bellek havuzundan çekilen işlemlere ek olarak hangi bilgilerin bulunduğunu inceleyelim. Blok yüksekliği, bloğun zincire eklenen kaçıncı blok olduğunu ifade eder. Kazıyıcı, bu bloğu oluşturan miner’dır. Blok ödülü ise bu bloğu oluşturan miner’ın aldığı ödüldür. Ayrıca zaman damgası ve işlem sayısı gibi ifadeleri de görmekteyiz. Şimdi asıl konumuz olan bloğun oluşturulduktan sonra onaylanma ve böylece ağa katılma sürecine gelelim.

Bir blok oluşturulduktan sonra içerdiği işlemler ve bir önceki bloğun hash değeriyle birlikte hash fonksiyonuna sokulur ve ağın o anki zorluk değerine uygun bir hash değeri aranır. O anki “zorluk değeri” ise elde edilmeye çalışılan blok hash değerinin başından kaç basamağının 0 olması gerektiğinin ifadesidir. Bu arama ise bloğun içine yerleştirilen Nonce (yalnızca bir kez kullanılan sayı) değerinin bir bir arttırılmasıyla aranır. Bloktaki ifadelerinin tamamı aynı ve değiştirilemez olduğundan yeni bir hash değeri elde etmek için bu sayı değiştirilir. Bu sayede bloğun kaç defa hash fonksiyonuna sokulduğu da sayılmış olur. Yukarıdaki blokta da zorluk ve nonce değerlerini görebilirsiniz. Ayrıca belirlenen zorluk kavramından dolayı hash değerinin baştan 19 hanesinin 0 olduğunu da görebiliriz.

Adım Adım Blockchain

Biraz karışık geldiğinin farkındayım. Bu işlemleri neden yaptığımızı tek tek inceleyeceğiz fakat gelin biraz ara verip bir demo üzerinden anlattıklarımızı inceleyelim.

Blok Yapıları İnceleme, Adım-1
Şekil 3 Blok Yapıları İnceleme, Adım-1

Öncelikle ilk blok kendinden önce bir blok olmadığı için önceki blok değerini tutamaz. Bu sebeple “Genesis Block” olarak adlandırılır ve içerisine işlem alsa da bu işlemleri doğrulayamaz.

Blok Yapıları İnceleme, Adım-2
Şekil 4 Blok Yapıları İnceleme, Adım-2

Örneğin yeni bir blok oluşturduğumda nonce değeri 1 ve işlemlerin hash’ini aldığımızda yukarıdaki değeri elde ediyoruz. Fakat blok şu anda kırmızı renkte ve doğrulanmadı. Çünkü ağımızdaki zorluk değerimiz blok hash değerlerinin baştan 4 hanesinin 0 olmasını gerekli kılıyor. Mine işlemini başlatıyorum:

Blok Yapıları İnceleme, Adım-3
Şekil 5 Blok Yapıları İnceleme, Adım-3

Sistem nonce değerini birer birer arttırdı ve 65772 değerinde zorluk şartını sağlayan bir hash değerini bulabildi. Böylece bu blok onaylanmış oldu ve bulunan nonce ve hash değerleri ile ağa ilan edildi.

Blockchain ağındaki bloklar çok daha fazla transaction içerdikleri ve zorluk değerleri de daha büyük olduğu için bir bloğun mine edilmesi ve doğru nonce değeri ve hash değerinin bulunması zaman almaktadır. Farklı ağlarda bu süre değişken olsa da Bitcoin için bir bloğun doğrulanma süresi ortalama 10 dakikayken Ethereum için bu süre ortalama 15 saniyedir. Bu süre boyunca bloğu oluşturan ve doğrulamayı başaran ilk miner yukarıdaki örneğimizde olduğu gibi blok ödülünü kazanır. Bitcoin için şu anda blok ödülü 6.25 BTC olarak belirlenmiştir.

Bitcoin ağındaki her bir miner bellek havuzuna girer ve bir blok oluşturacak kadar transaction’ı toplar. Arından da ağın o anki zorluğunu sağlayacak bir hash değeri bulana kadar nonce değerini arttırmaya başlar. Uygun nonce değerini ilk bulan miner oluşturduğu bloğu ve bulduğu nonce değerini ağa ilan eder. Bir blok ilan edildiğinde diğer tüm miner’lar o ana kadarki yaptıkları tüm işleri bırakırlar ve ilan edilen bloğun ve nonce değerinin doğru olup olmadığına bakarlar. Bu kontrolü yapmak ise blok ve nonce değerini bir kere hash fonksiyonuna sokarak elde edilen hash değerinin o anki zorluğu sağlayıp sağlamadığına bakılmasından ibaret olduğu için çok kısa sürer. Blok belli bir sayıda onay aldıktan sonra ağdaki herkesin zincirine eklenir. Böylece o blokta yer alan işlemler de doğrulanmış ve gerçekleşmiş olur. Tüm bu işlemleri yapan miner da blok ve ücret ödülünü kazanır.

Bu ödüllerin nereden geldiğine geçmeden önce işini bırakan diğer miner’ların kazancından bahsetmek istiyorum. Doğru nonce değerini bulan ilk miner ödülü kaparken diğer miner’lar hiçbir şey alamazlar ve o ana kadarki tüm işlemleri boşuna gider. İşte tam da bu sebeple Bitcoin mining’i çok fazla enerji tüketimi yapmaktadır. Tüm ağ blok doğrulamaya çalışırken sadece bir kişinin işlemleri geçerli olmakta diğer herkesin harcadığı enerji ise boşa gitmektedir. Bu kısma yazının sonunda daha detaylı değineceğiz.

Şimdi dönelim ödüllere: Ücret ödülü blokta işlemi bulunan kullanıcılar tarafından karşılanırken blok ödülü sistem tarafından karşılanır.

Bir kullanıcı Bitcoin ağında bir transaction yapacağı zaman aynı bankalardaki para gönderme işlemlerinde olduğu gibi belli bir işlem ücreti öder. Bu ücret “gas fee” olarak adlandırılır ve yapacağınız işlemin karmaşıklığıyla doğru orantılı olarak belirlenir (Blockchain teknolojisiyle para göndermek dışında da çok fazla işlem yapılabilir. Hem bu işlemleri hem de bu işlemlere göre belirlenen fee’leri programlama kısmında daha detaylı inceleyeceğiz) Her bir miner da doğruladığı bloktaki işlemlerin işlem ücretlerini toplar. Ayrıca kullanıcı işinin hızlıca hallolmasını istediğinde bu fee’yi arttırabilir. Çünkü miner’lar bellek havuzundan işlem seçerlerken bloktan elde edecekleri işlem ücretinin daha fazla olmasını istedikleri için genelde yüksek fee ödemeyi kabul eden işlemleri daha önce seçerler.

Blok ödülü ise sistem tarafından yeni basılan Bitcoin’ler ile karşılanır. Aynı merkez bankalarında yeni paraların basılması gibi Bitcoin’de de yeni Bitcoin’ler basılır ve bu basılan Bitcoin’ler miner’lara blok ödülü olarak verilir. Fakat merkez bankalarının aksine Bitcoin’de toplam ne kadar Bitcoin basılacağı (toplam arzı) önceden belirlenmiştir. Bu değer Bitcoin için Nakamoto tarafından ~21M olarak belirlenmiştir ve 2140 yılında sonuncusu çıkartılacaktır.

Bu doğrultuda da blok ödülleri dönem dönem ikiye bölünerek azaltılır. Ayrıca ağdaki miner sayısı ya da miner’ların doğrulama hızı arttıkça zorluk değeri arttırılır ve bir bloğun doğrulanma süresi 10 dakikada sabit tutulmaya çalışılır. Böylece de Bitcoin basımı yavaşlatılır.

2140 yılında son Bitcoin çıkarıldıktan sonra miner’ların ücretini kim ödeyecek ve sistemin devamlılığı nasıl sağlanacak?

Bitcoin’in arzı bahsettiğim sebeplerden ötürü sürekli azalmaktadır ve bu doğrultuda da yatırım tavsiyesi olmamakla birlikte değerinin artacağı düşünülmektedir. Bu sebeple de blok ödülü tamamen ortadan kalktığında bile işlem ücretlerinin miner’lar için yeterli olacağı düşünülmektedir.

Zorluk değeri neden var ve biz bunu bulmakla neden zaman harcıyoruz?

Bilgisayarlar çok hızlı çalışırlar ve bir insana göre çok hızlı işlemler yapabilirler. Fakat bazı durumlarda belirli bir ölçekte daha yavaş çalışmalarını isteyebiliriz.

Öncelikle kötü niyetli insanların bu sistemde ne gibi açıklar bulabileceğini düşünelim: Mesela daha önce de üzerinde durduğumuz gibi geçmişte harcanan bir paranın harcanmamış gibi gösterilmeye çalışılması büyük bir sorun yaratacaktır. Örneğin Burak, Melih’ten 1 BTC karşılığında bir ev alsın ve hemen ardından geriye dönüp yolladığı 1 BTC’nin kaydını tutan bloğu bulup bu kaydı 0.5 BTC ile değiştirmek istesin. Eğer Burak bunu yapabilirse Melih’ten aldığı ev karşılığında harcamış olduğu 0.5 BTC’yi tekrar harcayabilir. Bu soruna da “double spending“ (çift harcama) deniyor.

Fakat Blockchain teknolojisi bu sorunun önüne geçmiştir. Çünkü Burak geriye dönüp bir bloktaki bir işlem satırını değiştirmek istediğinde o bloğun hash değeri tamamen değişmiş olur ve Burak’ın o anki zorluk değerini karşılayabilecek yeni bir hash değeri bulana kadar nonce değerini hesaplaması gerekir. Diyelim ki Burak çok güçlü bir bilgisayara sahip ve biraz da şansı yaver gitti. Sonunda hızlıca yeni nonce değerini buldu. Fakat hatırlarsanız her blok aynı zamanda kendinden bir önceki bloğun hash değerini de içinde barındırıyordu. Eğer Burak örneğin 1000. bloğun hash değerini değiştirirse artık bu bloktan sonraki tüm blokların da içerikleri değişecektir. Dolayısıyla hash değerleri de değişecek ve yeni nonce değerlerinin hesaplanmaları gerekecektir. Yani özetle Burak zincirdeki herhangi bir blokta yer alan bir işlemi değiştirmek isterse o bloktan itibaren var olan tüm blokların nonce değerlerini yeniden bulmak zorunda kalacaktır.

Diyelim ki Burak bu blokların nonce değerlerini de hesapladı ve o anki zincir uzunluğuna doğru bir şekilde tekrar ulaştı. Artık ağın çoğunluğunu kendindeki zincirin doğru olduğuna inandırması gerekmektedir. Fakat Burak tüm bu işlemleri yaparken tüm ağ yeni bloğu bulup zincire eklemek için bir savaş vermektedir. Dolayısıyla Burak 1000. bloğu ve ondan sonra gelen 3 bloğu yeniden hesaplayana kadar ağa 4 yeni blok daha katılacak ve artık güncel zincirin boyutu 1007 olacaktır. Görüldüğü üzere Burak hiçbir zaman geçmişteki bir bloğu değiştirerek en güncel zincirin tamamını hesaplayamayacak ve her zaman geriden gelecektir.

Blockchain ağındaki node’lar da her zaman en güncel yani en uzun olan zinciri doğru olarak kabul edecektir. Yani Burak 1003 bloğu bulunan hileli bir zincirle ağdaki herhangi birini tarafına çekmeye çalışsa bile o kişi o anki güncel ve doğru olan 1007 bloklu zinciri daha uzun olduğu için tercih edecektir.

Buraya kadar Bitcoin’in teknik olarak nasıl çalıştığını anlamaya çalıştık. Genel olarak bu çalışma şekline “proof of work” ismi verilmektedir. Fakat Blockchain ne Bitcoin’den ne de kripto paralardan ibarettir. Temel prensipleri üzerine inşa edilen yapıda tüm kurallar geliştirici tarafından belirlenir. Örneğin Bitcoin’in toplam arzı 21M ile sınırlıyken sınırsız arza sahip bir kripto para geliştirilebilir ya da miner ödülleri bambaşka bir sistemle belirlenebilir. Örneğin Ethereum blok doğrulama süresini 15 saniyede tutmaya çalışırken bambaşka bir çalışma sistemi kullanır. Bu sistemlere de “consensus” adı verilir. Günümüzde birçok farklı consensus birçok farklı soruna çözüm aramaktadır.

Consensus

Consensus kavramına geçmeden önce bilmemiz gereken birkaç kavram daha var. Öncelikle blockchain’den sürekli bir ağ olarak bahsediyoruz. Bu ağda yer alan kişiler birbiriyle nasıl iletişim kuruyor (consensus) veya bu ağ tam olarak neye benziyor?

Örnek bir ağ diyagramı
Şekil 6 Örnek bir ağ diyagramı

Bu ağa dahil olan ve mesajları oluşturabilen, alabilen, iletebilen veya doğrulayabilen noktalara node (düğüm) ismi verilir. Şekilde gördüğünüz noktaları bu şekilde düşünebiliriz. Farklı amaca hizmet eden ağlarda node’lar farklı görevler üstlenebilirler. Şimdi Bitcoin ağındaki node’ların ne gibi görevler üstlendiğini inceleyim:

- Full (Tam) Node’lar

Tam düğümler, Blockchain ağındaki işlemlerin mevcut consensus protokolüne uygun olarak yapılmasını sağlarlar. Bu sebeple ağın güvenliğinden ve kontrolünden sorumludurlar ve ağ için hayati önem taşırlar. Tam node’lar genesis bloktan itibaren tüm blok zincirinin kopyalarını tutabilirler ve bu zincirin ağa yayılmasından da sorumlu olabilirler. Fakat tüm node’ların bu kayıtların tamamını tutmasına gerek yoktur. Tüm kayıtları tutan ve bu kayıtları tüm ağa yayan ve diğer diğer tüm düğümleri birbirine bağlayan düğümlere süper node denir. Bir süper node, full node’a göre daha fazla veri tuttuğundan ve daha fazla veri iletip aldığından daha fazla işlem yapar ve 24 saat çalışır. Bir Bitcoin tam node’u farklı yazılımlar kullanarak çalışabilir. Fakat en yaygın kullanılan yazılım Bitcoin Core’dur.

- Madenci (Miner) Node’lar

Miner node’lar daha önce de bahsettiğimiz mining işlemlerini yaparlar ve karşılığında ödüller kazanırlar. Miner’lar Bitcoin Core’la birlikte farklı yazılımlar da çalıştırırlar ve güçlü donanımlara ihtiyaç duyarlar. Bazı miner’lar birleşerek mining havuzları kurarken bazı miner’lar da solo (tek) çalışırlar.

- Light (Hafif) Node’lar

Light node’lar genelde tam node’lara bağlı olarak dururlar ve blockchain ağının tüm kayıtlarını tutmak yerine bu kayıtların hash değerlerini bir merkle ağacında tutarlar. (Bu yapının nasıl çalıştığına detaylı olarak incelemek için bakınız.) Böylece çok daha küçük veriler tutarlar ve ağdaki iletişim doğrudan kendi üstlerinden değil de bağlı oldukları tam node üzerinden gerçekleştiği için çok güçlü donanımlara da ihtiyaç duymazlar.

Simplified Payment Verification (SPV) (Basitleştirilmiş Ödeme Doğrulaması) yaparlar. Bu doğrulama da bir işlemin bir bloğa girerek doğrulanma ve tüm ağa yayılma sürecinin çok uzun sürmesinden dolayı yapılır. Çok daha hızlıdır ve daha önce de bahsettiğimiz double spending işleminin önüne geçmeye çalışır. Merkle ağaçlarını kullanırlar. (Merkle ağaçları yazımızda detaylı olarak çalışma prensiplerini inceledik.)

Bitcoin ağında şu anda görünür olarak 14900 node bulunmaktadır. (https://coin.dance/nodes) Bu sayıya ek olarak sadece ağı dinleyen ya da bir güvenlik duvarı arkasında çalışan node’lar da mevcuttur.

Bu node’lar birbiri ile nasıl iletişim kuruyorlar?

İşte bu noktada consensus kavramı karşımıza çıkıyor. Her ağ farklı bir yöntem kullanarak kendi consensus protokolünü oluşturabilir. Bu protokoller ağdaki herkesin bir şekilde bir karar üzerinde anlaşmasını gerekli kıldığından bunu daha basite indirgeyerek bir topluluktaki insanların karar verme mekanizması üzerinden işleyeceğiz.

Örneğin arkadaş grubunuzla bir pazar sabahı buluştunuz ve bir şeyler yapmak istiyorsunuz. Ancak ne yapacağınıza karar veremiyorsunuz ve o anda bir arkadaşınız HUCHAIN standına gitmeyi ve bedava pizzalardan almayı öneriyor. Bu öneri üzerinde fikir birliği yapabilmek için akla ilk gelen yöntem herkesin fikrinin alınmasıdır. Herkes birbiriyle bir şekilde konuşur ve bilgi üzerinde fikir birliği sağlanır. İşte bu yönteme Point-to-Point (PPP) (noktadan noktaya) iletişim protokolü denir. Bu protokolü kullanarak çalışan konsensüs ise Paxos Consensus’tur.

Blockchain ağına bu protokolü uyarlamaya çalışırsak da tüm node’ların birbiriyle iletişim kurabildiği bir ağ hayal edebiliriz. Fakat bu ağın bazı sorunları vardır. Örneğin tüm node’ların birbiriyle iletişim kurması tüm node’ların ağdaki diğer tüm node’ların IP adresini bilmesini anlamına gelmektedir. Ağdaki tüm node’ların IP adreslerinin bilinmesi ise tüm node’lara aynı anda DDOS saldırısı (Bir IP adresine çok kısa aralıklarda yüksek miktarda istek gönderilmesine dayanan saldırılar) düzenlenebilmesine yol açabilir. Saldırılar sonucu tüm node’lar aynı anda zarar görürse ağın güvenilir bir şekilde çalışması tehlikeye girebilir.

Bir diğer sorun ise ağa duyurulan bir bilginin tüm node’lar ile tek tek paylaşılmasının gerekli olmasıdır. Bu şart altında ağ yüksek hızda karar alamayabilir ve büyük ölçekli hizmetler sunamayabilir. Paxos Consensus günümüzde hala kullanılmaktadır.

Nakamoto ise 2008 yılında Lamport’un 1982 yılında duyurduğu Paxos Consensus’unun sorunlarını çözen ve Gossip (Dedikodu) Protokolü ile çalışan Nakamoto Consensus’unu duyurmuştur.

Gossip protokolünü ise yakından bildiğimiz başka bir senaryo üzerinden inceleyelim: İlk okulda çöp kutusunun etrafında toplanıp kalem açma ritüelleri düzenlediğimiz zamanları hatırlayanlar olacaktır. Herkes sınıftan rastgele bir veya birkaç kişiyle denk gelip sınıfta yaşananlar hakkında fısıldaşırdı. Bilgisayar terimleri de bu tarz bir protokolü rastgele eş seçimi olarak tanımlar. Bu da Paxos Consesus’undaki hem her bir node ile bağlantı kurulması zorunluluğunu ortadan kaldırdığı için tüm ağa DDOS saldırısı düzenlenmesini engeller hem de ölçeklenme sorununu çözer.

Diyagram üzerinden bilginin yayılışı
Şekil 7 Diyagram üzerinden bilginin yayılışı

Örneğin yandaki gibi bir ağda farklı bilgilerin ağa yayılma anlarını görebilirsiniz. Her bir node ağdaki farklı node’larla bağlantı kurmuş durumda ve bir blok doğrulandığında ya da tüm ağın bilgisine sunulması gereken bir işlem yapıldığında yandaki gibi her bir node bağlı olduğu node’lara bu bilgiyi aktarız. Sürecin sonunda da bu bilgi ağın tamamına yayılmış olur. Paxos Consesus’undaki birçok sorunu çözse de Nakamoto Consesus’u da bazı problemlere sahiptir.

Örneğin ağda çalışan bir miner olduğunuzu düşünelim. Bitcoin için düşünecek olursak yeni blok için 10 dakikalık sürenin başladığını ve sizin de bellek havuzundan bazı işlemleri seçerek bir blok oluşturduğunuzu ve bu bloğu doğruladığınızı düşünelim. Bir an önce bu bloğu ağa duyurmak ve Blockchain’e eklemek istiyorsunuz. Ancak şekilde de gördüğünüz gibi sizin dışınızdaki miner’lar da bu yarışa katılmış durumda. Eğer çok hızlı bir şekilde tüm ağa bu bloğu duyurabilir ve diğer miner’lardan önce kendi bloğunuzu herkese kabul ettirebilirseniz bloğunuz Blockchain’e eklenecek ve siz de blok ödülünü kazanacaksınız.

Daha önce de değindiğimiz gibi node’lar her zaman kendilerine ulaşan en uzun zinciri doğru kabul ederler. Bu durumda da eski zincire doğruladığınız bloğu ekleyerek ağa duyurmaya çalışırsanız sizin zinciriniz 1 blok farkla ağın en uzun zinciri olacaktır ve herhangi bir node kendisine ulaşan bu yeni zinciri eski zincirden daha uzun olduğu için doğru kabul edecektir.

Fakat bir node’a aynı anda hem sizin hem de bir başka miner’ın bulduğu blok duyurulabilir. Bu durumda node’a ulaşan iki yeni zincir de aynı boyda olacaktır. Node kimin bloğunu kabul edecek ve bağlı olduğu diğer node’lara bu bloğu duyuracak?

Bu duruma Fork (Çatallanma) ismi verilir. Bir önceki yazımızda bazı sorunları çözmek için fork’un nasıl kullanılabileceğine değinmiştik. Bu yazıda ise aynı yüksekliğe sahip iki farklı zincirin oluşması durumunda gerçekleşen fork’tan bahsedeceğiz. Daha sonra ilk kısma tekrar dönecek ve hard fork, soft fork gibi kavramlara da girip bu konuyu daha detaylı inceleyeceğiz. Şimdilik konumuza dönelim.

Fork Yapısı
Şekil 8 Fork Yapısı

Örneğin yandaki şekilde t1 anında aynı uzunlukta iki farklı zincir bulunmaktadır. Bu sorun farklı protokoller kullanılarak çözülebilir. Nakamoto bu sorunu Proof of Work (PoW) (iş kanıtı) sistemini kullanarak çözmüştür. Bu örnekte yeni bloğu bulan ve doğrulayan miner’in önünde bloğunu ekleyebileceği iki zincir vardır. Miner bu zincirlerden birini seçme ve bu zincire göre doğrulama yapmaya çalışma hakkına sahiptir. Bu doğrulamanın karşılığında da daha önce bahsettiğimiz gibi blok ödülünü kazanmış olur.

Örneğin burada 104. bloğu bulan miner yeni bloğu 103a bloğunun ardına eklemiştir. Böylece soldaki zincir en uzun zincir olmuştur ve 103b bloğu “Orphan Block” (yetim blok) olmuştur.

Fakat bu durumda da 103b bloğu için harcanan tüm enerji çöp olmuştur. Tam da bu sebeple sık sık duyduğunuz enerji problemi ortaya çıkmıştır. Ağdaki miner’lar her 10 dakikada bir yarışa girer ve her biri bir blok üretmek için enerji harcar. Ancak 10 dakikanın sonunda sadece bir blok zincire eklenebilir. Dolayısıyla da sadece 1 miner harcadığı enerjinin karşılığı olarak blok ödülünü elde eder ve diğer tüm miner’ların harcadığı enerji anlamsız olur. Bu sorun 2012 yılında ortaya atılan Proof of Stake (PoS) (Hisse İspatı) ile çözülmeye çalışılmıştır.

Proof of Stake

PoS’ta PoW’te olduğu gibi yeni bloğu oluşturmak için tüm ağ aynı anda çalışmaz. Ayrıca PoW’teki gibi çözülmesi gereken zor problemler de yoktur. Doğrulayıcı, içeride tutulan (stake edilen) paranın ve rassal seçimin bir kombinasyonuyla belirlenir. Bu sebeple Pow’un aksine daha güçlü donanımlardan ziyade daha çok para stake eden kişilerin doğrulayıcı olma şansı daha fazladır.

Bu çözüm enerji tüketimi sorununu çözse de beraberinde farklı sorunları getirmektedir. Örneğin en zengin kişi sistemde tekelleşebilir ve merkeziyetsizlik kavramının önüne geçebilir. Bu sorun farklı raslantısal etkenlerin de seçime dahil edilmesiyle çözülmeye çalışılmıştır.

Bir diğer sorun ise ortada PoW’teki gibi bir problem çözme mekanizması olmadığından yeni zincir üretmek ve ağı manipüle etmek görece daha kolaydır. Örneğin PoW’te blok üretmek ve doğrulamak çok zor bir işlem olduğundan miner’lar ancak tek bir zincir seçip bu incir için yeni blok doğrulaması yapabilirlerken PoS’ta blok doğrulamak ortada çözülmesi gereken bir problem olmadığından çok daha kolaydır ve doğrulayıcı iki zincir için de blok üretip iki defa blok ödülü almak isteyebilir. Bu durumda da aynı iki farklı zincir oluşabilir ve ağ yeni zincirlerle manipüle edilebilir.

Bu sorun için de farklı çözümler üzerinde çalışılsa da en yaygın kullanılan çözüm önerisi iki zincire de ekleme yapan doğrulayıcı cezalandırmak üzerine şekillenmiş “slashing” cezalandırma yöntemidir.

PoS kendi altında da farklı başlıklara ayrılır ve beraberinde getirdiği sorunlara farklı çözüm önerileri geliştirir. Bir sonraki yazımızda Ethereum’un nasıl çalıştığını incelerken PoS protokolüne de daha yakından bakacağız.

PoW, PoS veya 2018 yılında ortaya atılan Snow Consensus gibi birçok consensus protokolü üzerinde hala çalışılmaktadır. (Snow Consensus yöntemine bu serinin sonunda çok daha yakından bakacağız.) Birçoğunu ilerleyen zamanlarda birlikte inceleyeceğiz fakat buraya kadar PoW’ün ve Bitcoin’in nasıl çalıştığını biraz daha yakından anlayabildiğinizi düşünüyorum. Bu kısımla bağlantılı olan Merkle ağaç yapısı ve SPV’lerin çalışma prensiplerini ve Hash fonksiyonlarını ve SHA256’yı da ilgili yazılarımızdan okuyabilirsiniz.

Yazar : Murat Can Baştuğ “muratcanbastug1@gmail.com”

Editör : Yunus Şahin “yunushacettepetr@gmail.com”

Editör : Gamze Ceylan “gamzeceylaan15@gmail.com”

Teşekkürler, yazıyla ilgili görüşlerinizi ve varsa hatalarımızı mail atarak belirtebilirsiniz.

muratcanbastug1@gmail.com

LinkedIn | Twitter