Hyperledger Fabric ile Blockchain Geliştirme #1: Sistem Mimarisi

Yeni teknolojileri hem teorik olarak inceleyeceğimiz hem de uygulamalarını yapacağımız blogumuzun ilk yazı dizisinde blockchain uygulamaları geliştireceğiz. Bu uygulamayı geliştirirken gerçek bir senaryodan faydalanacağız.

Katılım bankalarında fon kullandırım işlemlerinde ödemenin gerçekleştirilebilmesi için müşterinin fatura ibraz etmesi gerekmektedir. Müşteri aynı faturayı farklı bankalarda tekrar kullanabilmektedir. Bu da bankaların daha önceden kullanılmış olan faturaya tekrar ödeme yapmasına neden olmaktadır. Müşterilerin bir fatura ile yalnızca bir kez ödeme alabilmesi için bankaların fatura bilgilerini birbirleri ile paylaşması gerekmektedir.

Geleneksel çözümde, bankalar anlaşarak bir web servis hazırlar. Her banka yaptığı işlemi web servis üzerinden kaydeder ve işlem yapmadan önce fatura işlenmiş mi kontrolü yapar. Fakat bu web servis kim tarafından hazırlanacak, bakımını kim yapacak, maliyeti ne olacak? Web servis ve web servisin kullandığı veri tabanı nerede konumlanacak? Bütün bu sorulara gerek kalmadan farklı bir çözüm mümkün müdür?

Herhangi bir merkezi otoriteye ihtiyaç duymadan, bankalar arası bir blockchain network’ü kurularak faturaların blockchain üzerinde tutulması.

Bu çözüm önerisinde her banka, merkezi bir sisteme ihtiyaç duymadan bütün verileri kendinde saklayabilecektir.

Peki blokchain sistemini nasıl kuracağız, hangi teknolojiler mevcut?

Blockchain kavramı Bitcoin ile popülerlik kazanmış olmasına rağmen günümüzde sadece bir kripto para altyapısı olmaktan çıkmıştır. 2014 yılında Vitalik Buterin isimli Rus geliştirici Bitcoin codebase’ini inceleyerek çeşitli altcoin denemeleri yapmış, daha sonra Ethereum ismini verdiği whitepaper’ı yayınlamıştır. Ethereum başlangıçta bir kripto para olarak tasarlanmış, daha sonra blockchain’in günlük hayattaki sorunlara da çözüm üretebileme hedefi ile akıllı sözleşmeleri (smart contract) çalıştırabilen Ethereum Project ve Ether kripto para olarak iki farklı platforma dönüşmüştür.

Ethereum’un smart contract kavramı implementasyonundan sonra iş alanlarında farklı gereksinimleri çözmek için farklı blockchain framework’leri geliştirilmeye başlanmıştır. 2016 yılında Linux Foundation, Hyperledger isimli çatıyı kurmuş ve bu çatı altında blockchain çözümleri üretmek amacıyla çeşitli projeler başlatılmıştır. Fabric, Sawtooth, Iroha, Indy, Burrow bu çatı altında devam eden projelerdir. Bu projelerin amacı, blockchain konusunda tekdüze bir anlayışıntan ziyade farklı çözümlerin üretilmesi, farklı iş ihtiyaçlarına cevap verebilen blockchain altyapıları geliştirilebilmesidir. Hyperledger projelerinin dışında R3 Corda, Chain, Multichain gibi farklı kuruluşların sunduğu birçok blockchain framework’ü bulunmaktadır.

Gereksinimler ve aşağıda belirtilen kıyaslamalar sonrası Hyperledger Fabric framework’ü tercih edilmiştir.
  • Gizli (private) ve sadece izin verilen kullanıcıların dahil olabildiği (permissioned) blockchain ağı oluşturulmasına olanak sağlaması.
  • Ethereum sonrası başlayan, üçüncü nesil blockchain framework’leri olarak adlandırabileceğimiz blockchain framework’leri arasında en eski ve en popüler olanı.
  • IBM tarafından desteklenmesi.
  • Güçlü community desteği. (Blockchain kavramsal anlamda ve bu altyapıyı sağlayan framework’ler bakımından oldukça yeni, henüz yeterli ekosisteme sahip değildir. Bu noktada destek gereksinimlerinin karşılanması için community’e ulaşım önemli bir ihtiyaç olmaktadır. Fabric projesinin iş geliştirme adımlarının takip edildiği Jira platformu ve geliştiricilerin iletişimde kullandıkları Rocket Chat platformu kullanıcılara açılmıştır.)
  • Projenin roadmap’inin net bir şekilde belirlenmiş olması: https://wiki.hyperledger.org/projects/fabric
  • Kullanım kolaylığı. (Docker container desteği ve Node.js SDK’leri ile oldukça kolay geliştirme yapılabilmektedir.)
  • Ticari kullanıma izin veren lisansı: Apache License Version 2.0

