Cover photo

Fraud Proofs ve Data Availability Problem

Blokzinciri Ağlarında Ölçeklenebilirlik

Ölçeklenebilirlik kavramı söz konusu olduğunda genelde sayılar konuşur, Bitcoin üzerinde saniyede 6–7 işlem gerçekleşirken VISA üzerinde bu sayı 2.000–20.000, gibi. Fakat merkezi sunuculardan yönetilen bir sistem ile, merkeziyetsizliğe ulaşmak için yaratılan bir sistemi karşılaştırmak ne kadar doğrudur?

Blokzinciri ağları, merkeziyetsizliğe ulaşmak için verimden ve hızdan ödün verir. Bu tamamen tasarım amacının ve önceliğinin bir sonucudur. Bu önceliğin getirdiği kötü sonuçları yıkmak için gerek ‘zincir üstü (on-chain)’, gerekse ‘zincir dışı (off-chain)’ birçok ölçeklenebilirlik çözümünden bahsediyoruz. Zincir üstü ölçeklenebilirlik çözümlerine örnek olarak ‘blok boyutunu artırma’ ya da ‘**Sharding’**i örnek verebiliriz. Zincir dışı çözümler ise ‘Bitcoin Lightning Network’ ya da uzun zamandır dilimizden düşmeyen, Arbitrum ya da Optimism gibi ‘Rollup’ yapılarıdır.

NOT: Blok boyutunu artırmak ölçeklenebilirlik için bir çözümdür fakat güvenli değildir. Artan blok boyutuyla beraber ağın boyutu artacak ve Full Node sahipleri daha çok veri indirmek zorunda kalacak, gereken bant genişliğine sahip olmayan node sahipleri bilgisayar kapatacak ve merkeziyetsizlik azalacak.

Dolancırıcılık Kanıtları / Fraud Proofs

3 yıl önce, blokzinciri ağları üzerinde merkeziyetsizliği ve güvenliği düşürmeden Light Node ve Full Node arasındaki sayısal oranı azaltabilmenin yollarının, Vitalik Buterin, Alberto Sonnino ve Mustafa Al-Bassam tarafından yazıldığı bir makale yayınlanmıştı.

Dolandırıcılık ve veri kullanılabilirliği kanıtları (Fraud Proofs / Data Availability Proofs), zincir üstü verilerin kullanılabilir ve geçerli olduğuna dair güçlü bir güvence sağlarken blok zincirlerinin zincir üzerinde ölçeklenmesini (örneğin, sharding ya da blok boyutunu artırarak) sağlamanın anahtarıdır.

Dolandırıcılık kanıtlarının blokzinciri ağları üzerindeki uygulamasına girmeden önce analojisini anlayalım.

Dağıtık ve merkeziyetsiz bir ağ içerisinde bulunduğunuzu düşünün. Sizin ve diğer eşlerin/düğümlerin amacınız ağa yeni asal sayılar eklemek. Bunu 2’den başlayarak sonsuza kadar yapacaksınız. Ağ katılımcılarının zinciri devam ettirebilmesi için 2 seçenekleri var;

  1. Ağ çoğunluğuna güvenip yayınlanan asal sayıyı doğru kabul etmek

  2. Yayınlanan asal sayının gerçekten asal olup olmadığını görmek için bir takım testlerden geçirmek.

Yayınlanan asal sayıyı testlerden geçirmek sizin için ilk başlarda kolay olacaktır. Fakat bir yerden sonra sayılar çok büyüyecek ve hesaplanması oldukça zor hale gelecek. Çok güçlü bir bilgisayarınız olmadığını düşünün, gerekli testleri uygularsanız ağın mevcut durumunu kaçıracaksınız. İşte bu noktada ağ ile olan bağlantıyı koparmamak için 1. seçenek çok daha mantıklı geliyor.

Peki ya dürüst olmayan eşler? Merkeziyetsiz ve güvene ihtiyaç duymayan bir ağda ilk seçenek hiç mantıklı değil. Node-101’in tüm ağa asal olmayan bir sayı (X sayısı diyelim) yayınladığını düşünelim. Siz ve sizin gibi düşünen eşler, bunun doğru olduğuna kanaat getirip ağa yazabilirsiniz. Fakat bu, bizim ağımız için kabul edilemez.

Dolandırıcılık Kanıtları burada devreye giriyor. Eğer Node-202, Node-101 tarafından yayımlanan sayının asal olmadığını çeşitli testler yardımıyla kanıtlarsa ve ‘X’ sayısını tam bölen sayıyı kanıt olarak siz dahil bu sayıyı sorgulamadan asal kabul eden eşlere gönderirse, işte o zaman ağa asal olmayan bir sayının yazılması engellenmiş olur.

Dolandırıcılık kanıtları da buna benzer. Tüm durumun tamamını kontrol etmek yerine, gelen kanıtı kullanarak sadece yanlış olduğu söylenen yeri kontrol ederiz.

