Merhabalar bugün oldukça kafa karıştırıcı olabilen, blokzincir için yeni ve mutlaka aşılması gereken bir sorun olan ancak biz yazılımcılar için eski, pratikte zorluklar çıkarsa da belli tasarım kalıpları ile başetmenin mümkün olduğu ölçeklenebilirlik kavramına değineceğim. Elimden geldiğince rafine ve blokzincir özelinde anlatmaya çalışacağım ve yazılımın taş çağından başlamayacağım:) ve bunun içindir ki; kendi kitabım olan “blokzincir mimarisi ve merkezi olmayan uygulamalar” kitabımdan bazı bölümlere yer vereceğim.

Ölçeklenebilirlik Kavramı ve Çözümleri

Blokzincir mimarisindeki “blok”, “madenci” ve “transaction” kavramlarına tekrar değinelim. Bilindiği üzere blokzincir üzerinde her node tüm verileri kendi veritabanlarında tutuyor. Node’lardaki bu veriler; bakiyeler ve kompleks akıllı sözleşme değerleri olabiliyor. Bu oldukça büyük bir veri ve tüm node yapıları için eşlenik yapılıyor. Bu, sisteme büyük bir güvenlik avantajı kazandırıyor ancak diğer yandan mimari blok oluşumuna etki ediyor ve işlem süresini uzamasına neden oluyor. Çünkü bir blokzincirin gücü en zayıf node seviyesindedir. Ayrıca her bir node blok oluştururken veya doğrularken blok içerisindeki tüm işlemleri teker teker işliyor. Bu mimari ayrıca harika bir merkezi olmama yapısı getiriyor. Ancak tüm blokzincir içerisindeki hızlı transaction işleme limitinin belli bir seviyenin üzerine çıkarılmasını engelliyor.
Ölçeklenebilirlik kavramı burada devreye giriyor, bir blokzincir yapısı tasarlanırken 3 tane kuraldan bahsedebiliriz, bunları şu şekilde özetleyebiliriz;

1. Merkezi olmama

  • Ethereum sanal makinesi şimdilik senkron şekilde çalışmaktadır ve herşeyi tek thread içerisinde işlemektedir. Paralel prosesler bulunmamaktadır.
  • Transaction’lar doğrulanana kadar her node blok içerisindeki her transaction’u çalıştırır ve tüm ağaç yapısını günceller. Bu büyük bir opearsyonel işlemdir ve merkezi olmama kavramının en önemli noktasını oluşturur.

2. Güvenlik

3. Ölçeklenebilirlik

