Blockchain ve Nakamoto Consensus

BlockchainDEU
5 min readJun 3, 2022

Düzey: 0x02

Blockchain nedir?

Bir önceki yazıda Mert’in de söylediği gibi blockchain aslında bir kayıt defteri ya da daha yazılımsal ismiyle bir veri tabanıdır ancak diğer veri tabanı sistemlerinden en büyük farklarından biri dağıtık ve merkeziyetsiz olmasıdır. Hadi gelin “dağıtıklık” ve “merkeziyetsizlik” kavramlarına bir göz atalım:

Dağıtıklık ve merkeziyetsizlik kavramlarında hala tamamiyle bir uzlaşmaya varılamadığı için bu yazıda bize göre doğru olan ve nispeten popüler bir görüş benimsenmiştir.

Centralized yani merkezi veri tabanı sistemleri akla ilk gelen ve veri organizasyonunun en kolay olduğu mimaridir ancak her güzel şeyin bir bedeli olduğu gibi bu getirilerin de birkaç götürüsü vardır. Onlar da merkezi mimarinin getirdiği işlemsel yük ve kırılganlıktır . Bütün dünyaya hizmet veren bir şirketin merkezi bir veri tabanı kurmaya çalıştığını bir hayal edin. Veri tabanınıza dünyadan anlık olarak çok fazla istek gelecek ve bu isteklere de göndereceğiniz cevaplar olacaktır hatta ve hatta bazı istekler büyük verilerde işlem yapmanızı isteyecektir. Böyle bir durumda istekleri ve cevapları taşıyabilecek bir internet bant genişliğine ve üstüne üstlük bütün işlemleri gerçekleştirebilecek işlem gücüne de sahip olmanız gerekecek (işlem gücü) ve bu veri tabanı bir aksilikten ötürü çöktüğünde işlemleri gerçekleştirme imkanınız olmaması (kırılganlık) da cabası tabii. Bu da bu mimariyi kullanmaya çalışan şirkete büyük maliyetler çıkaracaktır. İnsanlar bu durumu fark etmiş olacaklardır ki bütün verileri bir yerde toplamaktansa küçük parçalara bölüp (dağıtıp) nispeten daha dağıtık bir yapıda işlemleri kolayca yapmayı planlamışlardır ancak kulağa hoş gelse de dağıtık yapıların da bazı handikapları var. Veri tabanını lokal alanlara bölüp işlem gücünden ve bant genişliği problemlerinden kaçıp gecikme sürelerinde de azalmaya gitmiş olsanız dahi düğümlerin (dağıtık yapıdaki veri tabanlarında her bir veri tabanı “düğüm”, ingilizce ismiyle “node” olarak adlandırılır.) aralarında iletişime geçerek senkronize bir şekilde hareket etmelidirler yoksa sunduğunuz hizmeti büyük oranda etkileyecek karmaşıklıklara sebep olabilirler. Dolayısıyla işlem gücü ve kırılganlık gibi dezavantajları egale etmiş olsanız dahi “senkronizasyon” gibi bir probleme sahip oldunuz ancak tabii ki bu problem diğerlerine göre nispeten daha kolay bir şekilde halledilebilir olduğu için güncel zamanda büyük şirketler mimarilerini dağıtmaya ya da diğer bir tabirle veri tabanlarını lokalleştirmeye doğru gitmişlerdir. Üçüncü mimari ise merkeziyetsizliktir (decentralization), ikinci yani “dağıtık” mimaride verileri lokalleştirip mimarinin birden fazla veri tabanından oluşmasını sağladık ancak yine de merkezi bir otoriteye bağlıydı. Üçüncü ve son olan “merkeziyetsiz” mimarilerde ise isminden de anlaşıldığı gibi bir merkezi otorite bulunmadan verilerin dağıtık bir şekilde tutulması ve işlemlerin de dağıtık bir şekilde gerçekleştirilebilmesi amaçlanmıştır. İşte blockchain de bunlardan biridir. Blockchain temelde durum makinesi replikasyonu (state machine replication) yapmaya çalışan bir veri tabanı mimarisidir. Şimdi gelin hızlıca durum makinelerine bir göz atalım.

Durum makineleri nedir?

Bir ampulü temsil eden durum makinesi

Durum makinelerini temel anlamda “girdiler sayesinde bir sonraki duruma karar verilecek olan bir çeşit bilgisayar bilimi modeli” olarak özetleyebiliriz (Durum makineleri bilgisayar biliminde önemli bir konumda olmasına karşın yazının kısa ve öz olması adına özetlenerek geçilmiştir.). Resimde görüldüğü üzere sisteme “kapat” komutu girdi olarak verildiğinde lambanın durumu (ingilizce tabiriyle “state”) “kapalı” olacak ve “aç” komutu verildiğinde ise lambanın durumu tahmin edileceği üzere “açık” olacaktır. Dolayısıyla temelde coin (blockchain’in kendine has para birimi: Bitcoin, Ethereum vs.) barındıran her blockchain, kişilerin sahip oldukları varlığı lamba örneğindeki gibi tutmaya çalışan ve bunu girdilerle güvenli ve doğru bir yöntemle şekillendirmeye çalışan birer veri tabanıdır. Örneğin iki kişiden oluşan (isimleri Koray ve Mert olsun) bir kayıt defterine “Mert, Koray’a 10 birim gönderdi” komutu gönderilirse veri tabanı mimarisi barındırdığı verileri “Mert’in bakiyesini 10 birim azalt ve Koray’ın bakiyesini 10 birim artır.” şeklinde değiştirmelidir. Durum makinesi replikasyonunun, durum makinesi replikasyonu kısmını anladık sanırım ancak unutmayın her şeyin merkeziyetsiz ve dağıtık olmasını istiyoruz. Dolayısıyla bu durum makinesini (diğer bir tabirle herkesin finansal varlığını tutan kayıt defterini) herkese dağıtıp ortadan merkeziyeti kaldırmak zorundayız. İlk başta “Dağıtalım, ne olacak ki?” diyebilirsiniz ancak bu işlem ortaya bir saldırı vektörü çıkartacaktır o da “iki kere harcama saldırısı (double spend attack)” veya “%51 saldırısı” olarak adlandırılır.