Dolandırıcılık kanıtlarının avantajlarına bakacak olursak;

  1. Eşlerin her biri, bir sayının asal olup olmadığına bakmak için tüm testleri uygulamayacak, eğer belirli bir süre sonunda kanıt ulaşmazsa, verilen asal sayı doğru kabul edilecek.

  2. Ağda tek bir dürüst düğümün olması, tüm ağın yanlıştan dönmesi için yeterlidir.

  3. Kanıt boyutu çok küçük.

  4. Kanıtın doğruluğunu test etmek çok basit.

  5. Dürüst olmayan düğümlerin belirlenmesi ve cezalandırılması sağlanır.

Fraud Proofların Uygulama Özeti
Fraud Proofların Uygulama Özeti

Light Node / Full Node

Dolandırıcılık kanıtlarının blokzinciri ağlarındaki işlevinden bahsetmeden önce önemli bir kavramı daha açıklamak gerekiyor.

Blokzinciri ağlarını birer durum makinesi gibi düşünebiliriz. Yapılan her bir yeni işlemle beraber yeni bir durum oluşur, ya da oluşturulan her bir blokla beraber mevcut durum güncellenir. Tam Düğümler (Full Node), ağ üzerinde gerçekleşen işlemleri ağa işlerler ve yeni durumu oluştururlar. Full Node çalıştırma maliyetini karşılayamayacak olan ya da uğraşmak istemeyen katılımcılar ise Light Node çalıştırırlar. Bu kişiler, ağın durumunu güncellemek yerine sadece güncel durumu temsil eden blok içerisindeki Blok Başlığı (Block Header) denilen kısmı indirirler.,

Konsensüs oylamalarına katılmazlar, diğer Light Nodelar ile iletişim kurmazlar çünkü görevleri gereği buna gerek yoktur. Full Node’ların çoğunluğu tarafından alınan kararın doğruluğuna inanırlar.

Full Node ve Light Nodelardan oluşan küçük bir ağ şeması
Full Node ve Light Nodelardan oluşan küçük bir ağ şeması

Blok başlıkları içindeki verilere göre bazı kontroller yapabilirler, Merkle Proof diyoruz buna. Merkle Root yapısına değinelim öncelikle. Son blok üzerindeki işlemlerin hepsi ikişerli biçimde gruplandırılırlar. Her işlem, karma algoritmasından (hash fonksiyonu) geçirilir. Daha sonra aynı grup altındaki 2 işlemin hash çıktıları, yine hash algoritmasından geçirilir ve elde tek bir hash çıktısı kalana kadar bu işlem devam eder. Son hash çıktısı bize Merkle Root’u verir. Yapının hepsi Merkle Tree’yi işaret eder. Full Node, bir işlemin ağda olup olmadığını kontrol etmesi için Light Node’a gerekli bilgileri gönderir ve Light Node bu verileri Merkle Root’a kadar takip eder. Bu gönderilen bilgilere Merkle Proof diyoruz.

Merkle Tree Örneği
Merkle Tree Örneği

Blok boyutlarını büyütmenin bir sakıncası da burada ortaya çıkar. Büyüyen bloklar daha fazla işlem gücü ve ağ bağlantı gücü gerektirir. Bunu sağlayamayan Full Nodelar ağdan düşerler. Light Node’ların güvenebileceği Full Node sayısı da böylece azalmış olur. Böylece merkeziyetsizlik ve güvenlikten ödün verilmiş olunur.

Peki Light Node’lar, ağ çoğunluğuna ihtiyaç duymadan, Full Node’lardan bloğun doğru olmadığına yönelik bir kanıt alırlarsa?

Yukarıda bahsettiğim makalede 2 çeşit dolandırıcılık kanıtından bahsediliyor.

  1. Durum Değişimi Dolandırıcılık Kanıtı (State Transition Fraud-Proofs)

  2. Veri Kullanılabilirliği Dolandırıcılık Kanıtı (Data Availability Fraud-Proofs)

İki kanıt da, ağ üzerinde kabul edilemeyecek bir durum oluştuğunda sunulur.

State Transition Fraud Proofs

Blokzinciri ağlarının aslında birer durum makinesi (state machine) olduğunu söylemiştim. Ağ üzerinde gerçekleşen her işlem yeni bir durum oluşturur. Light Node’lar, Blok Başlığı altındaki veriler ile yukarıda bahsettiğim Merkle Root yapısını da indirirler.

Makale üzerindeki fikir şu, biz başlıkta sadece Merkle Root’u saklayacağımıza, birkaç ara durum daha belirleyip bunları da saklayalım. Bir Full Node, işlemlerin birinde, ağ durumuna uymayan bir durum farkederse, Light Node’a mesaj göndersin. Desin ki, ‘Ben elimdeki işlem verileri ile bir Merkle Root oluşturdum fakat bendeki root ile madencinin yayınladığı root farklı. Benim elimdeki doğru verileri sana gönderiyorum, ağa kaydettiğimiz ara duruma kadar takip ve kendi gözlerinle gör.’ Bu gönderilen verilerin Merkle Proof olduğundan bahsetmiştik. Merkle Proof ile Fraud Proof arasındaki fark ise, Merkle Proof bir işlemin ağda olup olmadığını kontrol etmek için gönderilirken, Fraud Proof bir işlemin yanlış olduğunu kanıtlamak için gönderilir. Ara durumlar sayesinde, gönderilen Merkle Proof boyutu küçülür ve ölçeklenebilirliğe olumlu katkı sağlanır.