Yukarıdaki mimari yapıları göz önüne aldığımız zaman bir blokzincirin sahip olabileği 2 temel özellik olan; merkezi olmama ve güvenlik kavramlarını elde edebiliyoruz ama malesef aynı seviyede ölçeklenebilirliğe erişemiyoruz. Diyelim ki mimarimiz de ölçeklenebilirlik ve güvenlik prensipleri sıkı sıkıya yerine getiriliyor ve sistemimiz çok hızlı şekilde işlem yapıyor ancak bu sefer de merkezi olmama kavramından ödün veriyoruz. Çünkü transaction’ları başka türlü dağıtmanın ve onaylamanın yolu henüz mevcut değil.
Merkezi olmama ve güvenlik kavramlarını önceki bölümlerde ve bir önceki paragrafta açıkladık. Kitlesel adaptasyonun önündeki en büyük engel bir blokzincirin saniyede yaptığı işlem sayısıdır. Çünkü her bir node tüm işlemleri tekrar tekrar yapıyor, bu da bir blokzincirin en zayıf node kadar hızlı kapasitede işlem yapmasına olanak sağlıyor.
Ölçeklendirmenin gerekli olmasını zorunlu kılan sebep gün geçtikçe transaction’ların devamlı olarak artması ve işlem yapma sürelerinin arttırılamaması. Ölçeklendirme neden gereklidir ne tipte önerileri mevcuttur? Şimdi bu konuya değinelim, önerilere göz atalım, avantaj ve dezavantajlarına değinelim.

  • Bitcoin blok boyutunun büyütülme önerisi: Bu öneri ilk başlarda mantıklı bulunmuştur, hatta bir hardfork ile de kanıtlanmıştır. Bitcoin cash, bir Bitcoin hardfork yapısıdır ve sadece blok boyutunu büyütmek üzerine kurulmuştur. Ancak bu kripto para da düşük işlem kapasitesine sahiptir. Evet blok boyutu büyüdükçe daha fazla işlem işlenecektir bu aşikar gibi görünüyor. Kaldı ki blok boyutu sonsuza kadar büyüyemez. Ayrıca sadece blok boyutunu büyütmek bize başka bir maliyeti getirecektir; node yapılarınının haberleşmek için kullandığı ağdaki trafiğin arttırılması. Çünkü biliyoruz ki biz merkezi olmama ve güvenlik prensiplerinden ödün veremeyiz. O zaman bütün bu büyütülmüş veriyi tüm diğer node’lara yaymalıyız. İşte bu da bize eksi zaman ve maliyet olarak yansıyacaktır. Bu sebepten blok boyutunun büyütülmesi gerçek bir ölçeklendirme çözümü olamaz.
  • Ethereum üzerinde blok boyutunu belirleyen gaslimit değerininin arttırılması önerisi: Her ne kadar Ethereum blok boyutları sabit olmasa da daha fazla işlem için gaslimit değerlerini arttırmayı Vitalik Buterin onaylamamıştır. Çünkü Vitalik merkezi olmayan Ethereum’u bir platform olarak görmüyor aynı zaman bir ekosistem olarak tanımlıyor. Bu çözüm önerisinin dezavantajı ise; merkezi olmama presibinden ödün verilecek olmasıdır. Çünkü madencilik işleminin daha tekelci ve daha güçlü makineleri ile yapılması gücün belli bir gruba ait olması demektir ki bu istenen bir hedef değildir. Ayrıca daha çok işlem için bloğun boyutunun büyütülmesinin, ağ üzerindeki atakların sıklaşmasına sebep olma ihtimali de diğer bir etkendir.

Ölçeklenebilirlik Çözüm Yöntemleri, Sharding