Sistem Mimarisi

Tasarlanan blockchain network’ünde her banka 2 node ile ağa katılmıştır. Her bankada kimliklendirme işlemlerini yönetecek 1 Certificate Authority (CA) ve transactionların yayınlanmasını sağlayacak ordering servisler sisteme eklenmişitir. Bütün bileşenlerde Hyperledger Fabric’in sağladığı Docker Image’ları ve bu bileşenlerle iletişimde Node.js SDK’sı kullanılmıştır. Aşağıdaki topoloji üzerinden sistemi daha detaylı inceyelim.

Bankalar arası fatura transferi blockchain networkü

Hyperledger Fabric kapalı(private) ve sadece izin verilen(permissioned) katılımcıların dahil olabildiği blockchain uygulamaları geliştirmek üzere tasarlanmış bir framework’tür. Katılımcılar sisteme organizasyon olarak dahil olurlar. Bu örnekte iki banka, iki farklı organizasyon olarak sisteme dahil olmuştur.

Organizasyonlar, peer’larını sisteme dahil eder ve yönetir. Bu sayede blockchain ağı tek bir organizasyonun kontrolünde bulunmaz. Peer’lar blockchainde verinin tutulduğu ve işlemlerin yapıldığı node’lardır. Bank1 ve Bank2 ikişer peer’ını (peer0 ve peer1) bu blockchain networkü’ne dahil etmiştir.

Peer’lar, blockchain network’lerinin temel elemanlarıdır. Üzerinde veriyi(ledger) ve blockchain network’ünde saklanacak asset’leri tanımlayan ve yöneten smart contract’ları barındırır. Hyperledger Fabric’te smart contract’lar chaincode olarak isimlendirilmektedir.

Ledger, blockchain uygulamalarında bütün verinin sıralı ve değiştirilemez olarak tutulduğu defterdir. Sisteme dahil olan her peer ledger’ı kendi üzerinde tutar. Böylelikle veri tüm katılımcılarda bulunmuş olur.

Ledger üzerine yazılan her transaction klasik blockchain uygulamalarına benzer olarak birbirine hash linkleri ile bağlıdır. Her transaction sonrası oluşan key-value setleri, hash linkleri ile bağlanmış bir şekilde defterde tutulur. Bu sayede verinin değiştirilemezliği garanti edilmiş olur.

Hyperledger Fabric’te veriler ledger’ın dışında, state isimli ledger’ın güncel halini tutan bir database’de daha saklanmaktadır. State, ledger’da oluşan key-value dataların son halini saklamaktadır. State’i daha iyi anlamak için para transferi örneği verilebilir. Yapılan tüm transfer işlemleri ledger’da, kullanıcıların son bakiyesi state’te tutulur. State, herhangi bir zaman diliminde ledger’dan, yani işlem geçmişinden tekrar oluşturulabilir.

State veri tabanları için LevelDB ve CouchDb desteklenmektedir. LevelDB file base bir veritabanı olarak default database, CouchDB ise bir NoSQL database çözümüdür. Geniş sorgulama altyapısı ile CocuchDB blockhain networklerinde raporlama ve performans konusunda önemli bir avantaj sağlamaktadır. Çalışılan MVP’de state database olarak CouchDB kullanılmıştır.

Peer’larda tutulan bir diğer önemli bileşen de chaincode’dur. Chaincode’lar asset tanımlarını ve bu tanımlar üzerinde nasıl işlemler yapılabileceğini belirleyen program parçalarıdır. Diğer bir deyişle, blockchain network’ündeki “business logic” tanımıdır. Fatura tanımı (fatura alanları) ve bu faturanın kabul edilmesi sırasında yapılacak kontroller chaincode’larda tanımlanmıştır.

