Kral Çıplak Diyebilmek: Blok zincirinin kısıtları

Veri Saklama Sorunları ve Çözümleri

Bu yazı ilk defa Arka Kapı dergisinin 2'nci sayısında yayınlanmıştır.

Blokzinciri teknolojileri Türkiye’de olduğu gibi dünyada da geniş bir şekilde tartışılıyor. Geçtiğimiz 10 ay boyunca en popüler olduğu zamanları yaşadık dersem sanırım pek de yanılmamış olurum. Bunun en büyük nedeni şüphesiz ki bir çok farklı teknolojinin ortaya çıkması ve bu popülerlikten beslenerek borsalarda işlem gören kripto paraların değerlerinin bir anda artıp azalmasıydı. Yani tüketim amaçlı bir çok kişinin bu işe para yatırması ve bazen kazanıp bazen kaybetmesi de bu popülerliği peşinden getirdi diyebiliriz.

Şu anda yüzlerce kişi, grup ya da firma bu teknolojinin kullanım alanlarını arıyor ve uygulamaya çalışıyor. Hatta bir çok konferans ya da toplantıya gittiğinizde, özellikle ülkemizde, herkes bunun ne kadar da harika bir teknoloji olduğundan ve bu teknolojinin dünyaya nasıl fayda getireceğinden bahsediyor. Peki düşündüğünüzde şu anda günlük hayatınızda kaç tane blokzinciri uygulaması kullanıyorsunuz? Ya da bu kadar çok kullanım alanı olan bu harika teknolojinin hiç mi bir problemi ya da derdi yok? Yani demek istediğim, neden şu anda bir çok firma bu alanda geliştirmeler yapıp sizlere hazır ürünler sunamıyorlar?

Image for post
Image for post

Evet ben de bu yazımda tam olarak bu teknolojinin ‘kötü özelliklerinden’ bahsediyor olacağım. Çünkü bir yazılımcı olarak biliyorum ki eğer elinizde sadece çekiç varsa her şeyi çivi olarak görmeye başlayabilirsiniz, ve bunun önüne geçmek için o çekiç ile neler yapamayacağınızı çok iyi anlamanız potansiyel olarak ileride yaratabileceğiniz sorunları önlemek açısından çok önemlidir. Tam da bu noktada Javascript Guru’su olan Douglas Crockford’ı anmadan geçemeyeceğim. Kitaplarında bahsettiği gibi ‘her yazılım teknolojisi iyi ve kötü taraflarını kendi içinde barındırır, eğer o yazılım dilini çok iyi kullanmak istiyorsanız iyi yönlerini kullanıp kötü yönlerinden kaçınmanız gerekmektedir’. Bunun için ne yazık ki günlerinizi hatta belki de gecelerinizi ayırıp bu teknolojiyi çok iyi bir şekilde öğrenmeniz gerekir. İsterseniz lafı çok da uzatmadan Türkiye’de herkesin konuşmaktan çekindiği bu kötü detaylara girişelim. Bu yazıda öncelikle veri saklama sorunlarına odaklanmayı ve gelecek yazılarda da farklı sorunları ve bunların çözümlerini anlatmaya çalışacağım.

Veri Saklama Sorunları

Blokzinciri temelinde bir veri tabanı gibi tasarlanmıştır ve ilk tasarım amacı kısıtlı bir boyuta sahip olan işlem ve transfer bilgilerini güven ihtiyacı olmadan saklamayı hedeflemektedir. Hatta ilk tasarımı Satoshi Nakamoto’nun makalesi olarak kabul edersek hiç bir veri barındırmayan bir blok başlığının 80 byte yer tutacağı ve her 10 dakikada bir blok üretileceği kabul edilirse bir yılda 4.2MB veri saklayacağı hesaplanmıştır. Tabi şu anda Bitcoin’in veri tabanı boyutu 2008 yılından itibaren yaklaşık olarak 160,124 MB civarına ulaşmış durumda. Bunun yanında Bitcoin de veri saklamak için tasarlanmamıştır dersem yanlış bir şey söylemiş olmam. Çünkü adından da anlaşılacağı gibi bir elektronik para sistemi olarak tasarlanan bu teknolojinin asıl amacı değer transferlerini yapabilmektir.

Diğer taraftan Ethereum’u ele alırsak teknik olarak çok ciddi farklılıklar göreceğiz, detaylarına girmeden çok kısaca hatırlatmak gerekirse Ethereum da akıllı kontratlar kurup geliştirdiğiniz merkezi olmayan uygulamalarını geliştirebileceğiniz bir blokzinciri platformu. Bu platform içerisinde yazılımlarınızı kurup kullanıma açmak istiyorsanız ya da benzer şekilde başkaları tarafından kurulan uygulamaları kullanmak ve değer transferi yapmak istiyorsanız her yaptığınız işlem için bir bedel ödemeniz gerekiyor. Bu bedelin maddi özellikten bağımsız adına gas deniyor. Bu gas değeri gas price adı verilen bir birimle çarpılıyor ve madencilere ödül olarak dağıtılıyor. Örneğin 5 gas ödemeniz gerekiyorsa bu durumda eğer gas price değeri 10 Ether ise bu işlem için ödemeniz gereken tutar 50 Ether oluyor. Bu durumda gas en basit haliyle madencilerin zahmetinin karşılığı olarak tanımlanabilir. Peki madenciler ne gibi bir zahmete giriyorlar?

