Bir önceki yazımızda birçok kişiyi ilgilendiren (mesela kimin kime kaç Bitcoin havale ettiği gibi) hassas bilgiler içeren bir kütüğün kopyalarının internet üzerinde on binlerce farklı kişinin bilgisayarlarında açık ve güncel olarak tutulmasını öngören “blok zinciri” fikrini anlatmaya başlamış ve bu senaryoda kişilerin modern şifreleme teknikleri yardımıyla gerçek kimliklerini açık etmeden yapmak istedikleri işlem bilgilerini ağdaki herkese duyurabileceklerini görmüştük.
Bu ağın her üyesinin veri tabanının aynı kopyasını tutmasını sağlamamız gerek. Bu zor bir problem, çünkü sadece sabotajcılar filan değil, sıradan uyanıklar da bu tekdüzeliği bozarak çıkar elde etmeye çalışabilir: Diyelim Ali ve Veli adında iki kötü kalpli kardeş, Saffet adında saf bir otomobil satıcısını dolandırmaya niyetlendiler. 10 Bitcoin’i olan Ali, “Saffet’e 10 Bitcoin yolladım” mesajını ağa duyurur. Bunu gören ve artık o paranın kendisine ait olduğunu düşünen Saffet, Ali’ye bunun karşılığında güzel bir araba satar. Fakat Ali tam o sırada bir de “Veli’ye 10 Bitcoin yolladım” mesajı yayınlar. Hatlardaki farklı iletişim süreleri nedeniyle ağdaki bilgisayarlar bu iki mesajı farklı sıralarda alabilir.
Sistemin mantığı, ağdaki her bilgisayarın kendindeki kütük kopyasına duyurulan yeni Bitcoin işleminin bilgilerini eklemeden önce işlemi denetlemesi, yani Ali’nin ilk kaydından bu yana yaptığı bütün alışverişleri tarayarak şu anda bu harcamayı yapacak parası olup olmadığını kontrol etmesini gerektirir. Olayımızda Veli’ye yapılan transfere ilişkin mesajı önce alan bilgisayarlar bunu kayda geçirirlerse, daha sonra ellerine geçen Saffet’e yönelik transfer işlemini “Ali’nin artık bu kadar parası yok” diye reddedeceklerdir, yani Saffet arabayı vermiş ve karşılığında bir şey alamamış olacaktır. Zaten kayıt defterimizin birbiriyle tutarsız birden farklı kopyasının olması bütün projeyi berbat edecektir.
İşte bu problemin çözümü blok zinciri dediğimiz yapıya bağlı: Şimdiye dek “kütük”, “veri tabanı” veya “kayıt defteri” diye andığımız ortak bilgi kümesini, belirli boylarda bloklardan oluşan bir zincir şeklinde yapılandıracağız. Ezelden (daha doğrusu, kayıt tutmaya başladığımız andan) beri yapılan tüm işlemler, böyle blokların içine gruplanıp zincire eklenecek. Blokları A4 kağıtları gibi düşünün. Önce bir kağıda ilk yapılan birkaç işlem yazılıyor. Ayrıca bu kağıdın “adı” diyebileceğimiz özel bir sayı (detayını sonra göreceğimiz şekilde) hesaplanıp üstüne yazılıyor. (Blokları neden basitçe 1, 2, 3,... diye adlandırmadığımızı göreceksiniz, bu adlandırmanın kolay bir iş olmasını istemiyoruz.)
Bu şekilde hazırlanmış ilk sayfanın kopyaları tüm ağa dağıtılıyor. Sonraki birkaç işlem başka bir kağıda kaydedilip, bu yeni kağıdın üzerine “bu sayfadan önceki sayfa şuydu” etiketiyle bir önceki sayfanın adı yazılıyor. Tabii bu yeni hazırladığımız sayfanın kendi adı da hesaplanıyor. Bu sayfa da dünya aleme duyuruluyor. Böyle böyle, veri tabanımız art arda (Bitcoin sisteminde yaklaşık 10 dakika aralıklarla) o arada sistemin kullanıcıları tarafından yayınlanan işlem bildirimlerinden birkaçının bir araya getirilmesiyle hazırlanıp yine tüm sisteme duyurulan sayfaların eklenmesiyle gelişiyor.
Hiçbir işlem daha önce hazırlanıp yayınlanmış bir sayfada değişiklik yapmıyor, yeni havaleler vs. hep yeni sayfalara ekleniyor. Yani veri tabanı geçmişin tüm bilgisini içeriyor. Hâlâ her bilgisayarı her zaman blok zincirinin hep aynı kopyasını tutmaya nasıl zorlayacağımızı söylemedik. Yerimiz kalmadı. Bir sonraki yazıya kadar sabır lütfen.
Cem Say / [email protected]