Chaincode programlarında GO ve node.js programlama dilleri desteklenmektedir. Yeni güncellemelerin ilk olarak GO dilinde gelmesi nedeni ile bu MVP’de chaincode’lar GO programlama dili ile oluşturulmuştur.

Peki peer’lar birbirlerini nasıl tanıyacak? Son kullanıcılar sisteme nasıl dahil olacak?

Hyperledger Fabric’te her node ve son kullanıcı x.509 sertifikaları ile dijital kimliğe sahiptir. Dijital kimlikler Hyperledger Fabric için önemlidir, çünkü sertifikalar aracılığı ile kullanıcıların veya bileşenlerin yetkileri, özellikleri tanımlanmaktadır. Bu sebeple sertifikalar güvenilir olmalıdır ve güvenilir bir kaynak tarafından üretilmelidir. Hyperledger Fabric’te dijital kimlik yönetimi için Membership Service Provider (msp) bileşenleri mevcuttur. Hyperledger Fabric msp’ler aracılığı ile sertifikaları yönetir ve Public Key Infrastructure (PKI) mimarisini uygular.

Public Key Infrastructure (PKI) Nedir?

PKI, sertifikaların üretilmesi, dağıtılması, kullanılması ve doğrulanmasını için gerekli altyapıyı sağlayan bir mimaridir ve dört temel bileşenden oluşur.

  • Dijital sertifikalar
  • Public ve private key’ler
  • Certificate Authorities
  • Certificate Revocation List

Bankalar arası kurduğumuz blockchain’de sertifikaların üretilmesi ve dağıtılması için Hyperledger Fabric tarafından sağlanan Fabric CA bileşeni kullanılmıştır. Son kullanıcılar bankaların CA’leri üzerinden kimliklerini oluşturur ve blockchain network’ü ile iletişime geçebilirler.

Peer’lar ve CA’ler için gerekli root sertifikalar ise Fabric tarafından sağlanan cryptogen isimli tool ile üretilmiştir. Kullanılacak olan sertifikalarda bu tool’un kullanılması tamamen opsiyonel bir tercihtir. Openssl gibi açık kaynaklı tool’lar veya trusted CA’lerden alınan sertifikalar da bileşenlerde kullanılabilir. Ayrıca, yeni sertifikaların üretilmesi için kullanılan Fabric-CA bileşeninin kullanımı da opsiyonel olup, tak-çıkar bir modül olarak tasarlanmıştır. İstenirse özel CA’ler implemente edilerek blockchain network’üne dahil edilebilir.

Farklı organizasyonlar birbirlerini nasıl tanıyacak?

Hyperledger Fabric’te blockchain network’ü organizasyonların katıldığı kanallar ile tanımlanmaktadır. Organizasyonlar istediği peer’ları ile kurulan kanallara katılabilmektedir. Senaryomuzda Bank1 ve Bank2 Invoice Channel isimli blockchain kanalını kurmuş ve kanala bütün peer’ları ile katılmıştır. Kanal’lar tanımlanırken katılacak her organizasyon kendi msp’sini tanıtır. Bu sayede kanal msp’leri tanımış olur.

Organizasyonlar farklı peer’ları ile birden çok kanala katılabilir, bu durumda peer’lar her kanal için ayrı ledger tutarlar. Organizasyonlar arasında farklı ihtiyaçlar için farklı kanallar tanımlanabilmesi gizlilik ve fonksiyonellik açısından önemlidir.

Kanalı kim kuruyor? Merkezi bir otorite olmayacak mı?

Kanallar sadece katılımcıları belirlemek amacı ile tasarlanan lojik yapılardır. Kanalı kuran organizyonun network’te bir üstünlüğü mevcut değildir. Ledger ve state tüm katılımcılarda tutulmaktadır.

Bu yazıda gereksinimleri, gereksinimleri karşılamak için alternatifleri ve bu alternatiflerden Hyperledger Fabric’in genel mimarisini incelemeye çalıştık. Bir sonraki yazıda örnek bir akış üzerinden blockchain’de işlemlerin nasıl gerçekleşetiğini inceleyeceğiz.

Sonraki yazı: Hyperledger Fabric ile Blockchain Geliştirme #2: İşlem Adımları