Madencilerin blokzinciri teknolojisindeki önemini biliyoruz, Ethereum özelinde konuşursak eğer madencilerin bir başka yaptıkları şey de blok içerisindeki akıllı kontrat çağrılarını gerçekleştirmek. Eğer bu sırada akıllı kontratlar veri saklama işlemleri yapıyorlarsa bu durumda madenciler bu veriyi de kontratın son durumuna işleyecekler ve karşılığında ödüllerini alacaklardır.

Gavin Wood’un yazdığı 38 sayfalık Ethereum Yellow Paper dokümanında bu gas konusu matematiksel modeliyle ciddi bir şekilde ele alınıyor. Şimdi bu dokümana göre veri saklamanın maliyetini çıkartalım. Dokümanda, 256 bit’lik bir word değerini saklamanın bedelinin 20 gas olduğu söyleniyor. Yani basit bir hesapla 1 KB veri saklamanın bedeli aşağı yukarı 640,000 gas olacak ve bugün ortalama gas price değeri 80 gwei (0.00000002 Ether) olarak kabul edersek 1 KB veri saklamak için 0.512 Ether gibi bir ücret ödemem gerektiğini görebiliriz. Tabi ki bu durum sürdürülebilir değil.

Dolayısıyla eğer hayalini kurduğum projemde Ethereum ağını kullanarak uygulamalar geliştireceksem ve merkezi olmamak adına tüm verilerimi blokzinciri içinde tutmayı hayal ediyorsam ciddi bir miktar yatırımı gözden çıkartmam gerektiği aşikar.

Blokzinciri veri depolama çözümleri

Yukarıda sizlere çok kötü bir tablo çizdiğimin farkındayım, ama azıcık daha sabredin. Sizlere bir iyi bir de kötü haberim var. İyi haber, merak etmeyin veri depolama sorunları için çok güzel bir kaç tane çözüm var. Kötü haber ise bu yazının yazıldığı tarih itibariyle hiç biri canlı sistemlerde çalışacak kadar olgunlaşmış değil.

Bunlardan bazıları; Filecoin, Sia, StorJ ve Swarm. Bu yazının devamında en yakından inceleyip yakında üzerinde proje geliştirmeye başlayacağım için en hakim olduğum Swarm hakkında size detaylar vermeye çalışacağım.

Peki ya nedir bu Swarm?

Ethereum topluluğunun bir çok farklı blokzinciri projeleri mevcut. Bunlara Web 3 stack deniyor bazılarına örnek vermem gerekirse, merkeziyetsiz ve uçtan uca şifreli bir mesajlaşma platformu olan Whisper, anlık değer transferlerine izin veren blokzincirinin üzerinde çalışan Raiden bunlardan bazıları. Bunları başka bir zaman tekrar konuşuruz, ama şu anda Swarm üzerine tartışmaya devam etmek istiyorum.

Swarm projesinin amacı yeni dünya düzeninde merkezi olmayan bir veri depolama çözümü sunmak. Bu proje kapsamında bir çok güvenlik sorunu da var, örneğin DDoS saldırıları ve erişim kısıtlamalarının doğru çalışması bizim için en önemli sorunlar. Farklı saldırı vektörlerinin gerçekleşmesi durumunda ağın dosya sağlamaya devam etmesi ve sorunsuz bir şekilde hizmet verebiliyor olması çok önemli. Swarm ekibi de bu özellikleri sağlayabildiklerini düzenli iterasyonlarla ispat edebilmek için PoC (Proof of Concept) çalışmaları yapıyorlar. 2018 yılının ikinci çeyreğinde dördüncü PoC’lerini yayınlayacaklar ve bu versiyonda bir çok ilginç özelliği hayata geçirecekler.

Nasıl çalışır diye sorduğunuzu duyar gibiyim. Birazdan bunu anlatmaya başlayacağım ancak bundan önce söylemem gereken çok önemli bir şey var. Bu yazının yazıldığı sırada yani 2018 yılının ilk çeyreğinde var olan özellikler okuduğunuz zamana bağlı olarak olabilir ya da olmayabilir. Hatta çalışma yöntemi tamamen değişmiş olabilir. Dolayısıyla bu ürünü kullanmaya başlamadan önce dokümantasyonunu okuyarak başlamanız çok ama çok önemli.