İki kere harcama saldırısı

Bu kısım biraz kafa karıştırabilir, benden kopmamanız için elimden geleni yapacağım. Bir A kişisi olduğunu ve cüzdanında 10 birim bulundurduğunu düşünün. Blockchain gibi ağlarda çok fazla kişi olduğunu aklınızda bulundurun. Eğer A kişisi ağın bir tarafına “B kişisine 10 birim gönderdim.” ve diğer tarafına da “C kişisine 5 birim gönderdim.” girdisini verse ağın bir tarafında A kişisinin bakiyesi 10 birim diğer kısmında ise 5 birim olacaktır. Dolayısıyla A kişisi 10 birimlik bakiyeyle toplamda 15 birimlik harcama yapmış olacaktır. Hatta ve hatta sadece 15 birimlik harcama yapmasıyla kalmayıp bir sonraki işleminde 5 birimlik harcama yapmaya çalıştığında ağın bir tarafı için problem çıkmayacakken diğer tarafı için olmayan bakiyesini harcamaya çalışacaktır. Bu da ağın (ya da diğer bir tabirle veri tabanının) istikrarlılık ilkesini bozacaktır. Son durumda ise ağın bir tarafı için A kişisinin 5 bakiyesi bulunurken diğer tarafı için hiç bakiyesi bulunmamaktadır. Yani ağ aslında ikiye ayrılmış veya diğer bir deyişle “çatallanmıştır”. İşte bu noktada Satoshi Nakamoto adlı birinin veya birilerinin “Nakamoto Consensus” adlı çözümü karşımıza çıkacaktır.

Uzlaşı Algoritmaları ve Nakamoto Consensus

Ağ kayıt defterinin son durumu konusunda ikiye veya birden fazla parçaya ayrıldığında ortaya büyük problemlerin çıkacağı sanırım gayet açık. Bu yüzden de blockchain yapısında bu gibi problemlerin ortaya çıkmasını istemediğimiz için bu çatallanmaları engellemeye yönelik prosedürlerimiz veya algoritmalarımız var, isimleri de “Uzlaşı/Mutabakat(Consensus) Algoritmaları”. Bu algoritmalar ağın tamamının belli koşullar içerisinde kayıt defterinin son halinin herkeste aynı olmasını sağlayarak sonraki gelen girdileri doğru bir şekilde işlemek için olanak sağlamaya çalışan algoritmalardır (Hatırlayın, gelen girdiler aynı sırayla işlenmelidir yoksa “A kişisi” örneğindeki gibi ortaya karışıklıklar çıkacaktır.). Tarihte ilk defa “Satoshi Nakamoto” adlı kişi veya kişiler bu probleme “Nakamoto Consensus” adlı çözümü bulmuşlardır. Nakamoto Consensus ağın işlem gücünün %51'inin dürüst düğümlerde olduğu sürece ağın güvenliğini sağlamayı amaçlayan bir algoritmadır.

Çatallanmış bir blok zincir

Nakamoto Consensus’ta “uzun olan zincir gerçek/doğru olandır.” ilkesi geçerlidir. Eğer ağımız “işlem gücü açısından güçlü olan düğümler ağda daha fazla söz hakkına (blok önerme hakkına) sahiptir” şeklinde kurgulandıysa ağın işlem gücü açısından %51'i dürüst olduğu sürece Nakamoto Consensus sayesinde ağ güvenli kalacaktır. Çünkü güç çoğunlukta olacağı için ağı kandırmaya çalışan arkadaşlar ne kadar istikrarlı olsalar da çoğunluk daha hızlı blok üreteceğinden eninde sonunda çoğunluk yani dürüst olan düğümler bu yarışı kazanacak ve ağın güvenliğini sağlamış olacaklardır. Dolayısıyla Nakamoto Consensus sayesinde tarihte ilk defa güvenli bir şekilde “Satoshi Nakamoto” tarafından dijital bir para birimi oluşturulabilmiştir ve yine Satoshi tarafından oluşturulmuş ilk blok zincirde (Bitcoin’de) de bu uzlaşı algoritması kullanılmıştır.

Bir dahaki yazıda Bitcoin’e dair birçok şey hakkında daha fazla bilgi verilecektir. Takipte kalın, görüşmek üzere! — Koray Akpınar

--

--