Bu noktada, blok içerisindeki her durumu, ara durum olarak kaydetmemiz gerekmiyor. Böyle yaparsak küçülttüğümüz Merkle Proof boyutuna rağmen ölçeklenebilirlik adına yol katedemeyiz.

Bu tarz bir Fraud Proof uygulaması çok verimli gibi gözüküyor çünkü tek bir Full Node’un dürüst olması halinde bile ağ durumu doğru çizgiye oturabiliyor. Tabiki yanlış durumu yayınlayıp sahtekarlık yapan Full Node’lar için de bu noktada caydırıcı yaptırımlar yapılabilir.

The Data Availability Problem

Dolandırıcılık Kanıtı güzel bir konsept. Fakat sadece veri ulaşılabilir olduğunda. Peki veri bir şekilde silinmiş ya da bloğu ağa yayınlayan düğüm tarafından gizlenmişse? Bloktaki transferlerin doğruluğunu nasıl kanıtlayacağız?

Bir düğümün işlemlerin bazılarını gizleyerek bloğu yayınladığını düşünün, işlemlerle beraber Merkle Root’da olması gereken yapıda çıkmayacak. Light Node paylaşılan yanlış duruma ait Merkle Root’u indirecek. Ve Full Node’lar da verinin eksik ya da hatalı olduğunu kanıtlayacak bir Fraud Proof üretemeyecekler çünkü ellerinde gizlenen işlemin yanlışlığına dair bir kanıt yok. Dolayısıyla Light Node durumun yanlış olduğundan asla haberdar olmayacak.

Yazıya ilham olan makalede, bu sorunun çözümü olarak Erasure Code ve çok yönlü Reed-Solomon kodları öneriliyor. Kısaca, paylaşılan verinin M adet bölümden N adet bölüme dönüştürülmesi diyebiliriz.

NE?

Makalede aktarılan görseli inceleyelim.

post image

Yazıda genişletme 2*M=N şeklinde yapılmış, ilk durum M iken son durum N. 2x2’lik bir matrix oluşturulmuş. Bu çok boyutlu bölünme, verinin yeni oluşturulan alt parçalarından bazırlarının kullanılarak tamamına erişilmesini sağlar.

Random Sampling adı verilen Rastgele Örnekleme, orijinal verilerin yeniden elde edilmesi için güçlü bir garanti sağlar. Makalede matematiksel açıklaması yer alıyor, o kadar derine girmeyeceğiz, sonuca geçelim.

post image

Grafiği karışık bulanlar için özetleyeyim. Sol bölüm, Light Node sayısını işaret ediyor. Altta ise örnek boyutunun ne kadar olduğunu görüyoruz. Sağ altta görülen ‘K’ değerleri ise matrix boyutunu temsil ediyor. Light Node sayısı arttıkça ve rastgele örnekleme algoritmasından gelen örnekleme boyutu arttırıldıkça, eksik verilerin ortaya çıkarılabilme olasılığı da artıyor.

M adet bölümden N adet bölüme bölünmüş veride, N adet bölümün her biri kendi Merkle Root’una sahip. Blok verilerinin bir bölümünü yeniden oluşturmak için oluşturulan N parçanın M tanesine ihtiyacımız olduğundan, bu N parçalık bölümün karşılık gelen Merkle köküyle eşleşip eşleşmediğini tespit etmek için yeterli olabilir.

Fraud Proofların ve Random Sampling ile ölçeklenebilirliğin önündeki çoğu engel kaldırılabilirken, Light Node’ların Full Node’ların çoğunluğuna güven duyma gereksinimini de azaltabiliyoruz.

Yazıda anlatılanları kısaca özetlemek gerekirse;

  1. Merkle Prooflar, bir verinin bir bloğa ait olduğunu kanıtlamak için kullanılırlar.

  2. Ara durumlar (intermediate states) sayesinde, hatalı bir durumu bildirmek için gereken Merkle Proof boyutu ciddi derecede azaltılabilir.

  3. Erasure Codes ve Random Sampling, bir blok içerisindeki verilen bütünlüğüne dair güçlü matematiksel kanıtlar sunar.

  4. Yanlış ya da eksik bir veri sunan Full Node, Reed-Solomon kodlarının çok boyutlu özelliği ve her bir boyutta bulunan Merkle Rootlar sayesinde tespit edilebilir.

  5. İlham kaynağım olan makalede, durum geçişlerini (state transition) ve veri kullanılabilirliğini (data availability) kanıtlamak için zk-STARK / zk-SNARK teknolojilerinin de kullanılabileceği belirtiliyor. Derin mevzular..

Başka yazılarda görüşmek üzere.

twitter: @BlockofChain