Ağ üzerinde çalışan her düğümün (Node) kendisine özel bir adresi bulunur. Bu adresleri kullanarak farklı örneklere (instance) erişmek mümkün olabilir. Yani adresini bildiğiniz bir istemciye ulaşabilirsiniz ve P2P bir bağlantı kurabilirsiniz böylelikle dosyalarınıza ulaşabilirsiniz. Swarm ağına gönderdiğiniz dosyalar bzz protokolü adı verilen bir alt protokol sayesinde diğer istemcilere ulaşır. Bu protokol de bildiğimiz Ethereum protokolü olan Devp2p protokolünü kullandığı için herhangi bir Ethereum istemcisi üzerinden (örneğin; ethereum geth) çalışabilir şekilde tasarlanmıştır. Zaten PoC 0.2 versiyonu halihazırda elinizde yüklü olan geth içerisinde de mevcuttur.

Diyelim ki ben bir dosya göndermek istiyorum, bu dosyayı göndermek için seçtiğimde istemciler bu dosyayı en fazla 4K olmak olacak şekilde küçük parçalara ayırırlar ve bunların her birini bir hash fonksiyonundan geçirerek hash değerlerini üretirler. Böylelikle ellerinde bir Merkle İspatı oluşturabilecekleri bir ağaç elde etmiş olurlar. Böylece ağacın herhangi bir dalına rastgele bir şekilde erişmeniz de önlenmiş olur. Yani başka bir değişle, ağacın tamamını bilmeden dosyayı anlamlı bir şekilde yeniden oluşturamazsınız. Ancak eğer küçük parçalara hangi sırayla erişebileceğinizi bilirseniz o zaman bunların arasında atlamalar yapabilirsiniz. Bu özellik sayesinde video yayını yapmak ya da video kareleri arasında atlamak da tabi ki nispeten kolaylaşacaktır. Ancak burada hangi video codec’ini kullandığınız da ayrı bir önem kazanır.

Ancak dikkat etmemiz gereken bir nokta daha bu verilerin asla değiştirilemez ve silinemez oluşu. Yani Swarm sizin diskiniz gibi veri saklayıp sürekli düzenleme yapabileceğiniz bir ortam değil. Bunun yerine verilerinizi yükleyip sonsuza kadar saklayacağınız bir platform.

En iyi kullanım alanları bana kalırsa video, resim ya da belgelerin saklanması olabilir. Ancak yine ufak bir uyarıda bulunmakta fayda görüyorum: Swarm bu haliyle kullanıma tam olarak hazır değil, kısa bir süre önce yeni PoC (Proof of Concept) versiyonu yayınlandı ve yeni hash algoritması yüzünden tüm verileri temizlemek zorunda kaldılar. Dolayısıyla özel ya da hassas bilgilerin bu platformda saklanması henüz doğru değil. Ekibin gelecek planları özel ya da genel bir şekilde veri saklamaya izin verileceğini gösteriyor ancak platform henüz bunun için hazır değil. Bunun için Swarm ekibindekilerle konuştuğumda bunun için 2019 yılının ilk çeyreğini işaret ediyorlar. Biz de Krypted ekibi olarak bu tarihe hazırlanıyoruz ve bu konuda ilk PoC’imizi devreye alıp testlerimizi tamamladık bile!

Burada veri saklamanın henüz bir ekonomik modeli açıklanmadı. Çünkü platform henüz tamamlanmış değil. Ancak iki tane olası gelir modelinden bahsediliyor, verilerin geçebilmesi için taşıma görevini üstlenecek servisler taşıdıkları veriye oranla bir ödül alabilirler ya da veri saklayanlar sakladıkları kadar bir ödül alabilirler. Ama bunların hepsi tabi ki tahmin. Henüz netleşmiş bir şey yok. Fakat ileride madencilik yerine kenara attığınız USB disklerinizi çıkartıp veri saklayarak da ether kazanabileceksiniz gibi duruyor.

Şimdilik yazımı bitirirken bir kaç konuya daha değinmek istiyorum. Türkiye’de blokzinciri alanı gerçekten gelişmeye çok açık. Ancak bir şey bildiğini iddia eden fakat derinlemesine konuşmaya başladığınızda aslında konuya giriş seviyesinde hakim olduğunu anladığınız çok fazla kişi var. Bu yüzden artık Blokzinciri Nedir? Nasıl çalışır? Konularından çok işin teknik detaylarına girmemizin zamanı geldi de geçiyor. Bu yüzden bu konuyla ilgili bir çok kaynak üretmeye çalışıyoruz ve yardım isteyen herkese yardımcı olmaya çalışıyoruz. Yazılım geliştirme topluluğundaki herkesin böyle bir ödevi olduğuna inanıyorum ve elimden geleni yapmaya hazırım. Umarım daha fazla kişiye ulaşıp Türkiye’de bu alanın gelişmesine katkı sağlayabiliriz.

Esen Kalın.

Written by

I do stuff. with code.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store