Sharding aslında blokzincir öncesinde de var olan ve kullanılan bir teknoloji, en çok dağıtık yapıdaki veritabanlarının performanslı şekilde kullanılması için uygulanan bir mimaridir. Veritabanlarını dağıtık yapıda kurarak işlemlerin paralel prosesler ile yapılmasına olanak sağlayıp, işlemlerin yapılma süresini kısaltmak için uygulanan bir mimaridir. Blokzincir üzerindeki uygulamasında ise ana amaç işlemleri paralelize etmek. Bilindiği üzere blokzincirde her node aynı işlemi uygulamak zorunda, sharding mimarisinde ise gruplandırma söz konusu. Node’ları gruplara bölerek bazı node yapılarının belli işlemleri yapmalarına olanak sağlanıyor. Diğer sharding grubundaki node yapıları ise farklı işlem tipleri için çalışıyor. Böylece, aynı anda farklı işlem tiplerinin yapılmasına olanak sağlanıyor, bu şekilde blozincir tps hızı arttırılmış oluyor.
Ancak buradaki zorluk, sharding ile gruplanan node’ların üzerinde çalışan uygulamaların diğer gruplanan uygulamalar ile sanki tek bir shard varmış gibi haberleşememesi ve özel bir mekanizma ile birbirleriyle iletişimde kalmaları. Bu mimarinin çözmeye çalıştığı sorunlardan bir diğeri de Ethereum durum (state) yapısının sharding ile bölünmesi ve state’in güncel tutulması zorluğu. Bu mimariyi şu an en uygun şekilde uygulayan, 2019 yılında canlı ortama geçecek olan ve kendi akıllı sözleşme dili olan Zilliqa (https://github. com/Zilliqa) platformudur.

Merkezi olmama ile ilgili Vitalik Buterin‘in kendi yazısını inceleyebilirsiniz; https://medium.com/@VitalikButerin/the-meaning-of-decentralizationa0c92b76a274

Sharding için şu kaynağa bakabilirsiniz: https://github.com/ethereum/wiki/wiki/ Sharding-FAQs

Bu kaynak da faydalı olacaktır: https://medium.com/pchain-org/dr-feng-cao-the-historyand-status-of-tps-in-blockchain-eb8a98a02cfb

Ölçeklenebilirlik Çözüm Yöntemleri, Sidechain

Sidechain (yan ağ) kavramı diğer bir ölçeklenebilirlik çözüm yöntemidir. Sidechain kavramı ana blokzincire bağlı olan yan küçük blokzincir ve/veya blokzincirler oluşturma mimarisi üzerine tasarlanmıştır. Oluşturulan bu blokzincirler ana zincir ile birbirlerine bağlıdır ve ikisi arasında çift yönlü veri akışı bulunmaktadır. Amacı ana ağın işlem yükünü almak ve blokzincirin işlem kapasitesini arttırmaktır. Ana ağ ile sidechain blokzincirlerinin mutabakat algoritmaları birbirinden farklı da olabilir aynı da olabilir. Bu bir sorun teşkil etmemektedir. Örneğin ana blokzincir proof of work ile çalışırken yan ağ proof of stake algoritması ile çalışabilir. Örnek vermek gerekirse Ardor ve Poa network bu şekilde tasarlanmıştır.
Sidechain üzerindeki veri transferi mimarisi, finansal ve finansal olmayan işlemlerin uygulanabilmesi için olanak vermektedir. İki blokzincir arasında token transferi yapılabilmektedir. Token transferi, finansal bir duruma işaret eder. Bunu yapabilmek için ana ağ üzerinden önceden belirlenmiş değerlere uygun olarak token veya coin’lerinizi sidechain üzerine transferini başlatabilirsiniz. Sonrasında bu bakiye ana ağ üzerinde kilitlenip yok edilecektir ama bu işlemin ana ağ üzerindeki blok içerisinde izi kalacaktır. Sonrasında sidechain üzerine transfer başlatıldıldığı an artık sidechain üzerinde token kullanabilirsiniz.Mesela Cardano bu mimariyi şu şekilde açıklıyor; “kilitleme işlemi sonrası ana ağdan yan ağ üzerine giden bakiye için sıfırlama işlemi yapılıyor ve bu işlemin referansı ana ağ üzerinde tutuluyor ve asla kaybedilme durumu yaşanmıyor”. Detaylı bir anlatım için Cardanodan Dionysis Zindros’un Cardano üzerindeki sidechain mimarisini anlattığı enfes videosunu izlemenizi tavsiye ederim: https://www.youtube.com/watch?v=04D2BP33YI8
Sidechain üzerine sadece token transferi değil veri transferi de yapabilirsiniz. Bunun için akıllı sözleşmeleri kullanabilirsiniz. Şu anda bu mimari yapıyı Poa network uyguluyor, ayrıca Cardano da çift yönlü coin transferini sistemlerinde uyguluyor.

Sidechain’in getirdiği en büyük avantaj hız ve güvenlik konularında görülüyor. Uygulaması da oldukça başarılı ve kabul görmüş durumda. Açıkcası içinde bulunduğum bazı uygulamalarda sidechain yapısını kullanma şansım oldu. Micro ödemelerimizi kendimize ait private sidechain üzerinde rahatlıkla yapabiliriz. Private olduğu için hacklenmesi mümkün gözükmemektedir ve uygun konsensus algortimasının verdiği hız ile günlük ödeme işlemlerimizi rahatlıkla yapabiliriz. Şu anda Poa network beş saniyede bir blok oluşturuyor ve tps oranıyla Paypal’in oldukça üzerinde. Poa network, konsensus olarak proof of authority algoritmasını kullanmaktadır. Böylelikle işlemlerimizi çok düşük süreler içerisinde yapabiliyoruz ve bu mimari ile güvenilir ve ölçeklenebilir bir ödeme sistemi altyapısı kurabiliyoruz. Günlük işlemlerimizi Poa sidechain yapısı üzerinde gerçekleştirdikten sonra uygun zaman dilimlerinde sidechain içerisinde bulunan işlemlerimizi public Ethereum ağına transferini gerçekleştirip verilerimizin güvenle ana ağda depolanmasını sağlayabiliriz. Böylece hem ölçeklenebilir hem de güvenilir bir mimariye sahip olabiliriz.

https://dogasava.medium.com/blokzincir-%C3%B6l%C3%A7eklenebilirlik-kavram%C4%B1-852a35127dc

info@deneth.net

Takip Edin

Doğa Özcan

@dogaetherozcan

stratrade

@stratrade_